基于stm32HAL库的lcd1602的程序案例分析
LCD1602(Liquid Crystal Display)是一种工业字符型液晶,能够同时显示 16×02 即 32 字符(16 列两行)
1602 液晶模块的读写操作,屏幕和光标的操作都是通过指令编程来实现的。(说明:1 为高电平、0 为低电 平)
5.基本操作时序表
读操作时序
写操作时序
9. LCD1602 的一般初始化(复位)过程
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)
{
}
}