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.

[参考译文] CCS/TM4C123GH6PM:无法在 LCD 16x2上显示消息。

Guru**** 2024750 points
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/632708/ccs-tm4c123gh6pm-unable-to-display-message-on-lcd-16x2

器件型号:TM4C123GH6PM
主题中讨论的其他器件:TM4C123

工具/软件: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 初始化为"单行"设备
    • 未能将 LCD 光标指向第2行的左边沿(在写入第2行之前通过发送地址0xC0实现)

    请注意、此类"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 电源)

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    大家好,我在最后一个评论中补充说,这就是我在运行上述给定序列时在 LCD 上得到的结果

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    原谅-但我(可能还有其他人)注意到您(刚刚添加)的"空白屏幕照片"与您之前的写操作之间的冲突:

    [引用用户="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。 此设置是否正常? 我觉得应该...好的评论!

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    这是您使用的 LCD 吗?
    www.sunrom.com/.../526000
    如果是、则 Vdd 在5V 时可能会出现电压电平问题。 输入高电平的最小电平为0.7Vdd、即3.5V。 TM4C123具有3.3V I/O 引脚、这可能不够。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我是否可以-始终尊重-不同意?    如您所知-控制(法律)机构是控制芯片的技术规格表-我现在介绍了该技术规格的关键页面-在这里-

    请注意、在过去的一年中、我设计/生产并销售了超过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。   请注意、这些是"极致对比度、宽视角显示"。  最棒的!