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.

[参考译文] 编译器/CC2538-CC2592EM-RD:将 HD44780与 CC2538进行硬时间连接

Guru**** 2546020 points


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

https://e2e.ti.com/support/wireless-connectivity/zigbee-thread-group/zigbee-and-thread/f/zigbee-thread-forum/566341/compiler-cc2538-cc2592em-rd-hard-time-interfacing-hd44780-with-cc2538

器件型号:CC2538-CC2592EM-RD

工具/软件:TI C/C++编译器

是否有人可以推荐一个良好的库来连接基于 HD44780的16x4字母数字显示屏?

到目前为止,我是指   <这个链接,并在图书馆运作上遇到困难。  

如果有任何帮助、我们将不胜感激。

谢谢。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    问题已解决! GPIOPinWrite (GPIO_B_BASE、GPIO_PIN_0、1)工作正常,但 GPIOPinWrite (GPIO_B_BASE、GPIO_PIN_1)永远不起作用,因为第三个参数“1”表示0x00000001,GPIO_PIN_1预期“2”为第三个参数,因为“2”表示0x00000010。 或者、我们可以将 GPIO_PIN_X、GPIO_PIN_X 作为第二个和第三个参数写入、以将引脚 X 写入高电平。

    在测试引脚写入时,我一直使用 GPIO 引脚0,这就是为什么第3个 arg=1工作正常的原因。 因此,当时看不出这个问题,后来我完全不怀疑第三个论点。 现在,在记下并进行必要的更改之后,我看到 HD44780 16x4 LCD 在3.3V 无背光的情况下运行的文本。 (背光需要单独的电源、并且在5V 电源下是最理想的)。

    注-现在我正在为同一个创建库。

    以下代码工作正常(在 zmain.c 中)。

    (笑声)
    extern uint32_t varhigh=0;
    extern uint32_t varlow=0;
    extern uint32_t cntvar=0;
    /*********
    *本地定义
    *
    (笑声)

    (笑声)
    /*********
    *本地函数
    *

    static void zmain_dev_info( void );
    static void zmain_ext_addr (void);

    静电空 helloworld (void);
    (笑声)

    (笑声)
    /*在 LCD 上显示设备信息*/
    支持#ifdef LCD_supported
    zmain_dev_info();
    zmain_lcd_init ();
    #endif

    代码#ifdef LCD3
    HelloWorld();
    while (1)
    {}//*/
    #endif
    (笑声)

    (笑声)
    代码#ifdef LCD3
    static void helloworld( void )

    varhigh= GPIOPinRead (GPIO_B_BASE、GPIO_PIN_1);
    GPIOPinTypeGPIOOutput (GPIO_C_base、GPIO_PIN_2|GPIO_PIN_3);//PC2是 RS、PC3是 RW.LED4是 PC3

    GPIOPinTypeGPIOOutput (GPIO_B_BASE、GPIO_PIN_1);//PB1为 EN

    GPIOPinTypeGPIOOutput (GPIO_A_base、GPIO_PIN_6|GPIO_PIN_7);//PA6为 DB4、PA7为 DB5
    GPIOPinTypeGPIOOutput (GPIO_D_base、GPIO_PIN_4|GPIO_PIN_5);//PD4为 DB6、PD5为 DB7
    //D3至 D0接地、数据/命令一次传输1、4位半字节。
    //while (1)
    //{
    GPIOPinWrite (GPIO_B_BASE、GPIO_PIN_1、GPIO_PIN_1);//EN 变为高电平
    GPIOPinWrite (GPIO_C_base、GPIO_PIN_3、0);//RW 变为低电平
    //00 0 1 0 - 0 0 0 0 0设置为4位操作(注:1半字节操作)
    GPIOPinWrite (GPIO_C_base、GPIO_PIN_2、0);//RS 变为0
    GPIOPinWrite (GPIO_D_base、GPIO_PIN_5、0);//D7为0
    GPIOPinWrite (GPIO_D_base、GPIO_PIN_4、0);//D6为0
    GPIOPinWrite (GPIO_A_base、GPIO_PIN_7、GPIO_PIN_7);//D5为1
    GPIOPinWrite (GPIO_A_base、GPIO_PIN_6、0);//D4为0
    GPIOPinWrite (GPIO_B_BASE、GPIO_PIN_1、0);//EN 变为低电平
    for (cntvar=0;cntvar<5000;cntvar++){};//等待31ms

    //next 命令
    // 00 0 1 0 - 0 0 0 0 0功能集,8位
    GPIOPinWrite (GPIO_B_BASE、GPIO_PIN_1、GPIO_PIN_1);//EN 变为高电平
    GPIOPinWrite (GPIO_C_base、GPIO_PIN_2、0);//RS 变为0
    GPIOPinWrite (GPIO_D_base、GPIO_PIN_5、0);//D7为0
    GPIOPinWrite (GPIO_D_base、GPIO_PIN_4、0);//D6为0
    GPIOPinWrite (GPIO_A_base、GPIO_PIN_7、GPIO_PIN_7);//D5为1
    GPIOPinWrite (GPIO_A_base、GPIO_PIN_6、0);//D4为0
    GPIOPinWrite (GPIO_B_BASE、GPIO_PIN_1、0);//EN 变为低电平
    for (cntvar=0;cntvar<5000;cntvar++){};//等待31ms
    //01 0 0 0 - 0 0 00 2个半字节
    GPIOPinWrite (GPIO_B_BASE、GPIO_PIN_1、GPIO_PIN_1);//EN 变为高电平
    GPIOPinWrite (GPIO_C_base、GPIO_PIN_2、0);//RS 变为0
    GPIOPinWrite (GPIO_D_base、GPIO_PIN_5、1);//D7为1
    GPIOPinWrite (GPIO_D_base、GPIO_PIN_4、0);//D6为0
    GPIOPinWrite (GPIO_A_base、GPIO_PIN_7、0);//D5为0
    GPIOPinWrite (GPIO_A_base、GPIO_PIN_6、0);//D4为0
    GPIOPinWrite (GPIO_B_BASE、GPIO_PIN_1、0);//EN 变为低电平
    for (cntvar=0;cntvar<5000;cntvar++){};//等待31ms

    //下一个命令
    // 00 0 0 0 0 - 0 0 0 00显示打开,光标打开,光标闪烁
    GPIOPinWrite (GPIO_B_BASE、GPIO_PIN_1、GPIO_PIN_1);//EN 变为高电平
    GPIOPinWrite (GPIO_C_base、GPIO_PIN_2、0);//RS 变为0
    GPIOPinWrite (GPIO_D_base、GPIO_PIN_5、0);//D7为0
    GPIOPinWrite (GPIO_D_base、GPIO_PIN_4、0);//D6为0
    GPIOPinWrite (GPIO_A_base、GPIO_PIN_7、0);//D5为0
    GPIOPinWrite (GPIO_A_base、GPIO_PIN_6、0);//D4为0
    GPIOPinWrite (GPIO_B_BASE、GPIO_PIN_1、0);//EN 变为低电平
    for (cntvar=0;cntvar<5000;cntvar++){};//等待31ms
    //01 1 1 - 0 00 0第2个半字节
    GPIOPinWrite (GPIO_B_BASE、GPIO_PIN_1、GPIO_PIN_1);//EN 变为高电平
    GPIOPinWrite (GPIO_C_base、GPIO_PIN_2、0);//RS 变为0
    GPIOPinWrite (GPIO_D_base、GPIO_PIN_5、GPIO_PIN_5);//D7为1
    GPIOPinWrite (GPIO_D_base、GPIO_PIN_4、GPIO_PIN_4);//D6为1
    GPIOPinWrite (GPIO_A_base、GPIO_PIN_7、GPIO_PIN_7);//D5为1
    GPIOPinWrite (GPIO_A_base、GPIO_PIN_6、GPIO_PIN_6);//D4为1
    GPIOPinWrite (GPIO_B_BASE、GPIO_PIN_1、0);//EN 变为低电平
    for (cntvar=0;cntvar<5000;cntvar++){};//等待31ms

    //next 命令
    //00 0 0 0 0 - 0 0 00进入模式、增加光标位置、无显示偏移
    GPIOPinWrite (GPIO_B_BASE、GPIO_PIN_1、GPIO_PIN_1);//EN 变为高电平
    GPIOPinWrite (GPIO_C_base、GPIO_PIN_2、0);//RS 变为0
    GPIOPinWrite (GPIO_D_base、GPIO_PIN_5、0);//D7为0
    GPIOPinWrite (GPIO_D_base、GPIO_PIN_4、0);//D6为0
    GPIOPinWrite (GPIO_A_base、GPIO_PIN_7、0);//D5为0
    GPIOPinWrite (GPIO_A_base、GPIO_PIN_6、0);//D4为0
    GPIOPinWrite (GPIO_B_BASE、GPIO_PIN_1、0);//EN 变为低电平
    for (cntvar=0;cntvar<5000;cntvar++){};//等待31ms
    //01 1 0 - 0 0 00 2个半字节
    GPIOPinWrite (GPIO_B_BASE、GPIO_PIN_1、GPIO_PIN_1);//EN 变为高电平
    GPIOPinWrite (GPIO_C_base、GPIO_PIN_2、0);//RS 变为0
    GPIOPinWrite (GPIO_D_base、GPIO_PIN_5、0);//D7为0
    GPIOPinWrite (GPIO_D_base、GPIO_PIN_4、GPIO_PIN_4);//D6为1
    GPIOPinWrite (GPIO_A_base、GPIO_PIN_7、GPIO_PIN_7);//D5为1
    GPIOPinWrite (GPIO_A_base、GPIO_PIN_6、0);//D4为0
    GPIOPinWrite (GPIO_B_BASE、GPIO_PIN_1、0);//EN 变为低电平
    for (cntvar=0;cntvar<5000;cntvar++){};//等待31ms

    对于(varhigh=0;varhigh<4;varhigh++)

    //数据'H'
    GPIOPinWrite (GPIO_B_BASE、GPIO_PIN_1、GPIO_PIN_1);//EN 变为高电平
    GPIOPinWrite (GPIO_C_base、GPIO_PIN_2、GPIO_PIN_2);//RS 变为1
    GPIOPinWrite (GPIO_D_base、GPIO_PIN_5、0);//D7为0
    GPIOPinWrite (GPIO_D_base、GPIO_PIN_4、GPIO_PIN_4);//D6为1
    GPIOPinWrite (GPIO_A_base、GPIO_PIN_7、0);//D5为0
    GPIOPinWrite (GPIO_A_base、GPIO_PIN_6、0);//D4为0
    GPIOPinWrite (GPIO_B_BASE、GPIO_PIN_1、0);//EN 变为低电平
    for (cntvar=0;cntvar<5000;cntvar++){};//等待31ms
    // 10 0 0 0 - 0 0 00 2个半字节
    GPIOPinWrite (GPIO_B_BASE、GPIO_PIN_1、GPIO_PIN_1);//EN 变为高电平
    GPIOPinWrite (GPIO_C_base、GPIO_PIN_2、GPIO_PIN_2);//RS 变为1
    GPIOPinWrite (GPIO_D_base、GPIO_PIN_5、GPIO_PIN_5);//D7为1
    GPIOPinWrite (GPIO_D_base、GPIO_PIN_4、0);//D6为0
    GPIOPinWrite (GPIO_A_base、GPIO_PIN_7、0);//D5为0
    GPIOPinWrite (GPIO_A_base、GPIO_PIN_6、0);//D4为0
    GPIOPinWrite (GPIO_B_BASE、GPIO_PIN_1、0);//EN 变为低电平
    for (cntvar=0;cntvar<5000;cntvar++){};//等待31ms

    //数据'E'
    //10 1 0 - 0 0 0 0 00 e
    GPIOPinWrite (GPIO_B_BASE、GPIO_PIN_1、GPIO_PIN_1);//EN 变为高电平
    GPIOPinWrite (GPIO_C_base、GPIO_PIN_2、GPIO_PIN_2);//RS 变为1
    GPIOPinWrite (GPIO_D_base、GPIO_PIN_5、0);//D7为0
    GPIOPinWrite (GPIO_D_base、GPIO_PIN_4、GPIO_PIN_4);//D6为1
    GPIOPinWrite (GPIO_A_base、GPIO_PIN_7、GPIO_PIN_7);//D5为1
    GPIOPinWrite (GPIO_A_base、GPIO_PIN_6、0);//D4为0
    GPIOPinWrite (GPIO_B_BASE、GPIO_PIN_1、0);//EN 变为低电平
    for (cntvar=0;cntvar<5000;cntvar++){};//等待31ms
    //10 1 0 1 - 0 0 0 02个半字节
    GPIOPinWrite (GPIO_B_BASE、GPIO_PIN_1、GPIO_PIN_1);//EN 变为高电平
    GPIOPinWrite (GPIO_C_base、GPIO_PIN_2、GPIO_PIN_2);//RS 变为1
    GPIOPinWrite (GPIO_D_base、GPIO_PIN_5、0);//D7为0
    GPIOPinWrite (GPIO_D_base、GPIO_PIN_4、GPIO_PIN_4);//D6为1
    GPIOPinWrite (GPIO_A_base、GPIO_PIN_7、0);//D5为0
    GPIOPinWrite (GPIO_A_base、GPIO_PIN_6、GPIO_PIN_6);//D4为1
    GPIOPinWrite (GPIO_B_BASE、GPIO_PIN_1、0);//EN 变为低电平
    for (cntvar=0;cntvar<5000;cntvar++){};//等待31ms
    //}

    //数据"l"


    #endif
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    编辑:为基于 HD44780的 LCD 模块供电时需要5V 电源、除非数据表中注明。 我用3.3V 测试了我的、最终我的设置使用5V 电源。 但是,数据线路仍由3.3V 逻辑驱动,这可能不是理想的解决方案,但它可以正常工作。