STM32CubeIDE 操作 LCD1602

c84cc0d93d954f0e8f0f71bc234e2d56.jpeg

 4d99696bc5324b629db0b9dacd09347d.jpeg

78c5efe1a17444de947bcdf07a9f2667.jpeg

9306c60f653b41b0b34309953b939daf.jpeg

5f31b3ebda654c50b6b7a582c04055b0.jpeg

065ec02f8b184af3930f6665bb380959.jpeg

00981c6452fb44ac988929ab38e5b312.jpeg

74f700252e8f450d8a635d5f6957a0e5.jpeg

d91350f01f6442e2aa6c0b297c3cd6f8.jpeg补充内容:

43ec69d4afdf4507b342554489ee091c.jpegf9a570848a6c40af94d9d1047164249d.jpeg 注意:所有的指令、数据读写都需要 "E" 有一个脉冲。

STM32CubeIDE首先要对芯片初始化,如图:

ff64284c4a7844799ab5c969d78ba491.png

820054db83a04c44af03403c5947fc32.png

 书中的代码很全面但是不利于理解,简化一下,总体思路。

 1、通过RS引脚确定是写数据还是写指令。

2、读写控制端(RW)设置为写模式。

3、把数据或指令送到数据线上。(D0~D7)

4、给E一个高脉冲,将数据送入液晶控制器。


    WriteData(0x38);

/* 准备D0~D7 数据,设置16*2显示,5*7点阵,8位数据接口。

7887bba3632a4706b34b4505c47ac237.png

 */


    HAL_GPIO_WritePin(GPIOA, RS_Pin, GPIO_PIN_RESET); 
    HAL_GPIO_WritePin(GPIOA, RW_Pin, GPIO_PIN_RESET);
    HAL_GPIO_WritePin(GPIOA, E_Pin, GPIO_PIN_RESET);

    HAL_GPIO_WritePin(GPIOA,RS_Pin,GPIO_PIN_RESET);
    HAL_GPIO_WritePin(GPIOA,RW_Pin,GPIO_PIN_RESET);
    HAL_GPIO_WritePin(GPIOA,E_Pin,GPIO_PIN_SET);
    __NOP();
    HAL_GPIO_WritePin(GPIOA,E_Pin,GPIO_PIN_RESET);
    HAL_Delay(2);


    WriteData(0x01);

/* 准备D0~D7 数据,显示清零,数据指针清零。

4cb3a5d810a74fbfa40b205e7602a8c9.png

 */


    HAL_GPIO_WritePin(GPIOA,RS_Pin,GPIO_PIN_RESET);
    HAL_GPIO_WritePin(GPIOA,RW_Pin,GPIO_PIN_RESET);
    HAL_GPIO_WritePin(GPIOA,E_Pin,GPIO_PIN_RESET);

    HAL_GPIO_WritePin(GPIOA,RS_Pin,GPIO_PIN_RESET);
    HAL_GPIO_WritePin(GPIOA,RW_Pin,GPIO_PIN_RESET);
    HAL_GPIO_WritePin(GPIOA,E_Pin,GPIO_PIN_SET);
    __NOP();
    HAL_GPIO_WritePin(GPIOA,E_Pin,GPIO_PIN_RESET);


    WriteData(0x06);

/*准备D0~D7 数据,写一个字符后地址指针加1

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBARElKSUFORzMyMQ==,size_20,color_FFFFFF,t_70,g_se,x_16

 */
    HAL_GPIO_WritePin(GPIOA,RS_Pin,GPIO_PIN_RESET);
    HAL_GPIO_WritePin(GPIOA,RW_Pin,GPIO_PIN_RESET);
    HAL_GPIO_WritePin(GPIOA,E_Pin,GPIO_PIN_RESET);

    HAL_GPIO_WritePin(GPIOA,RS_Pin,GPIO_PIN_RESET);
    HAL_GPIO_WritePin(GPIOA,RW_Pin,GPIO_PIN_RESET);
    HAL_GPIO_WritePin(GPIOA,E_Pin,GPIO_PIN_SET);
    __NOP();
    HAL_GPIO_WritePin(GPIOA,E_Pin,GPIO_PIN_RESET);
    HAL_Delay(2);


    WriteData(0x0c);

/*准备D0~D7 数据,设置开显示,不显示光标。码表见上图*/
    HAL_GPIO_WritePin(GPIOA,RS_Pin,GPIO_PIN_RESET);
    HAL_GPIO_WritePin(GPIOA,RW_Pin,GPIO_PIN_RESET);
    HAL_GPIO_WritePin(GPIOA,E_Pin,GPIO_PIN_RESET);

    HAL_GPIO_WritePin(GPIOA,RS_Pin,GPIO_PIN_RESET);
    HAL_GPIO_WritePin(GPIOA,RW_Pin,GPIO_PIN_RESET);
    HAL_GPIO_WritePin(GPIOA,E_Pin,GPIO_PIN_SET);
    __NOP();
    HAL_GPIO_WritePin(GPIOA,E_Pin,GPIO_PIN_RESET);
    HAL_Delay(2);


    WriteData(0x80);

/*定位*/
    HAL_GPIO_WritePin(GPIOA,RS_Pin,GPIO_PIN_RESET);
    HAL_GPIO_WritePin(GPIOA,RW_Pin,GPIO_PIN_RESET);
    HAL_GPIO_WritePin(GPIOA,E_Pin,GPIO_PIN_RESET);

    HAL_GPIO_WritePin(GPIOA,RS_Pin,GPIO_PIN_RESET);
    HAL_GPIO_WritePin(GPIOA,RW_Pin,GPIO_PIN_RESET);
    HAL_GPIO_WritePin(GPIOA,E_Pin,GPIO_PIN_SET);
    __NOP();
    HAL_GPIO_WritePin(GPIOA,E_Pin,GPIO_PIN_RESET);
    HAL_Delay(2);


    WriteData('W');

/*写入字符“W”*/
    HAL_GPIO_WritePin(GPIOA, RS_Pin, GPIO_PIN_SET);
    HAL_GPIO_WritePin(GPIOA, RW_Pin, GPIO_PIN_RESET);
    HAL_GPIO_WritePin(GPIOA, E_Pin, GPIO_PIN_RESET);

    HAL_GPIO_WritePin(GPIOA,RS_Pin,GPIO_PIN_SET);
    HAL_GPIO_WritePin(GPIOA,RW_Pin,GPIO_PIN_RESET);
    HAL_GPIO_WritePin(GPIOA,E_Pin,GPIO_PIN_SET);
    __NOP();
    HAL_GPIO_WritePin(GPIOA,E_Pin,GPIO_PIN_RESET);
    HAL_Delay(2);

07933c01fe5c462ba8b2dd3fac50c451.png

懂了噻:) 

 WriteData 函数用qt改写了一下,就知道为什么要这么弄了:)

        unsigned char dat=0x38;
        unsigned short Set_Pins=0;
        unsigned short Rst_Pins=0;
        if(dat & 0x01)Set_Pins|=0x0001;
        else          Rst_Pins|=0x0001;
        if(dat & 0x02)Set_Pins|=0x0002;
        else          Rst_Pins|=0x0002;
        if(dat & 0x04)Set_Pins|=0x0004;
        else          Rst_Pins|=0x0004;
        if(dat & 0x08)Set_Pins|=0x0008;
        else          Rst_Pins|=0x0008;
        if(dat & 0x10)Set_Pins|=0x0010;
        else          Rst_Pins|=0x0010;
        if(dat & 0x20)Set_Pins|=0x0020;
        else          Rst_Pins|=0x0020;
        if(dat & 0x40)Set_Pins|=0x0040;
        else          Rst_Pins|=0x0040;
        if(dat & 0x80)Set_Pins|=0x0080;
        else          Rst_Pins|=0x0080;
        qDebug()<<QString::number(Set_Pins,2)<<"|"<<QString::number(Rst_Pins,2);

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值