




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rè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按鍵被按下的標(biāo)記變量,K2num-K2按鍵被按下的標(biāo)
2、記變量,K3num=0-K3按鍵被按下的標(biāo)記變量 uchar code table=" H.I.T CHINA "/定義初始上電時液晶默認(rèn)顯示狀態(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ù)標(biāo)志 K1num=0; /K1按鍵被按下的標(biāo)記變量 K2num=0; /K2按鍵被按下的標(biāo)記變量 K3num=0; /K3按鍵被按下的標(biāo)記變量 K4num=0; /K4按鍵被按下的標(biāo)記變量 flag1=1; /控制lcd屏刷新的變量 flag2=1;/控制鬧鐘響鬧開啟關(guān)閉的標(biāo)記 flag3=1;/控制鬧鐘響起時,按下K4停止鬧鐘響鬧的標(biāo)記 flag4=1;/進(jìn)入鬧鐘設(shè)置時的標(biāo)記變量 flag5
10、=1;/進(jìn)入時間設(shè)置時的標(biāo)記變量 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點(diǎn)陣,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+) /顯示鬧鐘標(biāo)示: 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)閉計(jì)數(shù)器0 write_com(
17、0x0f); /光標(biāo)開始閃爍 write_com(0x80+0x40+13); if(K1=0&&K1num=1) /判斷K1按下,修改系統(tǒng)時間的小時 delay(5); if(K1=0) write_com(0x80+0x40+10); /光標(biāo)定位到小時位置 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); /光標(biāo)定位到分鐘位置 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) /當(dāng)設(shè)置時間或鬧鐘時,K3被按下設(shè)置完成。 if(K3=0) /判斷K3按下 delay(5); if(K3=0) flag5=0; K1num=0; while(!K3); w
20、rite_com(0x0c); /取消光標(biāo)閃 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); /第一次按下光標(biāo)定位到分鐘位置 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); /光標(biāo)
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松開顯示當(dāng)前時間 write_sfm(9,shi); if(K1=0&&K3num=1) /修改小時,判斷K1鍵按下,K3num=1,表示K3按鍵按下,則此時修改的是鬧鐘時間的小時 delay(5); if(K1=0) write_com(0x80+0x40+10); /光標(biāo)定位到小時位置 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); /光標(biāo)定位到分鐘位置 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) /當(dāng)設(shè)置鬧鐘時,K3被按下設(shè)置完成。 if(K3=0) /判斷K3按下 delay(5); if(K3=0)
27、K1num=0; K3num=0; while(!K3); write_com(0x0c); /光標(biāo)停止閃爍 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); /第一次按下光標(biāo)定位到分鐘位置 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); /光標(biāo)開始閃爍 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松開顯示當(dāng)前時間 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); /光標(biāo)定位到小時位置 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); /光標(biāo)定位到分鐘位置 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) /當(dāng)設(shè)置時間或鬧鐘時,K3被按下設(shè)置完成。 if(K3=0) /判斷K3按下 delay(5); if(K3=0) K1num=0; K3num=0; while(!K3); write_com(0x0c); /光標(biāo)停止閃爍 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); /第一次按下光標(biāo)定位到分鐘位置 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); /光標(biāo)開始閃爍 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松開顯示當(dāng)前時間 write_sfm(9,shi); if(K1=0&&K3num=1) /修改小時,判斷K1鍵按
39、下,K3num=1,表示K3按鍵按下,則此時修改的是鬧鐘時間的小時 delay(5); if(K1=0) write_com(0x80+0x40+10); /光標(biāo)定位到小時位置 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); /光標(biāo)定位到分鐘位置 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) /當(dāng)設(shè)置時間或鬧鐘時,K3被按下設(shè)置完成。 if(K3=0) /判斷K3按下 delay(5); if(K3=0) K1num=0; K3num=0; while(!K3); write_com(0x0c); /光標(biāo)停止閃爍
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); /第一次按下光標(biāo)定位到分鐘位置&
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); /光標(biāo)開始閃爍 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松開顯示當(dāng)前時間 write_sfm(9,shi); if(K1=0&&K3num=1) /修改小時,判斷K1鍵按下,K3num=1,表示K3按鍵按下,則此時修改
46、的是鬧鐘時間的小時 delay(5); if(K1=0) write_com(0x80+0x40+10); /光標(biāo)定位到小時位置 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); /光標(biāo)定位到分鐘位置 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) /當(dāng)設(shè)置時間或鬧鐘時,K3被按下設(shè)置完成。 if(K3=0) /判斷K3按下 delay(5); if(K3=0) K1num=0; K3num=0; while(!K3); write_com(0x0c); /光標(biāo)停止閃爍 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 陜西省咸陽市2025屆高三下學(xué)期高考模擬檢測(三)物理試題(含答案)
- 門診護(hù)理外科配臺培訓(xùn)
- 師者匠心:我的教育故事演講比賽策劃方案
- 2025年中國汽車絞盤市場調(diào)查研究報告
- 2025年中國智能氣體采樣器市場調(diào)查研究報告
- 2025年中國女式半高領(lǐng)內(nèi)衣套裝市場調(diào)查研究報告
- 2025年中國塑料救生圈市場調(diào)查研究報告
- DB3301T 0488-2024汽車維修行業(yè)清潔生產(chǎn)評價指標(biāo)體系
- 砂石材料銷售合同協(xié)議
- 國際酒店協(xié)議書范本
- 甘肅省2025年甘肅高三月考試卷(四4月)(甘肅二診)(數(shù)學(xué)試題+答案)
- 2025年中小學(xué)教師資格考試的重要試題及答案
- 微訓(xùn)練 一文多考 備考高效之詩歌《蘇幕遮?燎沉香》教師版
- 2025屆山東省濟(jì)南市一模生物試題(原卷版+解析版)
- 海南地理會考試卷及答案2024
- 全國河大音像版初中信息技術(shù)八年級上冊第三章第三節(jié)《循環(huán)結(jié)構(gòu)程序設(shè)計(jì)》教學(xué)設(shè)計(jì)
- 企業(yè)健康管理計(jì)劃規(guī)劃方案討論
- 隧道高空作業(yè)施工方案
- 危險性較大的分部分項(xiàng)工程專項(xiàng)施工方案嚴(yán)重缺陷清單(試行)
- 深信服超融合HCI技術(shù)白皮書-20230213
- 2025年陜西省土地工程建設(shè)集團(tuán)有限責(zé)任公司招聘筆試參考題庫附帶答案詳解
評論
0/150
提交評論