本帖最后由 人人学会单片机 于 2020-12-30 11:29 编辑
- #include "all.h"
- u8 xdata LCD1602_Write_Buffer1[16];
- u8 xdata LCD1602_Write_Buffer2[16];
- u8 code LCD1602_5x8[8]={0x08,0x00,0x07,0x08,0x08,0x08,0x08,0x07};
- u8 xdata LCD1602_Write_Cursor_Add;
- void LCD1602_Delay(u8 len)
- {
- u8 idata i;
- while(len--)
- {
- i=15;
- while(i--);
- }
- }
- void LCD1602_Write_Add(u8 Add) //写地址命令
- {
- LCD1602_RS=0;
- LCD1602_E=0;
- LCD1602_Delay(10);
- LCD1602_E=1;
- HC595_Write_Buffer[0]=Add;
- HC595_Write_Buffer[1]=0;
- HC595_Write_Data_Drive();
- LCD1602_E=0;
- }
- void LCD1602_Write_Dat(u8 Dat) //写内容
- {
- LCD1602_RS=1;
- LCD1602_E=0;
- LCD1602_Delay(10);
- LCD1602_E=1;
- HC595_Write_Buffer[0]=Dat;
- HC595_Write_Buffer[1]=0;
- HC595_Write_Data_Drive();
- LCD1602_E=0;
- }
- void LCD1602_Init()
- {
- u8 i;
- P4M0&=0x9f;
- P4M1&=0x9f;//P4.6 P4.5 准双向口模式
- LCD1602_Write_Add(0x38);
- LCD1602_Delay(250);
- LCD1602_Write_Add(0x01);
- LCD1602_Delay(250);
- LCD1602_Write_Add(0x02);
- LCD1602_Delay(250);
- LCD1602_Write_Add(0x06);
- LCD1602_Delay(250);
- LCD1602_Write_Add(0x0C);
- LCD1602_Delay(250);
- LCD1602_Write_Add(0x14);
- LCD1602_Delay(250);
- LCD1602_Write_Add(0x40);//自定义存储空间起始地址
- for(i=0;i<8;i++)
- {
- LCD1602_Write_Dat(LCD1602_5x8[i]);
- }
- }
- void LCD1602_Display_Ser()
- {
- u8 i;
- LCD1602_Write_Add(0x80);
- for(i=0;i<16;i++)
- {
- LCD1602_Write_Dat(LCD1602_Write_Buffer1[i]);
- }
- LCD1602_Write_Add(0xC0);
- for(i=0;i<16;i++)
- {
- LCD1602_Write_Dat(LCD1602_Write_Buffer2[i]);
- }
- switch(LCD1602_Write_Cursor_Add)
- {
- case 0:LCD1602_Write_Add(0x0C);break;//不显示也不闪烁光标
- case 1:LCD1602_Write_Add(0x0F);LCD1602_Write_Add(0xCa);break;
- case 2:LCD1602_Write_Add(0x0F);LCD1602_Write_Add(0xCd);break;
- case 3:LCD1602_Write_Add(0x0F);LCD1602_Write_Add(0xC7);break;
- case 4:LCD1602_Write_Add(0x0F);LCD1602_Write_Add(0xC4);break;
- case 5:LCD1602_Write_Add(0x0F);LCD1602_Write_Add(0xC1);break;
- case 6:LCD1602_Write_Add(0x0F);LCD1602_Write_Add(0xCf);break;
- case 7:LCD1602_Write_Add(0x0F);LCD1602_Write_Add(0x89);break;
- case 8:LCD1602_Write_Add(0x0F);LCD1602_Write_Add(0x86);break;
- case 9:LCD1602_Write_Add(0x0F);LCD1602_Write_Add(0x83);break;
- }
- }
复制代码
一、以上代码,主函数大循环前面初始化P4IO口为准双向口
二、主函数大循环前面需要初始化LCD1602_Init();
三、我们是使用595转换给LCD的D0~D7。你们可以直接用P2口赋值给LCD。
四、主函数每500ms 调用LCD1602_Display_Ser()函数。实现数据每半秒刷新一次即可。省掉读忙的过程。
五、两个LCD1602_Write_Buffer[];数组,分别是上下两行的显存。其他地方有需要,就往里面丢ASCII值就可以了。比如0x30+5.液晶显示数字5
六、以上代码由《人人学会单片机》视频教程原创书写。其他地方引用请注明出处!
15 03 18 02 ASCII与GB2312汉字码表.zip
(6.89 MB, 下载次数: 14)
|