基于stm32HAL库的lcd1602的程序案例分析

基于stm32HAL库的lcd1602的程序案例分析

LCD1602(Liquid Crystal Display)是一种工业字符型液晶,能够同时显示 16×02 即 32 字符(16 列两行)

9cb0f31611a74909b433cddd2b51cbf7.png7bc2ac2b946242f19ec4e970060cd6e7.png

1602 液晶模块的读写操作,屏幕和光标的操作都是通过指令编程来实现的。(说明:1 为高电平、0 为低电 平)  

5.基本操作时序表

读操作时序

47409360641a4b9c99488107a2465137.png

写操作时序

 a2a8fd0a897744e5bcdc72837c52e521.png

 9e0cab6f36214c47894a0d2ceec20b4c.png

c8eb4ef595ab4eb7a4cbaa4c072d733f.png

4f2030fa2217461d811a2d8d596ddd0d.png

 9. LCD1602 的一般初始化(复位)过程

b7998c0146a74a79a4fc998217df2074.png

 1、初始化lcd1602

        初始化GPIO

        上电初始化

初始化lcd用到的gpio口

        使能GPIO口、赋值(模式,接口,拉模式)、

2、初始化lcd1602起始配置  

void lcd1602_start(void)
{
//	(1)延时 15ms 
	delay_ms(15);
//(2)写指令 38H(不检测忙信号)
	lcd1602_write_cmd(0x38);
//(3)延时 5ms 
	delay_ms(5);
//(4)以后每次写指令,读/写数据操作均需要检测忙信号 
	
//(5)写指令 38H:显示模式设置 
	lcd1602_write_cmd(0x38);;
//(6)写指令 08H:显示关闭 
	lcd1602_write_cmd(0x08);
//(7)写指令 01H:显示清屏
	lcd1602_write_cmd(0x01);
//(8)写指令 06H:显示光标移动设置
	lcd1602_write_cmd(0x06);
//(9)写指令 0CH:显示开及光标设置 
	lcd1602_write_cmd(0x0C);
	

}

3、写指令

void lcd1602_write_cmd(char cmd)
{
	RS_LOW;// RS 为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器。
	RW_LOW;// R/W 为读写信号线,高电平时进行读操作,低电平时进行写操作。
	EN_LOW;
	GPIOA->ODR = cmd;//将一字节数据发到GPIOA 8个引脚
	delay_ms(5);
	EN_HIGH;
	delay_ms(5);  //E 端为使能端,当 E 端由高电平跳变成低电平时,液晶模块执行命令。
	EN_LOW;

}

4、写数据

void lcd1602_write_data(char dataChar)
{
    RS_HIGH;
    RW_LOW;//是自己会拉高吗
    RW_LOW;
    GPIO->ODR = dataChar;
    delay_ms(5);
    EN_HIGH;
    delay_ms(5);
    EN_LOW;
}

5、显示一个字符

void lcd1602_show_char(void)
{
    lcd1602_write_cmd(0x80 + 0x02);
    
    lcd1602_write_data('L');

}

6、显示一串字符

void lcd1602_show_line(char row,char col, char *string)
{
    switch(row)
    {
       case 1://在哪个位置
        lcd1602_write_cmd(0x80 + col);
        while(*string)
               {
                    lcd1602_write_data(*string);
                    string++;
                }
        break;
       case 2:
                    lcd1602_write_cmd(0x80 + 0x40 +col);
                    while(*string)
                {
                    lcd1602_write_data(*string);
                    string++;
                }
        break;
}
}

7、引脚定义法

/lcd1602.c///
//RS引脚定义
#define RS_GPIO_Port  GPIOB
#define RS_GPIO_Pin  GPIO_PIN_1
#define RS_HIGH HAL_GPIO_WritePin(RS_GPIO_Port,RS_GPIO_Pin,GPIO_PIN_SET);
#define RS_LOW  HAL_GPIO_WritePin(RS_GPIO_Port,RS_GPIO_Pin,GPIO_PIN_RESET);

//RW引脚定义
#define RW_GPIO_Port  GPIOB
#define RW_GPIO_Pin  GPIO_PIN_2
#define RW_HIGH HAL_GPIO_WritePin(RW_GPIO_Port,RS_GPIO_Pin,GPIO_PIN_SET);
#define RW_LOW  HAL_GPIO_WritePin(RW_GPIO_Port,RS_GPIO_Pin,GPIO_PIN_RESET);

//EN引脚定义
#define EN_GPIO_Port  GPIOB
#define GPIO_PIN_Port GPIO_PIN_10
#define EN_HIGH HAL_GPIO_WritePin(EN_GPIO_Port,EN_GPIO_Pin,GPIO_PIN_SET);
#define EN_LOW  HAL_GPIO_WritePin(EN_GPIO_Port,EN_GPIO_Pin,GPIO_PIN_RESET);

 8、主函数

int main(void)
{
    HAL_Init();
    stm32_clock_init(RCC_PLL_MUL9);
    led_init();
    lcd1602_init();
    lcd1602_show_char();
    lcd1602_show_line(1,2,"STM32");
    lcd1602_show_line(2,1,"LHC Handsome");
    while(1)
    {
}
}

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值