欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標題:
lcd1602 時鐘,溫度 單片機源程序
[打印本頁]
作者:
嘿嘿呵呵
時間:
2019-6-8 10:00
標題:
lcd1602 時鐘,溫度 單片機源程序
單片機源程序如下:
#include "main.h"
#include "LCD1602.h"
#include "DS1302.h"
#include "DS18B20.h"
//定義變量
unsigned int Temp_Buffer = 0;
unsigned char KEY_NUM = 0;
bit Flag_KEY_Set = 0;
unsigned char KEY2_Count = 0;
//****************************************************
//主函數
//****************************************************
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值 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.Year >= 100)
{
DS1302Buffer.Year = 0;
}
DS1302_SetTime( DS1302_YEAR , DS1302Buffer.Year );
Display_RTCC();
LCD1602_write_com(0x80+ 3); //指針指向年,閃爍
break;
case 1:
DS1302Buffer.Month++;
if(DS1302Buffer.Month >= 13)
{
DS1302Buffer.Month = 1;
}
DS1302_SetTime( DS1302_MONTH , DS1302Buffer.Month );
Display_RTCC();
LCD1602_write_com(0x80+ 6); //指針指向月,閃爍
break;
case 2:
DS1302Buffer.Day++;
if(DS1302Buffer.Day >= 32)
{
DS1302Buffer.Day = 1;
}
DS1302_SetTime( DS1302_DAY , DS1302Buffer.Day );
Display_RTCC();
LCD1602_write_com(0x80+ 9); //指針指向日,閃爍
break;
case 3:
DS1302Buffer.Week++;
if(DS1302Buffer.Week >= 8)
{
DS1302Buffer.Week = 1;
}
DS1302_SetTime( DS1302_WEEK , DS1302Buffer.Week );
Display_RTCC();
LCD1602_write_com(0x80+ 15); //指針指向星期,閃爍
break;
case 4:
DS1302Buffer.Hour++;
if(DS1302Buffer.Hour >= 24)
{
DS1302Buffer.Hour = 0;
}
DS1302_SetTime( DS1302_HOUR , DS1302Buffer.Hour );
Display_RTCC();
LCD1602_write_com(0x80+ 0x40 + 1); //指針指向小時,閃爍
break;
case 5:
DS1302Buffer.Minute++;
if(DS1302Buffer.Minute >= 60)
{
DS1302Buffer.Minute = 0;
}
DS1302_SetTime( DS1302_MINUTE , DS1302Buffer.Minute );
Display_RTCC();
LCD1602_write_com(0x80+ 0x40 + 4); //指針指向分鐘,閃爍
break;
case 6:
DS1302Buffer.Second++;
if(DS1302Buffer.Second >= 60)
{
DS1302Buffer.Second = 0;
}
DS1302_SetTime( DS1302_SECOND , DS1302Buffer.Second);
Display_RTCC();
LCD1602_write_com(0x80+ 0x40 + 7); //指針指向秒鐘,閃爍
break;
default : break;
}
}
break;
case 4: //按鍵4執行程序
KEY_NUM = 0; //清空按鍵標志
if(Flag_KEY_Set) //在設置狀態時運行
{
switch(KEY2_Count)
{
case 0:
DS1302Buffer.Year--;
if(DS1302Buffer.Year == 255)
{
DS1302Buffer.Year = 99;
}
DS1302_SetTime( DS1302_YEAR , DS1302Buffer.Year );
Display_RTCC();
LCD1602_write_com(0x80+ 3); //指針指向年,閃爍
break;
case 1:
DS1302Buffer.Month--;
if(DS1302Buffer.Month == 0)
{
DS1302Buffer.Month = 12;
}
DS1302_SetTime( DS1302_MONTH , DS1302Buffer.Month );
Display_RTCC();
LCD1602_write_com(0x80+ 6); //指針指向月,閃爍
break;
case 2:
DS1302Buffer.Day--;
if(DS1302Buffer.Day == 0)
{
DS1302Buffer.Day = 31;
}
DS1302_SetTime( DS1302_DAY , DS1302Buffer.Day );
Display_RTCC();
LCD1602_write_com(0x80+ 9); //指針指向日,閃爍
break;
case 3:
DS1302Buffer.Week--;
if(DS1302Buffer.Week == 0)
{
DS1302Buffer.Week = 7;
}
DS1302_SetTime( DS1302_WEEK , DS1302Buffer.Week );
Display_RTCC();
LCD1602_write_com(0x80+ 15); //指針指向星期,閃爍
break;
case 4:
DS1302Buffer.Hour--;
if(DS1302Buffer.Hour == 255)
{
DS1302Buffer.Hour = 23;
}
DS1302_SetTime( DS1302_HOUR , DS1302Buffer.Hour );
Display_RTCC();
LCD1602_write_com(0x80+ 0x40 + 1); //指針指向小時,閃爍
break;
case 5:
DS1302Buffer.Minute--;
if(DS1302Buffer.Minute == 255)
{
DS1302Buffer.Minute = 59;
}
DS1302_SetTime( DS1302_MINUTE , DS1302Buffer.Minute );
Display_RTCC();
LCD1602_write_com(0x80+ 0x40 + 4); //指針指向分鐘,閃爍
break;
case 6:
DS1302Buffer.Second--;
if(DS1302Buffer.Second == 255)
{
DS1302Buffer.Second = 59;
}
DS1302_SetTime( DS1302_SECOND , DS1302Buffer.Second);
Display_RTCC();
LCD1602_write_com(0x80+ 0x40 + 7); //指針指向秒鐘,閃爍
break;
default : break;
}
}
break;
default : break;
}
}
}
//****************************************************
//顯示溫度
//****************************************************
void Display_Temp()
{
Temp_Buffer = Get_temp(); //讀取DS18B20的值
LCD1602_write_com(0x80+0x40+10); //設置LCD1602指針到第二行第11列
if(flag_temper == 1) //根據溫度標志位顯示溫度正負
{
LCD1602_write_data('-');
}
if( Temp_Buffer/1000 != 0 ) //如果第一位為0,忽略顯示
{
LCD1602_write_data(Temp_Buffer/1000+0X30); //顯示溫度百位值
}
LCD1602_write_data(Temp_Buffer%1000/100+0X30); //顯示溫度十位值
LCD1602_write_data(Temp_Buffer%100/10+0X30); //顯示溫度個位值
LCD1602_write_data('.'); //顯示小數點
LCD1602_write_data(Temp_Buffer%10+0X30); //顯示溫度十分位值
LCD1602_write_data('C'); //顯示字符C
}
//****************************************************
//顯示實時時鐘
//****************************************************
void Display_RTCC()
{
LCD1602_write_com(0x80); //指針設置到第一行第1列
LCD1602_write_word("20");
LCD1602_write_data(DS1302Buffer.Year/10 + 0x30); //顯示Year高位
LCD1602_write_data(DS1302Buffer.Year%10 + 0x30); //顯示Year低位
LCD1602_write_data('-');
LCD1602_write_data(DS1302Buffer.Month/10 + 0x30); //顯示Month高位
LCD1602_write_data(DS1302Buffer.Month%10 + 0x30); //顯示Month低位
LCD1602_write_data('-');
LCD1602_write_data(DS1302Buffer.Day/10 + 0x30); //顯示Day高位
LCD1602_write_data(DS1302Buffer.Day%10 + 0x30); //顯示Day低位
LCD1602_write_com(0x80+13); //指針設置到第一行第14列
switch(DS1302Buffer.Week)
{
case 1:
LCD1602_write_word("Mon"); //顯示星期一
break;
case 2:
LCD1602_write_word("Tue"); //顯示星期二
break;
case 3:
LCD1602_write_word("Wed"); //顯示星期三
break;
case 4:
LCD1602_write_word("Thu"); //顯示星期四
break;
case 5:
LCD1602_write_word("Fri"); //顯示星期五
break;
case 6:
LCD1602_write_word("Sat"); //顯示星期六
break;
case 7:
LCD1602_write_word("Sun"); //顯示星期日
break;
default : break;
}
LCD1602_write_com(0x80 + 0x40); //指針設置到第二行第1列
LCD1602_write_data(DS1302Buffer.Hour/10 + 0x30); //顯示Hour高位
LCD1602_write_data(DS1302Buffer.Hour%10 + 0x30); //顯示Hour低位
LCD1602_write_data(':');
LCD1602_write_data(DS1302Buffer.Minute/10 + 0x30); //顯示Minute高位
LCD1602_write_data(DS1302Buffer.Minute%10 + 0x30); //顯示Minute低位
LCD1602_write_data(':');
LCD1602_write_data(DS1302Buffer.Second/10 + 0x30); //顯示Second高位
LCD1602_write_data(DS1302Buffer.Second%10 + 0x30); //顯示Second低位
}
//****************************************************
//蜂鳴器程序
//****************************************************
void Buzzer_Di()
{
Buzzer = 0;
Delay_ms(3);
Buzzer = 1;
Delay_ms(3);
}
//****************************************************
//按鍵掃描程序
//****************************************************
void Scan_Key()
{
if( KEY1 == 0 ) //按鍵1掃描
{
Delay_ms(10); //延時去抖
if( KEY1 == 0 )
{
Buzzer_Di();
while(KEY1 == 0); //等待松手
KEY_NUM = 1;
}
}
if( KEY2 == 0 ) //按鍵2掃描
{
Delay_ms(10); //延時去抖
if( KEY2 == 0 )
{
Buzzer_Di();
while(KEY2 == 0); //等待松手
KEY_NUM = 2;
}
}
if( KEY3 == 0 ) //按鍵2掃描
{
Delay_ms(10); //延時去抖
if( KEY3 == 0 )
{
Buzzer_Di();
while(KEY3 == 0); //等待松手
KEY_NUM = 3;
}
}
if( KEY4 == 0 ) //按鍵2掃描
{
Delay_ms(10); //延時去抖
if( KEY4 == 0 )
{
Buzzer_Di();
while(KEY4 == 0); //等待松手
KEY_NUM = 4;
}
}
}
//****************************************************
//MS延時函數(12M晶振下測試)
//****************************************************
void Delay_ms(unsigned int n)
{
unsigned int i,j;
for(i=0;i<n;i++)
for(j=0;j<123;j++);
}
復制代碼
所有資料51hei提供下載:
3.LCD1602時鐘+溫度.zip
(74.41 KB, 下載次數: 15)
2019-6-8 09:59 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
作者:
qysj22
時間:
2019-6-22 21:49
已收藏
歡迎光臨 (http://m.raoushi.com/bbs/)
Powered by Discuz! X3.1