LCD1602 初始化后的运行过程如下:

  1. 首先,设置 GPIOA 和 GPIOC 的时钟,并初始化 GPIOA 的 Pin0-Pin7 和 GPIOC 的 Pin13-Pin15 为输出模式,用于控制 LCD1602 的各个引脚。

  2. 接着,向 LCD1602 写入初始化命令,包括三次 0x38 命令,0x08 命令(关闭显示),0x01 命令(清屏),0x06 命令(光标自动右移),0x0C 命令(开启显示,不显示光标和闪烁)。

  3. 初始化完成后,可以调用 LCD_Write_String 和 LCD_Write_Char 等函数向 LCD1602 显示数据,也可以调用 LCD_Clear 函数清屏。

#include 'LCD1602.h' #include 'delay.h' #include 'sys.h'

u8 Dao_xu(u8 data) { u8 i = 0 ,temp = 0;;

for(i = 0; i < 8; i++)
{
    temp += (((data >> i) & 0x01) << (7 - i));
}
return temp;

}

/----------------------------------------------- 说明:LCD1602 作者:shifang 修改:无 功能:实现字符显示 备注:引脚定义如下:1-VSS 2-VDD 3-V0 4-RS 5-R/W 6-E 7-14 DB0-DB7 15-BLA 16- 背光控制 ------------------------------------------------/ void LCD_Check_Busy(void)

{ LCD1602_RS0; delay_us(1); LCD1602_RW1;
delay_us(1); LCD1602_EN0; delay_us(1); GPIO_Write(GPIOC,0Xff);
delay_ms(1); LCD1602_EN1;
delay_us(100); }

/------------------------------------------------ 写入指令函数 ------------------------------------------------/ void LCD_Write_Com(unsigned char com) {

LCD1602_RS0; delay_us(1); LCD1602_RW0; delay_us(1); LCD1602_EN1;
delay_us(1); GPIO_Write(GPIOA,(GPIO_ReadOutputData(GPIOA)&0XFF00)+Dao_xu(com));
delay_us(100); LCD1602_EN0; }

/------------------------------------------------ 写入数据函数 ------------------------------------------------/ void LCD_Write_Data(unsigned char Data) {

LCD1602_RS1;
delay_us(1); LCD1602_RW0; delay_us(1); LCD1602_EN1;
delay_us(1); GPIO_Write(GPIOA,(GPIO_ReadOutputData(GPIOA)&0XFF00)+Dao_xu(Data)); delay_us(100); LCD1602_EN0; } /------------------------------------------------ 写入字符串函数 ------------------------------------------------/ void LCD_Write_String(unsigned char x,unsigned char y,unsigned char *s) {

if (y == 0) { LCD_Write_Com(0x80 + x);
} else { LCD_Write_Com(0xC0 + x);
}

while (*s) {

LCD_Write_Data( s);
s ++;
} } /
------------------------------------------------ 写入字符函数 ------------------------------------------------*/ void LCD_Write_Char(unsigned char x,unsigned char y,unsigned char Data) {

if (y == 0) { LCD_Write_Com(0x80 + x);
}

else { LCD_Write_Com(0xC0 + x);
}

LCD_Write_Data( Data);
}

void LCD1602_write_long(unsigned char x,unsigned char y,u32 data,unsigned char num) { unsigned char temp[12],i = 12; while(i--) { temp[i] = ' '; } temp[num] = '\0'; while(num--) { if(data || data%10) temp[num] = data % 10 + 0x30; data = data/10; } LCD_Write_String(x,y,temp);
}

/------------------------------------------------ 清屏函数 ------------------------------------------------/ void LCD_Clear(void) { LCD_Write_Com(0x01); delay_ms(5); }

/------------------------------------------------/ void LCD_Init(void) { GPIO_InitTypeDef GPIO_InitStructure;

  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOC, ENABLE);  //使能GPIOA GPIOB GPIOC时钟
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 |GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3 |
GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //输出速度50MHZ
GPIO_Init(GPIOA, &GPIO_InitStructure); //初始化GPIOA


  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13 |GPIO_Pin_14|GPIO_Pin_15;  // LCD1602 RS-RW-EN?
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;   //推挽输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;   //输出速度50MHZ
GPIO_Init(GPIOC, &GPIO_InitStructure);   //GPIOC

LCD_Write_Com(0x38); delay_ms(5);
LCD_Write_Com(0x38); delay_ms(5);
LCD_Write_Com(0x38); delay_ms(5);
LCD_Write_Com(0x08); /关闭显示/ delay_ms(5); LCD_Write_Com(0x01); /清屏/ delay_ms(5); LCD_Write_Com(0x06); /光标自动右移设置/ delay_ms(5); LCD_Write_Com(0x0C); /开启显示,不显示光标和闪烁设置/ delay_ms(5); }

LCD1602 初始化过程详解及代码示例

原文地址: https://www.cveoy.top/t/topic/nRrQ 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录