模块:LCD1602_3.3V
主控: STM32F4xxxx
目录
一、LCD1602
使用的模块供电电压是3.3V的!!
接口说明:
二、时序说明
一、LCD1602
使用的是某宝LCD1602A模块
简述:
1602A QAPASS字符型液晶显示模块是专门用于显示字母、数字元、符号
等的点阵型液晶显示模块。分4位和8位数据传输方式。提供5×7点阵+游
标的显示模式。提供显示数据缓冲区DDRAM、字符发生器CGROM和字符
发生器CGRAM,可以使用CGRAM来存储自己定义的最多8个5×8点阵的
图形字符的字模数据。提供了丰富的指令设置:清显示;游标回原点;显示开
/关;游标开/关;显示字符闪烁;游标移位;显示移位元等。提供内部上电自
动复位电路,当外加电源电压超过+4.5V时,自动对模块进行初始化操作,将
模块设置为默认的显示工作状态。
1602A QAPASS为环保型液晶显示模块。
使用的模块供电电压是3.3V的!!
接口说明:
![](https://img-blog.csdnimg.cn/20210328072249662.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM2OTgzOTIx,size_16,color_FFFFFF,t_70)
二、时序说明(非常重要)
1.读时序
不看了
2.写时序
写分为2种:写指令和写数据
具体如下:
RS | R/W | 说明 |
0 | 0 | 写指令 |
1 | 0 | 写数据 |
算了,不想写了,上代码
1.IO口初始化
void LCD_IO_Init(void)
{GPIO_InitTypeDef GPIO_InitStructure;RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE);//使能GPIOB时钟RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOC, ENABLE);//使能GPIOC时钟RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);//使能GPIOA时钟RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD, ENABLE);//使能GPIOD时钟//RWGPIO_InitStructure.GPIO_Pin = 1<<LCD1602_RW_PIN;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;//普通输出模式GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;//推挽输出GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(LCD1602_RW_PORT, &GPIO_InitStructure);//初始化//RSGPIO_InitStructure.GPIO_Pin = 1<<LCD1602_RS_PIN ;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;//普通输出模式GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;//推挽输出GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(LCD1602_RS_PORT, &GPIO_InitStructure);//初始化//ENGPIO_InitStructure.GPIO_Pin = 1<<LCD1602_EN_PIN;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;//普通输出模式GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;//推挽输出GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(LCD1602_EN_PORT, &GPIO_InitStructure);//初始化//DB0 //DB1GPIO_InitStructure.GPIO_Pin = (1<<LCD1602_D0_PIN) |(1<<LCD1602_D1_PIN);GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;//普通输出模式GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;//推挽输出GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(LCD1602_D0_PORT, &GPIO_InitStructure);//初始化//DB2GPIO_InitStructure.GPIO_Pin = (1<<LCD1602_D2_PIN) ;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;//普通输出模式GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;//推挽输出GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(LCD1602_D2_PORT, &GPIO_InitStructure);//初始化//DB3 //DB4 //DB5 //DB6 //DB7GPIO_InitStructure.GPIO_Pin = (1<<LCD1602_D3_PIN) |(1<<LCD1602_D4_PIN) | (1<<LCD1602_D5_PIN)|(1<<LCD1602_D6_PIN) |(1<<LCD1602_D7_PIN);GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;//普通输出模式GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;//推挽输出GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOB, &GPIO_InitStructure);//初始化}
2.LCD_写数据控制D0~D7(此处使用的是不连续IO)
连续的IO可以直接向端口写
void Write_Port(uint8_t byte)
{LCD_D0_OUT=(byte&0x01)>>0;LCD_D1_OUT=(byte&0x02)>>1;LCD_D2_OUT=(byte&0x04)>>2;LCD_D3_OUT=(byte&0x08)>>3;LCD_D4_OUT=(byte&0x10)>>4;LCD_D5_OUT=(byte&0x20)>>5;LCD_D6_OUT=(byte&0x40)>>6;LCD_D7_OUT=(byte&0x80)>>7;
}
3.写指令
写指令时,RS=0;RW=0,在EN为低电平时写入数据,产生上升沿,让模块读取数据(使用stm32驱动时,延时就对了)
EN的周期最小是1000us=1ms,所以速度再快也就1khz
关注
EN的脉宽最小是450us
根据时序图可得下面代码
void LCD_Write_Cmd(unsigned char CMD) //BuysC为0时忽略忙检测
{LCD_Wait_Ready(); LCD_RS=0;LCD_RW=0;LCD_EN=0;LCD_EN=1; Write_Port(CMD);delay_ms(5);LCD_EN=0;
}
4.写数据
void LCD_Write_Dat(unsigned char LCD_Data)
{LCD_Wait_Ready();LCD_RS=1;LCD_RW=0;LCD_EN=0;LCD_EN=1; Write_Port(LCD_Data);delay_ms(1);LCD_EN=0;}
5.LCD初始化
void LCD_Init(void)
{LCD_IO_Init(); // IO口初始化delay_ms(500);LCD_RW=0;delay_us(2);LCD_Write_Cmd(0x38); //16*2显示,5*7点阵,8位数据口delay_ms(10);LCD_Write_Cmd(0x01); //清屏delay_ms(10);LCD_Write_Cmd(0x0F); //开显示,光标开启,光标闪烁delay_ms(10);LCD_Write_Cmd(0x06); //文字不动,地址自动+1delay_ms(10);LCD_Write_Cmd(0x80); //设置坐标为左上角第一个delay_ms(10);
}
6.宏
#define LCD1602_RS_PIN 13
#define LCD1602_RS_PORT GPIOC#define LCD1602_RW_PIN 15
#define LCD1602_RW_PORT GPIOA#define LCD1602_EN_PIN 10
#define LCD1602_EN_PORT GPIOC#define LCD1602_D0_PIN 11
#define LCD1602_D0_PORT GPIOC#define LCD1602_D1_PIN 12
#define LCD1602_D1_PORT GPIOC#define LCD1602_D2_PIN 2
#define LCD1602_D2_PORT GPIOD#define LCD1602_D3_PIN 3
#define LCD1602_D3_PORT GPIOB#define LCD1602_D4_PIN 4
#define LCD1602_D4_PORT GPIOB#define LCD1602_D5_PIN 5
#define LCD1602_D5_PORT GPIOB#define LCD1602_D6_PIN 6
#define LCD1602_D6_PORT GPIOB#define LCD1602_D7_PIN 7
#define LCD1602_D7_PORT GPIOB#define LCD_RS PCout(13)
#define LCD_RW PAout(15)
#define LCD_EN PCout(10)#define LCD_D0_OUT PCout(11)
#define LCD_D1_OUT PCout(12)
#define LCD_D2_OUT PDout(2)
#define LCD_D3_OUT PBout(3)
#define LCD_D4_OUT PBout(4)
#define LCD_D5_OUT PBout(5)
#define LCD_D6_OUT PBout(6)
#define LCD_D7_OUT PBout(7)#define LCD_D0_IN PCin(11)
#define LCD_D1_IN PCin(12)
#define LCD_D2_IN PDin(2)
#define LCD_D3_IN PCin(3)
#define LCD_D4_IN PCin(4)
#define LCD_D5_IN PCin(5)
#define LCD_D6_IN PCin(6)
#define LCD_D7_IN PCin(7)
7.调用
LCD_Init();LCD_Write_Cmd(0x01);for(i=0;i<4;i++){LCD_Write_Dat('1');delay_ms(1000);}
觉得ok,对你有帮助就留下你的小攒攒吧·······