|
這是基于單片機(jī)的定時(shí)鬧鐘設(shè)計(jì),用的是ATC89C52RC,文件包括了代碼。
單片機(jī)源程序如下:- #include <REGX52.H>
- #include "LCD1602.h"
- #include "DS1302.h"
- #include "Key.h"
- #include "Timer0.h"
- #include "Delay.h"
- #include "Buzzer.h"
- //#include "Clock.h"
- unsigned char Key_Get,MODE; //MODE用作鬧鐘開關(guān)
- unsigned char i,Tmp_Status,Tmp,Tmp_Set,Count,Tmp_Getin,Key_Set,Clk_Stop;
- unsigned char Clk_Flag=0; //默認(rèn)關(guān)閉鬧鐘 unused
- /**
- * @brief 顯示實(shí)時(shí)時(shí)間
- * @param 無
- * @retval 無
- */
- void TimeShow(void)
- {
- DS1302_ReadTime();//讀取時(shí)間
- LCD_ShowString(1,1,"RealTime: ");
- LCD_ShowNum(2,1,DS1302_Time[0],2);//顯示時(shí)
- LCD_ShowNum(2,4,DS1302_Time[1],2);//顯示分
- LCD_ShowNum(2,7,DS1302_Time[2],2);//顯示秒
-
- }
- /**
- * @brief 鬧鐘開啟,到達(dá)鬧鐘設(shè)置時(shí)間響鈴
- * @param 無
- * @retval 無
- */
- void Clock_Time_Open(void)
- {
- if(Clock_Time[0]==DS1302_Time[0] && Clock_Time[1]==DS1302_Time[1])
- {
-
- while(i!=1)
- {
- Buzzer_Timems(1000);
- Tmp_Status=1;
- }
- Tmp_Status=0;
- i=0;
- MODE=0;
- //此程序?yàn)椴皇褂猛獠恐袛嚓P(guān)閉鬧鐘
- /* while(i==0)
- {
- Buzzer_Timems(1000);
- // Tmp_Status=1;
- if(Buzzer_Key()==4)
- {
- Clk_Flag=0;
- i=4;
- }
- }
- // Tmp_Status=0;
- i=0;
- MODE=0;
- */
- }
-
-
- }
- /**
- * @brief 菜單設(shè)置 時(shí)鐘/鬧鐘的時(shí)、分設(shè)置;顯示鬧鐘時(shí)間;開啟關(guān)閉鬧鐘
- * @param 無
- * @retval 無
- */
- void Time_Set(unsigned char Tmp1)
- {
-
- if(Tmp1==1)
- {
- LCD_ShowString(1,1,"RT Setting: ");
- Tmp_Getin=Key();
- Key_Set=1;
- if(Tmp_Getin==1)
- {
- P2_2=!P2_2;
- Key_Set=1;
- DS1302_Time[0]++;//時(shí)間設(shè)置位數(shù)值加1
- if(DS1302_Time[0]>23){DS1302_Time[0]=0;}//時(shí)越界判斷
- }
- if(Tmp_Getin==2)
- {
- Key_Set=1;
- DS1302_Time[1]++;//時(shí)間設(shè)置位數(shù)值加1
- if(DS1302_Time[1]>59){DS1302_Time[1]=0;}//分越界判斷
- }
- if(Tmp_Getin==3)
- {
- DS1302_SetTime();
- TimeShow();
- Tmp=0;
- Key_Set=0;
- }
- //實(shí)時(shí)更新顯示
- LCD_ShowNum(2,1,DS1302_Time[0],2);
- LCD_ShowNum(2,4,DS1302_Time[1],2);
- LCD_ShowNum(2,7,DS1302_Time[2],2);//顯示秒
- }
- else if(Tmp1==3)
- {
- Key_Set=1;
- LCD_ShowString(1,1,"CLK Setting: ");
- Tmp_Getin=Key();
- if(Tmp_Getin==1)
- {
- Key_Set=1;
- Clock_Time[0]++;//時(shí)間設(shè)置位數(shù)值加1
- if(Clock_Time[0]>23){Clock_Time[0]=0;}//時(shí)越界判斷
- }
- if(Tmp_Getin==2)
- {
- Key_Set=1;
- Clock_Time[1]++;//時(shí)間設(shè)置位數(shù)值加1
- if(Clock_Time[1]>59){Clock_Time[1]=0;}//分越界判斷
- }
- if(Tmp_Getin==3)
- {
- DS1302_SetTime();
- LCD_ShowString(1,1,"CLK Setting Ok");
- Delay(1000);
- Tmp=0;
- Key_Set=0;
- }
- //實(shí)時(shí)更新顯示
- LCD_ShowNum(2,1,Clock_Time[0],2);
- LCD_ShowNum(2,4,Clock_Time[1],2);
- }
- else if(Tmp1==2)
- {
- Key_Set=1;
- LCD_ShowString(1,1,"CLK TIM: ");
- LCD_ShowNum(2,1,Clock_Time[0],2);
- LCD_ShowNum(2,4,Clock_Time[1],2);
- Tmp_Getin=Key();
- if(Tmp_Getin==2)
- {
- TimeShow();
- Tmp=0;
- Key_Set=0;
- }
- }
- else if(Tmp1==4)
- {
- Key_Set=1;
- //開關(guān)鬧鐘
- if(MODE==0) //ON
- {
- MODE=1;
- Clk_Flag=MODE;
- for(i=0;i<3;i++)
- {
- Delay(500);
- Buzzer_Times(250);
- }
- }
- else
- {
- MODE=0;
- Clk_Flag=MODE;
- Delay(1000);
- Buzzer_Times(500);
- }
- Tmp=0;
- Key_Set=0;
- }
- }
- /**
- * @brief 按鍵檢測(cè)
- * @param 無
- * @retval 無
- */
- void Key_Select(void)
- {
- Key_Get=Key();//讀取鍵碼
- if(Key_Get==1)
- Tmp=1;
- else if(Key_Get==2)
- Tmp=2;
- else if(Key_Get==3)
- Tmp=3;
- else if(Key_Get==4)
- Tmp=4;
- else
- Tmp=0;
- }
- void main()
- {
- //初始化操作
- LCD_Init();
- DS1302_Init();
- Timer0Init();
-
- LCD_ShowString(2,1," : ");
- //設(shè)置時(shí)間
- DS1302_SetTime();
-
- while(1)
- {
- //按鍵檢測(cè)
- Key_Select();
-
- //目的是進(jìn)入菜單設(shè)置后按鍵不沖突,比如按k1就卡在時(shí)鐘設(shè)置程序內(nèi)
- if(Key_Set==0)
- Tmp_Set=Tmp;
-
- //菜單頁(yè)
- if(Tmp_Set)
- {
- Time_Set(Tmp_Set);
- }
- else
- {
- TimeShow();
- }
-
- //開啟鬧鐘
- if(MODE==1)
- {
- Clock_Time_Open();
- }
- }
- }
- void Timer0_Routine() interrupt 1
- {
- static unsigned int Toggle;
- TL0 = 0x18; //設(shè)置定時(shí)初值
- TH0 = 0xFC; //設(shè)置定時(shí)初值
- Toggle++;
- if(Toggle>=1000) //每1秒P2_0閃爍一次
- {
- Toggle=0;
- P2_0=!P2_0;
- }
- }
- void INIT1() interrupt 2
- {
- //鬧鐘響鈴則程序?qū)mp_Status置1,由此使用KEY4觸發(fā)外部中斷1關(guān)閉鬧鐘
- if(Tmp_Status==1)
- {
- P2_3=!P2_3;
- i=1;
- }
-
- }
復(fù)制代碼
Keil代碼下載:
代碼.7z
(42.93 KB, 下載次數(shù): 5)
2023-6-10 00:25 上傳
點(diǎn)擊文件名下載附件
定時(shí)鬧鐘
|
|