




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、#include<reg52.h> #define uint unsigned int #define uchar unsigned char Uint i,miao,fen,fen1,fen2,fen3,fen4,shi,shi1,shi2,shi3,shi4,flag1,flag2,flag3,flag4,flag5,aa,K1num,K2num,K3num,K4num,N; /K1num-K1按鍵被按下的標記變量,K2num-K2按鍵被按下的標
2、記變量,K3num=0-K3按鍵被按下的標記變量 uchar code table=" H.I.T CHINA "/定義初始上電時液晶默認顯示狀態(tài) uchar code table2=" TIME " uchar code Alarm_0=" GBDS " uc
3、har code Alarm_1=" SKDS " uchar code Alarm_2=" XKDS " uchar code Alarm_3=" DKDS " uchar code Alarm_00="
4、;GB " uchar code Alarm_11=" SK " uchar code Alarm_22=" XK " uchar code Alarm_33=" DK
5、60;" uchar code deng=" LIGHTING " sbit K1=P10; /四個按鍵 sbit K2=P11; sbit K3=P12; sbit K4=P13; sbit rs=P20; sbit rw=P21; /燈光控制端 sbit lc
6、den=P22; sbit LED2=P23; /廣播控制端 sbit led=P24; /發(fā)光二極管控制端 sbit beep=P25; /蜂鳴器控制端 void delay(uint z) /延時函數(shù) uint x,y; for(x=z;x>0;x-) for(y=110;y>0;y-) void write_com(uchar
7、160;com)/液晶寫命令函數(shù) rs=0; rw=0; lcden=0; P3=com; delay(5); lcden=1; delay(5); lcden=0; void write_date(uchar date)/液晶寫數(shù)據(jù)函數(shù) rs=1; rw=0; lcden=0; P3=date; delay(5); lcden=1; delay(5); lcden=0;
8、 void write_sfm(uchar add,uchar date) /液晶寫時分秒函數(shù) uchar shi,ge; shi=date/10; ge=date%10; write_com(0x80+0x40+add); write_date(0x30+shi); write_date(0x30+ge); void init() /初始化函數(shù) uint num; /寫液晶的循環(huán)控制變量 aa
9、=0; /中斷次數(shù)標志 K1num=0; /K1按鍵被按下的標記變量 K2num=0; /K2按鍵被按下的標記變量 K3num=0; /K3按鍵被按下的標記變量 K4num=0; /K4按鍵被按下的標記變量 flag1=1; /控制lcd屏刷新的變量 flag2=1;/控制鬧鐘響鬧開啟關(guān)閉的標記 flag3=1;/控制鬧鐘響起時,按下K4停止鬧鐘響鬧的標記 flag4=1;/進入鬧鐘設(shè)置時的標記變量 flag5
10、=1;/進入時間設(shè)置時的標記變量 led=1; /發(fā)光二極管初始化 LED2=0; /廣播初始化 rw=0; N=100; /系統(tǒng)啟動時,鬧鐘時間到發(fā)出的聲音為連續(xù)三次發(fā)出“嘩”的一聲 miao=0; /系統(tǒng)初始化時間 fen=0; 19 shi=7; fen1=6; /初始化鬧鐘的時間 shi1=7; f
11、en2=8; /初始化鬧鐘的時間 shi2=7; fen3=10; /初始化鬧鐘的時間 shi3=7; fen4=12; /初始化鬧鐘的時間 shi4=7; beep=0; /蜂鳴器初始化 lcden=0; /液晶使能端初始化 write_com(0x38); /1602液晶初始化,設(shè)置16*2顯示。5*7點陣,8位數(shù)據(jù)接口 write_com(0x0c);/設(shè)置開顯示,不顯示光 writ
12、e_com(0x06); /寫一個字符后地址指針自動加1 write_com(0x01);/顯示清0數(shù)據(jù)指針清0 write_com(0x80); /將數(shù)據(jù)指針定位到第一行,第一個字處 for(num=0;num<15;num+) /顯示鬧鐘標示: H.I.T CHINA write_date(tablenum);delay(10); write_com(0x80+0x40+11);/寫出時間顯示部分的兩個冒號
13、0;write_date(':'); write_com(0x80+0x40+14); write_date(' '); write_com(0x80+0x40+15); write_date(' '); write_sfm(12,fen); /送去液晶顯示秒分時 write_sfm(9,shi); TMOD=0x01; /設(shè)置定時器0為工作方式1 TH0=(65536-50000)/256;/定時器裝初值 TL0=(
14、65536-50000)%256; EA=1; /開總中斷 ET0=1; /開定時器0中斷 TR0=1; void xianshi() /系統(tǒng)時間顯示 write_com(0x80+0x40); for(i=0;i<9;i+) write_date(table2i); write_com(0x80+0x40+11);/寫出時間顯示部分的兩個冒號 write_date(':'); write_com(0x80+0
15、x40+14); write_date(' '); write_com(0x80+0x40+15); write_date(' '); write_sfm(12,fen); /送去液晶顯示秒分時 write_sfm(9,shi); void time() /更改系統(tǒng)時間 if( (K1num=0)&&(flag3=1) ) write_com(0x80+0x40)
16、; for(i=0;i<9;i+) write_date(table2i); if(K1=0)/判斷K1按下,則開始修改時間 delay(5); flag5=1; if(K1=0&&K1num=0) K1num=1; while(!K1) /判斷是否松開按鍵,后同 if(K1num=1) TR0=0; /關(guān)閉計數(shù)器0 write_com(
17、0x0f); /光標開始閃爍 write_com(0x80+0x40+13); if(K1=0&&K1num=1) /判斷K1按下,修改系統(tǒng)時間的小時 delay(5); if(K1=0) write_com(0x80+0x40+10); /光標定位到小時位置 K1num=1; /置K1num=1 while(!K1); shi+; /則調(diào)整時加1 if(shi=24)
18、shi=0; /若滿24后將清零 write_sfm(9,shi); /每調(diào)節(jié)一次送液晶顯示 write_com(0x80+0x40+10); if(K2=0&&K1num=1) /判K2按下,修改系統(tǒng)時間的分鐘 delay(5); if(K2=0) write_com(0x80+0x40+13); /光標定位到分鐘位置 K1num=1; while(!K2); fen+;
19、60;/則調(diào)整分加1 if(fen=60) fen=0;/若滿60后將清零 write_sfm(12,fen); /每調(diào)節(jié)一次送液晶顯示 write_com(0x80+0x40+13); if(K1num=1) /當設(shè)置時間或鬧鐘時,K3被按下設(shè)置完成。 if(K3=0) /判斷K3按下 delay(5); if(K3=0) flag5=0; K1num=0; while(!K3); w
20、rite_com(0x0c); /取消光標閃 TR0=1; /啟動定時器使時鐘開始走 flag1=1;/flag=1.則修改系統(tǒng)時間時液晶顯示的系統(tǒng)時間值,flag=0,則為修改鬧鐘時間時,屏幕顯示的是修改鬧鐘時間的值 flag1=1; write_com(0x80+0x40+11); write_date(':'); write_com(0x80+0x40+14); write_date(' '); wr
21、ite_com(0x80+0x40+15); write_date(' '); void guangbo() /廣播定時 if(K3num=0) write_com(0x80+0x40); for(i=0;i<9;i+) write_date(Alarm_00i); if(K3=0&&K3num=0) /判斷K3首次被按下,則設(shè)置鬧鐘 delay(5); /延時消抖,后
22、同 if(K3=0) flag1=0; write_com(0x80+0x40+13); /第一次按下光標定位到分鐘位置 while(!K3); K3num=1; write_com(0x80+0x40); for(i=0;i<9;i+) write_date(Alarm_0i); write_sfm(12,fen1); /送去液晶顯示定時的分,時 write_sfm(9,shi1); write_com(0x0f); /光標
23、開始閃爍 write_com(0x80+0x40+13); /顯示位置回到調(diào)節(jié)處 if(K2=0&&K3num=0) /K2被按下時顯示定時時間 delay(5); if(K2=0) write_sfm(12,fen1); /送去液晶顯示定時的分,時 write_sfm(9,shi1); while(!K2); write_sfm(12,fen);
24、160;/K2松開顯示當前時間 write_sfm(9,shi); if(K1=0&&K3num=1) /修改小時,判斷K1鍵按下,K3num=1,表示K3按鍵按下,則此時修改的是鬧鐘時間的小時 delay(5); if(K1=0) write_com(0x80+0x40+10); /光標定位到小時位置 K3num=1; while(!K1); shi1+; /則調(diào)整定時的時加1 if(shi2=24)
25、;/若滿24后將清零 shi1=0; write_sfm(9,shi1); /每調(diào)節(jié)一次送液晶顯示 write_com(0x80+0x40+10); /顯示位置重新回到調(diào)節(jié)處 if(K2=0&&K3num=1)/按鍵2按下,修改鬧鐘時間的分鐘 delay(5); if(K2=0) write_com(0x80+0x40+13); /光標定位到分鐘位置 K3num=1; while(!K2)
26、; fen1+; /則調(diào)整分加1 if(fen1=60) /若滿60后將清零 fen1=0; write_sfm(12,fen1);/每調(diào)節(jié)一次送液晶顯示 write_com(0x80+0x40+13); /顯示位置重新回到調(diào)節(jié)處 if(K3num=1) /當設(shè)置鬧鐘時,K3被按下設(shè)置完成。 if(K3=0) /判斷K3按下 delay(5); if(K3=0)
27、K1num=0; K3num=0; while(!K3); write_com(0x0c); /光標停止閃爍 flag1=1; /flag=1.則修改系統(tǒng)時間時液晶顯示的系統(tǒng)時間值,flag=0,則為修改鬧鐘時間時,屏幕顯示的是修改鬧鐘時間的值 write_sfm(12,fen);/送去液晶顯示分,時 write_sfm(9,shi); write_com(0x80+0x40+11); write_date(':'); write_c
28、om(0x80+0x40+14); write_date(' '); write_com(0x80+0x40+15); write_date(' '); void shangke() /上課定時 if( K3num=0) write_com(0x80+0x40); for(i=0;i<9;i+) write_date(Alarm_11i);
29、60; if(K3=0&&K3num=0) /判斷K3首次被按下,則設(shè)置鬧鐘 delay(5); /延時消抖,后同 if(K3=0) flag1=0; write_com(0x80+0x40+13); /第一次按下光標定位到分鐘位置 while(!K3); K3num=1; write_com(0x80+0x40); for(i=0;i<9;i+) write_date(Alarm_1
30、i); write_sfm(12,fen2); /送去液晶顯示定時的分,時 write_sfm(9,shi2); write_com(0x0f); /光標開始閃爍 write_com(0x80+0x40+13); /顯示位置回到調(diào)節(jié)處 if(K2=0&&K3num=0) /K2被按下時顯示定時時間 delay(5); if(K2=0) write_sfm
31、(12,fen2); /送去液晶顯示定時的分,時 write_sfm(9,shi2); while(!K2); write_sfm(12,fen); /K2松開顯示當前時間 write_sfm(9,shi); if(K1=0&&K3num=1) /修改小時,判斷K1鍵按下,K3num=1,表示K3按鍵按下,則此時修改的是鬧鐘時間的小時 delay(5); if(K1=0) write_com(0x8
32、0+0x40+10); /光標定位到小時位置 K3num=1; while(!K1); shi2+; /則調(diào)整定時的時加1 if(shi2=24) /若滿24后將清零 shi1=0; write_sfm(9,shi2); /每調(diào)節(jié)一次送液晶顯示 write_com(0x80+0x40+10); /顯示位置重新回到調(diào)節(jié)處 if(K2=0&&K3num=1) /按鍵2按下,修改鬧鐘時間
33、的分鐘 delay(5); if(K2=0) write_com(0x80+0x40+13); /光標定位到分鐘位置 K3num=1; while(!K2); fen2+; /則調(diào)整分加1 if(fen1=60) /若滿60后將清零 fen1=0; write_sfm(12,fen2); /每調(diào)節(jié)一次送液晶顯示一下 write_com(0x80+0x40+13); /顯示位置重新回到調(diào)節(jié)處
34、; if(K3num=1) /當設(shè)置時間或鬧鐘時,K3被按下設(shè)置完成。 if(K3=0) /判斷K3按下 delay(5); if(K3=0) K1num=0; K3num=0; while(!K3); write_com(0x0c); /光標停止閃爍 flag1=1; /flag=1.則修改系統(tǒng)時間時液晶顯示的系統(tǒng)時間值,flag=0,則為修改鬧鐘時間時,屏幕顯示的是修
35、改鬧鐘時間的值 write_sfm(12,fen);/送去液晶顯示分,時 write_sfm(9,shi); write_com(0x80+0x40+11); write_date(':'); write_com(0x80+0x40+14); write_date(' '); write_com(0x80+0x40+15); write_date(' '); void xiake(
36、) /下課定時 if( K3num=0) write_com(0x80+0x40); for(i=0;i<9;i+) write_date(Alarm_22i); if(K3=0&&K3num=0) /判斷K3首次被按下,則設(shè)置鬧鐘 delay(5); /延時消抖,后同 if(K3=0) flag1=0; write_com(
37、0x80+0x40+13); /第一次按下光標定位到分鐘位置 while(!K3); K3num=1; write_com(0x80+0x40); for(i=0;i<9;i+) write_date(Alarm_2i); write_sfm(12,fen3); /送去液晶顯示定時的分,時 write_sfm(9,shi3); write_com(0x0f); /光標開始閃爍 write_com(0x80+0x40+13); /顯示位置回到調(diào)節(jié)處 &
38、#160;if(K2=0&&K3num=0) /K2被按下時顯示定時時間 delay(5); if(K2=0) write_sfm(12,fen3); /送去液晶顯示定時的分,時 write_sfm(9,shi3); while(!K2); write_sfm(12,fen); /K2松開顯示當前時間 write_sfm(9,shi); if(K1=0&&K3num=1) /修改小時,判斷K1鍵按
39、下,K3num=1,表示K3按鍵按下,則此時修改的是鬧鐘時間的小時 delay(5); if(K1=0) write_com(0x80+0x40+10); /光標定位到小時位置 K3num=1; while(!K1); shi3+; /則調(diào)整定時的時加1 if(shi3=24) /若滿24后將清零 shi1=0; write_sfm(9,shi3); /每調(diào)節(jié)一次送液晶顯示 write_com(0x80+0x
40、40+10); /顯示位置重新回到調(diào)節(jié)處 if(K2=0&&K3num=1) /卸螷2按下,修改鬧鐘時間的分鐘 delay(5); if(K2=0) write_com(0x80+0x40+13); /光標定位到分鐘位置 K3num=1; while(!K2); fen3+; /則調(diào)整分加1 if(fen1=60) /若滿60后將清零 fen1=0;
41、0;write_sfm(12,fen3);/每調(diào)節(jié)一次送液晶顯示 write_com(0x80+0x40+13); if(K3num=1) /當設(shè)置時間或鬧鐘時,K3被按下設(shè)置完成。 if(K3=0) /判斷K3按下 delay(5); if(K3=0) K1num=0; K3num=0; while(!K3); write_com(0x0c); /光標停止閃爍
42、0; flag1=1; write_sfm(12,fen);/送去液晶顯示分,時 write_sfm(9,shi); write_com(0x80+0x40+11); write_date(':'); write_com(0x80+0x40+14); write_date(' '); write_com(0x80+0x40+15); write_date(' '); void dengkong()
43、; /燈光控制 if(K3num=0) write_com(0x80+0x40); for(i=0;i<9;i+) write_date(Alarm_33i); if(K3=0&&K3num=0) /判斷K3首次被按下,則設(shè)置鬧鐘 delay(5); /延時消抖,后同 if(K3=0) flag1=0; write_com(0x80+0x40+13); /第一次按下光標定位到分鐘位置&
44、#160;while(!K3); K3num=1; write_com(0x80+0x40); for(i=0;i<9;i+) write_date(Alarm_3i); write_sfm(12,fen4); /送去液晶顯示定時的分,時 write_sfm(9,shi4); write_com(0x0f); /光標開始閃爍 write_com(0x80+0x40+13); /顯示位置回到調(diào)節(jié)處 if(K2=0&&K3
45、num=0) /K2被按下時顯示定時時間 delay(5); if(K2=0) write_sfm(12,fen4); /送去液晶顯示定時的分,時 write_sfm(9,shi4); while(!K2); write_sfm(12,fen); /K2松開顯示當前時間 write_sfm(9,shi); if(K1=0&&K3num=1) /修改小時,判斷K1鍵按下,K3num=1,表示K3按鍵按下,則此時修改
46、的是鬧鐘時間的小時 delay(5); if(K1=0) write_com(0x80+0x40+10); /光標定位到小時位置 K3num=1; while(!K1); shi4+; /則調(diào)整定時的時加1 if(shi4=24) /若滿24后將清零 shi1=0; write_sfm(9,shi4); /每調(diào)節(jié)一次送液晶顯示一下 write_com(0x80+0x40+10); /顯示位置重新回到調(diào)節(jié)處
47、60;if(K2=0&&K3num=1) /按鍵2按下,修改鬧鐘時間的分鐘 delay(5); if(K2=0) write_com(0x80+0x40+13); /光標定位到分鐘位置 K3num=1; while(!K2); fen4+; /則調(diào)整分加1 if(fen1=60) /若滿60后將清零 fen1=0; write_sfm(12,fen4); /每調(diào)節(jié)一次送液晶顯示一下
48、 write_com(0x80+0x40+13); /顯示位置重新回到調(diào)節(jié)處 if(K3num=1) /當設(shè)置時間或鬧鐘時,K3被按下設(shè)置完成。 if(K3=0) /判斷K3按下 delay(5); if(K3=0) K1num=0; K3num=0; while(!K3); write_com(0x0c); /光標停止閃爍 flag1=1;/flag=1. write_s
49、fm(12,fen);/送去液晶顯示分,時 write_sfm(9,shi); write_com(0x80+0x40+11); write_date(':'); write_com(0x80+0x40+14); write_date(' '); write_com(0x80+0x40+15); write_date(' '); void clock()/任意鬧鐘時間到鬧鐘響 if(fen=fen1)&&am
50、p;(shi=shi1)|(fen=fen2)&&(shi=shi2)|(fen=fen3)&&(shi=shi3)|(fen=fen4)&&(shi=shi4)&&(flag2=1) /鬧鐘的響鬧控制 beep=1; /此時鬧鐘響起,連續(xù)三次發(fā)出嘩的一聲 flag5=0; flag3=0; /置flag3=0,表示此時鬧鐘響起,按下K4鍵執(zhí)行停止鬧鐘響鬧語句 delay(100); /這些語句是為了使鬧鐘響起時,發(fā)出連續(xù)三次嘩的聲音
51、60;beep=0; delay(100); beep=1; delay(100); beep=0; delay(100); beep=1; delay(100); beep=0; delay(300); else beep=0; if(fen!=fen1)&&(fen!=fen2)&&(fen!=fen3)&&(fen!=fen4)&&(flag4=0)&&(flag5=
52、0) )/顯示時間 xianshi(); if(fen=fen1)&&(shi=shi1)&&(flag2=1) LED2=1; write_com(0x80+0x40); for(i=0;i<9;i+) write_date(Alarm_00i); write_sfm(12,fen1); /送去液晶顯示定時的分,時
53、;write_sfm(9,shi1); else LED2=0; if(fen=fen1)&&(shi=shi1)&&(flag2=0)|(fen-1=fen1)&&(shi=shi1)&&(flag4=0) ) xianshi(); if(fen=fen2)&&(shi=shi2)&&(flag2=1) write_com(0x80+0x40); for(i=0;i<
54、;9;i+) write_date(Alarm_11i); write_sfm(12,fen2); /送去液晶顯示定時的分,時 write_sfm(9,shi2); if(fen=fen2)&&(shi=shi2)&&(flag2=0)|(fen-1=fen2)&&(shi=shi2)&&(flag4=0) ) xianshi(); if(fen=fen3)&&(shi=shi3)&&
55、(flag2=1) write_com(0x80+0x40); for(i=0;i<9;i+) write_date(Alarm_22i); write_sfm(12,fen3); /送去液晶顯示定時的分,時 write_sfm(9,shi3); if(fen=fen3)&&(shi=shi3)&&(flag2=0)|(fen-1=fen3)&&(shi=shi3)&&(flag4=0) xianshi(); if(fen=fen4)&&(shi=shi4)&&(flag2=1) write_com(0x80+0x40); for(i=0;i<15;i+) write_dat
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 進口美國大豆協(xié)議書
- 餐飲廢品處理協(xié)議書
- 門診輸液帶藥協(xié)議書
- 資產(chǎn)收購終止協(xié)議書
- 防火治安責任協(xié)議書
- 輕微事故理賠協(xié)議書
- 露營基地合同協(xié)議書
- 創(chuàng)世紀教育合作協(xié)議書
- 劇組住酒店合同協(xié)議書
- 門面出租押金協(xié)議書
- 《多樣的中國民間美術(shù)》課件 2024-2025學年人美版(2024)初中美術(shù)七年級下冊
- 撤銷限高和失信申請書
- DB33-T 2383-2021 《公路工程強力攪拌就地固化設(shè)計與施工技術(shù)規(guī)范》
- 車床工安全生產(chǎn)職責規(guī)章制度
- 2025年慶六一兒童節(jié)校長致辭(2篇)
- 房屋市政工程生產(chǎn)安全重大事故隱患排查表(2024版)
- 人教版小學數(shù)學五年級下冊全冊導學案
- 油庫設(shè)備維護規(guī)范
- 國企求職指南培訓
- 職業(yè)道德與法治綜合練習2024-2025學年中職高教版
- 安委會辦公室主要職責
評論
0/150
提交評論