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.
我尝试向 LCD 16x2发送一个字符、但它失败了。 未显示任何内容。 使用此代码、我可以通过 PIC 和8051微控制器连接 LCD。 我稍微更改了一些以适应 Tiva C Launchpad、但它不起作用。
我使用引脚 B0-B7来传输数据。 A5-A6是 RS 和 E、RW 接地。 这是我的代码:
#include
#include
#include
#include "inc/hw_memmap.h"
#include "inc/hw_types.h"
#include "driverlib/pin_map.h"
#include "driverlib/sysctl.h"
#include "driverlib/gpio.h"
#define P0 GPIO_PIN_0
#define P1 GPIO_PIN_1
#define P2 GPIO_PIN_2
#define P3 GPIO_PIN_3
#define P4 GPIO_PIN_4
#define P5 GPIO_PIN_5
#define P6 GPIO_PIN_6
#define P7 GPIO_PIN_7
void delay_ms (int t)
{
SysCtlDelay (SysCtlClockGet ()/(3000/t));
}
void lcd_cmd (char cmd)
{
GPIOPinWrite (GPIO_Porta_base、P5、0);
GPIOPinWrite (GPIO_Porta_base、P6、1<<6);
GPIOPinWrite (GPIO_PORTB_BASE、P0|P1|P2|P3|P4|P5|P6|P7、cmd);
delay_ms (10);
GPIOPinWrite (GPIO_Porta_base、P6、0);
delay_ms (20);
}
void LCD_data (字符数据)
{
GPIOPinWrite (GPIO_Porta_base、P5、1<<5);
GPIOPinWrite (GPIO_Porta_base、P6、1<<6);
GPIOPinWrite (GPIO_PORTB_BASE、P0|P1|P2|P3|P4|P5|P6|P7、DATA);
delay_ms (10);
GPIOPinWrite (GPIO_Porta_base、P6、0);
delay_ms (20);
}
void LCD_WrStr (char *str)
{
while (* str)
{
lcd_data (*str);
STR++;
}
}
void SetCursor _LCD (unsigned char m、unsigned char n)//chinh vi tri con tro
{
如果(m=1)
{
LCD_cmd (0x80+n);
delay_ms (10);
}
其他
{
LCD_cmd (0xC0+n);
delay_ms (10);
}
}
void LCD_init (void)
{
SysCtlPeripheralEnable (SYSCTL_Periph_GPIOB);
SysCtlPeripheralEnable (SYSCTL_Periph_GPIOA);
GPIOPinTypeGPIOOutput (GPIO_PORTB_BASE、P0|P1|P3|P4|P5|P6|P7);
GPIOPinTypeGPIOOutput (GPIO_Porta_base、P5|P6);
GPIOPinWrite (GPIO_Porta_base、P5、0);
GPIOPinWrite (GPIO_Porta_base、P6、0);
GPIOPinWrite (GPIO_PORTB_BASE、P0|P1|P2|P3|P4|P5|P6|P7、0);
// delay_ms (200);
// LCD_cmd (0x30);
// delay_ms (500);
// LCD_cmd (0x30);
// delay_ms (110);
// LCD_cmd (0x30);
// delay_ms (1000);
LCD_cmd (0x38);
delay_ms (1000);
LCD_cmd (0x0C);
delay_ms (1000);
LCD_cmd (0x06);
delay_ms (1000);
LCD_cmd (0x01);
delay_ms (1000);
}
int main (空)
{
SysCtlClockSet (SYSCTL_SYSDIV_5|SYSCTL_USE_PLL|SYSCTL_XTAL_16MHz|SYSCTL_OSC_MAIN);
lcd_init();
SetCursor LCD (1、0);
delay_ms (100);
LCD_DATA ('H');
}
并非所有2x16特性 LCD 模块都(直接)接受3V3作为逻辑高电平输入。 (实际上、有这样的模块是为3V3输入"设计"的)
这可能(单独)—也可能不会—解释您的失败。 不是8051和 (旧版) PIC 5V 输出电平器件?
您是否看到显示屏的"dot field"? 您对 Vo 施加了什么电压? (您无法复制"过去"的成功设置和组件? 我们没有被告知这一点。)
一如既往-是否所有连接都在 LCD 的边缘连接器和 MCU 之间进行了测试/验证? (即欧姆输出)
最后-您没有提到您的 MCU 或电路板-这会证明很有帮助-是否不会?
如果是 TM4C123 LPAD -可能存在(令人愉快) 0Ω Ω 电阻器-哪个(可能)会阻碍端口 B 的2个引脚? (这是您为 LCD 数据选择的"非常"的端口!)
请注意、"失败和/或不起作用"等描述在尝试提供帮助时提供的值很少(即无)。 (部分)需要详细信息。
谢谢-谢谢。 您会注意到一个 MCU -但不会注意到您的电路板。 如果 Launchpad -电阻器 R9/10连接到 PD0/PD1。 (它们不会像我之前所担心的那样影响 Port_B。
通过"查看点字段"、我们可以确保正确处理 LCD 的"Vo"引脚-问题很可能落在互连或时序方面。
您应该能够编写短代码块、在2秒的间隔内将 Port_B 总线从"0xAA 切换为0x55"、这样您就可以监控 LCD 接头上交替出现的1s 或0s (安全)到达情况。 您可以使用 RS & E 执行相同的操作-选择代码、每切换@ 2Hz -足够慢、以便(甚至)粗 DVM 响应。 (如果您无法很好地使用更好的设备-同样、我们也没有被告知。)
您没有提到您的 LCD 规格-某些字符模块将不会"看到"3V3为逻辑高电平。 (因为该电平低于5V 的70%!) 您的 LCD 规格是对该规格的判断/评判-除非您过去(成功)的 PIC MCU (也)运行@ 3V3级别。 (再次询问此问题-未回答)
一如既往-在开始时、更多/更长的延迟不会受到影响。 稍后-工作后-您可以"微调"-太短的延迟将导致您(现在)注意到的确切问题。
从我对您的代码的快速回顾中、一切都不会跳出来。
当您报告已移动此 LCD (现在是它的第三个家)时、您如何确保所有连接保持完好和稳定? 您最近检查过吗? (客户经常告诉我们-所有的事情都被检查-几乎总是-我们(然后)发现这不真实-我们浪费的时间/旅行/沮丧要收费!) "简单的事情太频繁了-被忽视了!"