This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
工具/软件:TI C/C++编译器
您好!
我尝试将16x2 LCD 与 Tiva 连接、在这里我尝试在 LCD 上发送字符串、我在4位模式下使用了 LCD。在我的硬件中、只有4位配置、所以我无法使用8位模式。 请帮助我解决这个4位模式问题。 我在 LCD 屏幕上看到了点、但没有显示任何光标/字符串。我使用 SysTick 中断来提供适当的延时时间。我检查了使用示波器触发的使能引脚、它正在正确触发。 我在许多关于 LCD 显示屏的论坛上都发了红、但仍然无法解决问题。 我不熟悉 Tiva,我希望这个论坛中的人能帮助我。
VSS 接地
VDD 连接到 POT
VEE 连接到+5V
RS 连接到端口 G 引脚4
RW 接地...
使能引脚连接到端口 G 引脚5
D0至 D4分别连接到端口 G 引脚0至引脚4
背光引脚也连接到+5V 和接地...
下面是我用于连接的代码
#include
#include
#include "inc/hw_i2c.h"
#include "inc/hw_memmap.h"
#include "inc/hw_types.h"
#include "driverlib/gpio.h"
#include "driverlib/i2c.h"
#include "driverlib/pin_map.h"
#include "driverlib/sysctl.h"
#include "driverlib/uart.h"
#include "driverlib/SysTick .h"
#include "inc/hw_NVIC.h"
#include "inc/hw_types.h"
#include "driverlib/pin_map.h"
#include "driverlib/interrupt.h"
volatile uint32_t msTicks = 0;
/
LCD 处于4位模式、因此它首先以2个 stroks 发送数据、然后是字符的较高4个半字节
(三 /
/
SysTick 中断功能
(二 /
空 SysTick 处理程序(空)
{
//
//更新 SysTick 中断计数器。
//
/* delay 中必需的递增计数器()*/
msTicks++;
}
空延迟(uint32_t dlyTicks)
{
uint32_t curTicks;
curTicks = msTicks;
while (msTicks - curTicks )< dlyTicks;
}
/
SysTick 中断结束
(二 /
void lcd_command (unsigned char cmd)
{
GPIOPinWrite (GPIO_PORTG_base、GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3、cmd);//LCD 数据
延迟(1000);
//GPIOPinWrite (GPIO_PORTD_base、GPIO_PIN_0、com);//LCD 模式
GPIOPinWrite (GPIO_PORTG_base、GPIO_PIN_4|GPIO_PIN_5、0x00);//make RS=0GPIO 引脚4、E=0 GPIO 引脚5
延迟(1000);
GPIOPinWrite (GPIO_PORTG_base、GPIO_PIN_4|GPIO_PIN_5、0x20);//make RS=0、E=1通过高电平到低电平脉冲启用 LCD
延迟(1000);
GPIOPinWrite (GPIO_PORTG_base、GPIO_PIN_4|GPIO_PIN_5、0x00);//make RS=0、E=0
延迟(1000);
}
void LCD_data (无符号字符数据)
{
GPIOPinWrite (GPIO_PORTG_base、GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3、DATA);//LCD 数据
延迟(1000);
//GPIOPinWrite (GPIO_PORTD_base、GPIO_PIN_0、com);//LCD 模式
GPIOPinWrite (GPIO_PORTG_base、GPIO_PIN_4|GPIO_PIN_5、0x10);//make RS=1GPIO 引脚4、E=0 GPIO 引脚5
延迟(1000);
GPIOPinWrite (GPIO_PORTG_base、GPIO_PIN_4|GPIO_PIN_5、0x30);//make RS=1、E=1通过高电平到低电平脉冲启用 LCD
延迟(1000);
GPIOPinWrite (GPIO_PORTG_base、GPIO_PIN_4|GPIO_PIN_5、0x10);//make RS=1、E=0
延迟(1000);
}
void LCD_Init()
{
LCD_COMMAND (0x28);//4位模式 LCD、在5x7矩阵之间具有2行和字符形状。
延迟(500);//提供500ms 延迟
LCD_COMMAND (0x06);//显示打开、光标关闭/进入模式它告诉 LCD 我们将要使用。
延迟(500);//提供500ms 延迟
LCD_COMMAND (0x0E);//将光标显示在上,显示在上。
延迟(500);//提供500ms 延迟
LCD_COMMAND (0x0F);//将光标显示在上,显示在上。
延迟(500);//提供500ms 延迟
LCD_COMMAND (0x01);//清除屏幕
延迟(500);//提供500ms 延迟
}
void LCD_String_Display (无符号字符*str)
{
while (*str!='0')
{
lcd_data (*str);
STR++;
}
}
/
main 从这里开始
秘书长的报告 /
int main (空)
{
SysCtlClockSet (SYSCTL_SYSDIV_1|SYSCTL_USE_OSC |SYSCTAL_8MHZ|SYSCTL_OSC_MAIN);//8MHz 停止晶体器
SysCtlPeripheralEnable (SYSCTL_Periph_GPIOG);
while (!SysCtlPeripheralReady (SYSCTL_Periph_GPIOG));
GPIOPinTypeGPIOOutput (GPIO_PORTG_base、GPIO_PIN_0|GPIO_PIN_1_GPIO_PIN_2|GPIO_PIN_3|GPIO_PIN_4|GPIO_PIN_5);
IntMasterEnable();//启用处理器中断。
SysTickPeriodSet (7997);//为 SysTick 计时器设置1ms 的周期。
SysTickIntEnable();//启用 SysTick 中断。
SysTickEnable();//启用 SysTick。 SysTickEnable();//启用 SysTick。
//GPIOPinTypeLCD (GPIO_PORTG_base、GPIO_PIN_0|GPIO_PIN_1_GPIO_PIN_2|GPIO_PIN_3|GPIO_PIN_4|GPIO_PIN_5);
LCD_Init();
while (1)
{
LCD_String_Display ("欢迎...");
}
}
/
main 的末尾
「香港 /
期待快速重播...
此致、
Alphy
您好、先生、
非常感谢您分享您的知识。 它帮助我考虑4位 、并帮助我解决我的问题。 该问题与4位数据传输和延迟有关。
我更改了延迟并更改了前半部分发送 更高半字节的数据传输、并将使能引脚置为高电平和低 电平、后半部分发送低半字节、然后再次使能和禁用使能引脚。这些更改使我的代码正常工作。
再次感谢您的帮助。
此致、
Alphy