LCD1602显示屏+DS18B20测温C51单片机驱动源码KEIL工程文件,可作为你的学习设计参考。
void main()
{
LCD1602_Init(); //初始化LCD1602
DS1302_Init(); //初始化DS1302
LCD1602_write_com(0x80);
LCD1602_write_word("Welcome to use!");
Temp_Buffer = Get_temp(); //读取DS18B20的值
Delay_ms(1000);
LCD1602_write_com(0x01); //清屏
while(1)
{
DS1302_GetTime(&DS1302Buffer); //获取当前RTCC值
if(Flag_Time_Refresh == 1 && Flag_KEY_Set == 0) //数据更新时才刷新LCD
{
Flag_Time_Refresh = 0;
Display_RTCC(); //显示实时时钟
Display_Temp(); //获取并显示温度值
}
Scan_Key(); //按键扫描
switch( KEY_NUM )
{
case 1: //按键1执行程序
KEY_NUM = 0; //清空按键标志
Flag_KEY_Set = ~Flag_KEY_Set; //设置按键标志位翻转
if(Flag_KEY_Set)
{
LCD1602_write_com(0x0d); //LCD1602指针闪烁开
LCD1602_write_com(0x80+ 3); //指针设置到第一行第4列
KEY2_Count = 0; //按键S2计数清零
}
else
{
LCD1602_write_com(0x0c); //LCD1602指针闪烁关
}
break;
case 2: //按键2执行程序
KEY_NUM = 0; //清空按键标志
if(Flag_KEY_Set) //在设置状态时运行
{
KEY2_Count++;
if(KEY2_Count == 7)
KEY2_Count = 0;
switch(KEY2_Count)
{
case 0:
LCD1602_write_com(0x80+ 3); //指针指向年,闪烁
break;
case 1:
LCD1602_write_com(0x80+ 6); //指针指向月,闪烁
break;
case 2:
LCD1602_write_com(0x80+ 9); //指针指向日,闪烁
break;
case 3:
LCD1602_write_com(0x80+ 15); //指针指向星期,闪烁
break;
case 4:
LCD1602_write_com(0x80+ 0x40 + 1); //指针指向小时,闪烁
break;
case 5:
LCD1602_write_com(0x80+ 0x40 + 4); //指针指向分钟,闪烁
break;
case 6:
LCD1602_write_com(0x80+ 0x40 + 7); //指针指向秒钟,闪烁
break;
default : break;
}
}
break;
case 3: //按键3执行程序
KEY_NUM = 0; //清空按键标志
if(Flag_KEY_Set) //在设置状态时运行
{
switch(KEY2_Count)
{
case 0:
DS1302Buffer.Year++;
if(DS1302Buffer.