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.
工具/软件:Code Composer Studio
你(们)好
我正在使用 JHD 162A LCD 模块来显示消息("Hello World")。
我能够无错误地构建代码、但当我尝试运行代码时、程序会被吸入 exit.c 文件中。
并且 LCD 显示:
第1行- 16个"5x7"矩阵
第2行-空白。
// PB0-7 ->数据线路 D0-D7 // PD0 -> RS // PD1 ->启用 //******** 88 #include #include #include "inc/hw_memmap.h" #include "inc/hw_types.h" #include "driverlib/sysctl.h" #include "driverlib/gpio.h" unsigned char pines=(gpio_PIN_0 | gpio_PIN_1 | gpio_2 | gpio_PIN_3 | gpio_4 | gpio_6 | gpio_数据 格 式6 | gpio_pin 6 | gpio_pin 6 | gio_pin 6 | void 数据格式 gio_pin_pin 6 | GPIOPinWrite (GPIO_PORTB_BASE、引脚、数据);//将数据引脚0x01置位以清除 LCD 屏幕 GPIOPinWrite (GPIO_PORTD_base、GPIO_PIN_0|GPIO_PIN_1、0x03);//RS=1 | E=1 SysCtlDelay (2);//启用脉宽(高电平) 230纳秒 GPIOPinWrite (GPIO_PORTD_base、GPIO_PIN_0|GPIO_PIN_1、0x01);//RS=1 | E=0 SysCtlDelay (4167);//1毫秒延迟 } void Display (unsigned char * str) { while (* str) { lcd_data (*str); STR++; } } int main (void) { SysCtlClockSet (SYSCTL_SYSDIV_16|SYSCTL_USE_PLL|SYSCTL_XTAL_16MHz|SYSCTL_OSC_MAIN);//12.5MHz SysCtlPeripheralEnable (SYSCTL_Periph_GPIOD); SysCtlPeripheralEnable (SYSCTL_Periph_GPIOB); GPIOPinTypeGPIOOutput (GPIO_PORTB_BASE、GPIO_PIN_0|GPIO_PIN_1_GPIO_PIN_2|GPIO_PIN_3| GPIO_PIN_4| GPIO_PIN_5| GPIO_PIN_6| GPIO_PIN_7); GPIOPinTypeGPIOOutput (GPIO_PORTD_base、GPIO_PIN_0|GPIO_PIN_1); LCD 上电后、//等待15毫秒// SysCtlDelay (62500); GPIOPinWrite (GPIO_PORTD_base、GPIO_PIN_0|GPIO_PIN_1、0x00);//RS=0 | E=0 //使用命令初始化 LCD 显示屏 GPIOPinWrite (GPIO_PORTB_BASE、Pins、0x38);//将数据引脚置为0x38以获得2行5x7矩阵 GPIOPinWrite (GPIO_PORTD_base、GPIO_PIN_0|GPIO_PIN_1、0x02);//RS=0 | E=1 SysCtlDelay (2);//启用脉宽(高电平) 230纳秒 GPIOPinWrite (GPIO_PORTD_base、GPIO_PIN_0|GPIO_PIN_1、0x00);//RS=0 | E=0 SysCtlDelay (4167);// 1毫秒延迟 GPIOPinWrite (GPIO_PORTB_BASE、Pins、0x0c);//将数据引脚0x0c 上的 put 设置为在光标关闭时显示 GPIOPinWrite (GPIO_PORTD_base、GPIO_PIN_0|GPIO_PIN_1、0x02);//RS=0 | E=1 SysCtlDelay (2);//启用脉宽(高电平) 230纳秒 GPIOPinWrite (GPIO_PORTD_base、GPIO_PIN_0|GPIO_PIN_1、0x00);//RS=0 | E=0 SysCtlDelay (4167);// 1毫秒延迟 GPIOPinWrite (GPIO_PORTB_BASE、Pins、0x0E);//将数据引脚0x0E 上的数据放置在光标上 GPIOPinWrite (GPIO_PORTD_base、GPIO_PIN_0|GPIO_PIN_1、0x02);//RS=0 | E=1 SysCtlDelay (2);//启用脉宽(高电平) 230纳秒 GPIOPinWrite (GPIO_PORTD_base、GPIO_PIN_0|GPIO_PIN_1、0x00);//RS=0 | E=0 SysCtlDelay (4167);// 1毫秒延迟 GPIOPinWrite (GPIO_PORTB_BASE、Pins、0x01);//将数据引脚0x01置位以清除 LCD 屏幕 GPIOPinWrite (GPIO_PORTD_base、GPIO_PIN_0|GPIO_PIN_1、0x02);//RS=0 | E=1 SysCtlDelay (2);//启用脉宽(高电平) 230纳秒 GPIOPinWrite (GPIO_PORTD_base、GPIO_PIN_0|GPIO_PIN_1、0x00);//RS=0 | E=0 SysCtlDelay (4167);// 1毫秒延迟 GPIOPinWrite (GPIO_PORTD_base、GPIO_PIN_0|GPIO_PIN_1、0x01);//RS=1 | E=0 显示("Hello world"); }
我已从该社区的各种帖子中编译了此代码。
您的"问题描述"是否清晰直接? 注意(重要)主题行"Unable to display message on LCD 16x2 (无法在 LCD 16x2上显示消息)"。
然而、不久之后、您会注意到"顶部 LCD 行"显示为"16 "5x7"矩阵。" 因此、您的主题行与您报告的结果存在严重冲突-这是不是吗?
您所实现的"即使是一行 LCD 成功"这一事实可能会指出、(大部分)重要的"LCD 初始化代码"证明是正确的。 (好极了!)
现在-"未能在2x16 LCD 模块的第2行显示、通常是由以下原因导致的:
请注意、此类"LCD 寻址"被视为"命令"-因此必须在控制线路"RS"=0时完成。 数据写入之后-需要"RS"=1。
查看(非常简短)您的"借用各种文章代码"-我注意到您的 LCD 初始化代码不正确! "0x38"值是正确的 (对于2行显示)-但必须重复-并且(其他)初始化序列的关键部分-似乎缺失。
您使用此论坛的"搜索框"(此页顶部)应该可以找到我很久以前在这里提供/放置的"主(定义) LCD 规格(HD44780)"。 (您的搜索"keywords" LCD 和 CB1/CB1_mobile 应该找到。 (也可以在网络中搜索 HD44780 -并按照指定的8位初始化序列进行操作。
我没有花时间/精力去发现您是否(正确)"将 LCD 光标转向"第2行"-我为您回顾(和执行)该流程提供了足够的详细信息。
下面是我再次初始化它的方式
GPIOPinWrite (GPIO_PORTD_base、GPIO_PIN_0|GPIO_PIN_1、0x00);//RS=0 | E=0 //使用命令初始化 LCD 显示屏 GPIOPinWrite (GPIO_PORTB_BASE、Pins、0x38);//将数据引脚置为0x38以获得2行5x7矩阵 GPIOPinWrite (GPIO_PORTD_base、GPIO_PIN_0|GPIO_PIN_1、0x02);//RS=0 | E=1 SysCtlDelay (4167);//启用脉宽(高电平) 1毫秒 GPIOPinWrite (GPIO_PORTD_base、GPIO_PIN_0|GPIO_PIN_1、0x00);//RS=0 | E=0 SysCtlDelay (4167000);// 1秒延迟 GPIOPinWrite (GPIO_PORTB_BASE、Pins、0x38);//将数据引脚置为0x38以获得2行5x7矩阵 GPIOPinWrite (GPIO_PORTD_base、GPIO_PIN_0|GPIO_PIN_1、0x02);//RS=0 | E=1 SysCtlDelay (4167);//启用脉宽(高电平) 1毫秒 GPIOPinWrite (GPIO_PORTD_base、GPIO_PIN_0|GPIO_PIN_1、0x00);//RS=0 | E=0 SysCtlDelay (4167000);// 1秒延迟 GPIOPinWrite (GPIO_PORTB_BASE、Pins、0x80);//将数据引脚0x0c 上的位置放置、以聚焦第1行开始 GPIOPinWrite (GPIO_PORTD_base、GPIO_PIN_0|GPIO_PIN_1、0x02);//RS=0 | E=1 SysCtlDelay (4167);//启用脉宽(高电平) 1毫秒 GPIOPinWrite (GPIO_PORTD_base、GPIO_PIN_0|GPIO_PIN_1、0x00);//RS=0 | E=0 SysCtlDelay (4167000);// 1秒延迟 GPIOPinWrite (GPIO_PORTB_BASE、Pins、0x0E);//将数据引脚0x0E 上的数据放置在光标上 GPIOPinWrite (GPIO_PORTD_base、GPIO_PIN_0|GPIO_PIN_1、0x02);//RS=0 | E=1 SysCtlDelay (4167);//启用脉宽(高电平) 1毫秒 GPIOPinWrite (GPIO_PORTD_base、GPIO_PIN_0|GPIO_PIN_1、0x00);//RS=0 | E=0 SysCtlDelay (4167000);// 1秒延迟 GPIOPinWrite (GPIO_PORTB_BASE、Pins、0x01);//将数据引脚0x01置位以清除 LCD 屏幕 GPIOPinWrite (GPIO_PORTD_base、GPIO_PIN_0|GPIO_PIN_1、0x02);//RS=0 | E=1 SysCtlDelay (4167);//启用脉宽(高电平) 1毫秒 GPIOPinWrite (GPIO_PORTD_base、GPIO_PIN_0|GPIO_PIN_1、0x00);//RS=0 | E=0 SysCtlDelay (4167000);// 1秒延迟
如果我做错了、您能建议一个序列
PS:-我使用的 LCD 模块是 JHD162A (通过外部电源提供5V 电源)
原谅-但我(可能还有其他人)注意到您(刚刚添加)的"空白屏幕照片"与您之前的写操作之间的冲突:
[引用用户="Himanshu Goswami"]
LCD 显示: 第1行- 16个"5x7"矩阵
这两项陈述都不能成立-它们能不能成立? (很难"修复"-未(正确)描述。) 因为这可能是一个"语言问题"-我将尽力帮助/解决...
您问我、"建议正确的 LCD 初始化序列"-但我没有为您提供"方向和工具"-以发现该信息-您自己吗? 我的职责(如果有)是提供"一般解决方案"-从不提供"指导手册"!
我详细的"回答帖子"的"重新阅读"应该会引导您执行此类序列!
[引用 USER="CB1_MOBILE"]
液晶屏正在显示: 第一行- 16“5x7”矩阵
您问我、"建议正确的 LCD 初始化序列"-但我没有为您提供"方向和工具"-以发现该信息-您自己吗?
我的职责(如果有)是提供"一般解决方案"-从不提供"指导手册"!
[/报价]
我明白"喂食"不是一个好的学习方式、我非常感谢您的详细回答。
[引述]
但必须 重复- 并且(其他)初始化序列的关键部分似乎缺失。
[/报价]
您能指出什么? 我找不到缺失的器件...
它表明不需要两次执行0x38命令。 是吗?
尽管我尝试执行您对0x38的建议两次、但结果相同。 如上一帖子中的图片所示
我尝试采用上述链接中的序列。 但再说一次,Nada --失败了。
此时、我陷入了困境、以至于我无法想到代码失败的原因。 (我已经为处理命令提供了足够的延迟-实际上超过了所需的延迟)
快速问题:JHD162A 需要5V 电源,而我通过另一个板(C2000微控制器)提供的电源,我已将两个板 GND 短接。 我将 LCD 的数据引脚和 R/W、RS 和 E 引脚连接到 TM4c uC。 此设置是否正常? 我觉得应该...好的评论!
我是否可以-始终尊重-不同意? 如您所知-控制(法律)机构是控制芯片的技术规格表-我现在介绍了该技术规格的关键页面-在这里-
请注意、在过去的一年中、我设计/生产并销售了超过1M (百万)的此类显示器。 (可能很难"争论"这样的成功...)
此外-任何"论坛搜索"都将展示我对超过10张此类海报的帮助-指导他们成功-具有3V3有限的 MCU 输出-至(始终为) 5V LCD。
"特别注意"是 LCD 数据总线的构造、这说明了3V3输入电平的"原理和原因"是可以接受的! 此处-再次来自"控制技术来源:"
如果需要(进一步证明)-我提供以下内容:(这是由 LX4F231 (具有3V3最大输出电压)驱动的5V Char LCD (44780控制)的照片-证明"接受"了此类3V3电压电平。
为了响应海报找不到 LCD (正确)初始化编码的问题、我们收到了以下内容: (之前由本记者发布在这里...)
请注意、作为最受欢迎的组件(char LCD)的(过去)批量供应商、"安全播放"至关重要-以下代码保证正常工作-其他(较小)-不会太多! (因此、不是在生活或业务中成功的方式...) 之前发布的那些内容-这个线程-将(现在)看到"重复0x38"(对于2行 LCD)的必要性-并且它如下:
执行此类初始化时、会得到以下结果! 再说一次- 5V 电源- LX4F231 MCU - 3V3最大输出至 LCD。 请注意、这些是"极致对比度、宽视角显示"。 最棒的!