×
单片机 > 单片机程序设计 > 详情

单片机+LCD1602显示℃ 这种自定义符号

发布时间:2021-08-23 发布时间:
|

#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

六、以上代码由《人人学会单片机》视频教程原创书写。其他地方引用请注明出处!



『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
51单片机中断源的扩展方法