畢業(yè)設(shè)計程序(DOC)_第1頁
畢業(yè)設(shè)計程序(DOC)_第2頁
畢業(yè)設(shè)計程序(DOC)_第3頁
畢業(yè)設(shè)計程序(DOC)_第4頁
畢業(yè)設(shè)計程序(DOC)_第5頁
已閱讀5頁,還剩2頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(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,K2nu m,K3num,K4num,N; /K1num-K1 按鍵被按下的標(biāo)記變量 ,K2num-K2 按鍵被按下的標(biāo)記變 量,K3num=0-K3 按鍵被按下的標(biāo)記變量 uchar code table=" H.I.T CHINA &

2、quot;/ 定義初始上電時 液晶默認(rèn)顯示狀 態(tài) uchar code table2=" TIME " uchar code Alarm_0=" GBDS " uchar code Alarm_1=" SK DS " uchar code Alarm_2=" XKDS " uchar code Alarm_3=" DKDS " uchar code Alarm_00 =" GB " uchar code Alarm_11=" SK " uchar code

3、 Alarm_22=" XK " uchar code Alar m_33=" DK " uchar code deng=" LIGHTING " sbit K1=P10; /四 個 按鍵 sbit K2=P11; sbit K3=P12; sbit K4=P13; sbit rs=P20;sbit rw=P21; / 燈光控制端 sbit lcden=P22;sbit LED2=P23; / 廣播控制端sbit led=P24; / 發(fā)光二極管控制端 sbit beep=P25; / 蜂鳴器控制端 void delay(uint z

4、) / 延 時函數(shù) uint x,y;for(x=z;x>0;x-) for(y=110;y>0;y-) ; void write_com(uchar 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; void write_sfm(uchar add,u

5、char 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=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; / 控制 l

6、cd 屏刷新的 變量 flag2=1;/ 控制鬧鐘響鬧開啟關(guān)閉的標(biāo)記 flag3=1;/ 控制鬧鐘響起時, 按下 K4 停止鬧鐘響 鬧的標(biāo)記flag4=1;/ 進(jìn)入鬧鐘設(shè)置時的標(biāo)記變量 flag5=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; fen2=8; / 初始化鬧鐘的時間 shi2=7;fen3=10; / 初始化鬧鐘的

7、時間 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è)置開顯示,不顯示光 write_com(0x06); / 寫一個字符后地址指針自動 加1write_com(0x01);/ 顯示清 0 數(shù)據(jù)指針清 0 write_com(0x80); / 將數(shù)據(jù)指針定位到第一行,第 一個字處for(num=0;num<15;nu

8、m+) / 顯示鬧鐘標(biāo)示 : H.I.T CHINA write_date(tablenum);delay(10); write_com(0x80+0x40+11);/ 寫出時間顯示部分的兩個冒 號 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 為 工

9、作 方 式 1 TH0=(65536-50000)/256;/ 定 時 器 裝 初 值 TL0=(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+0x40+14); write_date(' ')

10、; 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); for(i=0;i<9;i+)write_date(table2i); if(K1=0)/ 判斷 K1 按下,則開始修改時間 delay(5); flag5=1; if(K1=0&&K1num=0) K1num=

11、1;while(!K1) / 判斷是否松開按鍵,后同 if(K1num=1) TR0=0; / 關(guān)閉計數(shù)器 0write_com(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)整時加 1if(shi=24) shi=0; / 若滿 24 后將清零 write_sfm(9,s

12、hi); / 每調(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+; / 則調(diào)整分加 1if(fen=60) fen=0;/ 若滿 60 后將清零 write_sfm(12,fen); / 每調(diào)節(jié)一次送液晶顯示 write_com(0x80+0x40+13); if(K1num=1) / 當(dāng)設(shè)置時間或鬧鐘時

13、, K3 被按下設(shè)置完成。 if(K3=0) / 判斷 K3 按下 delay(5); if(K3=0) flag5=0; K1num=0; while(!K3); write_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(' &#

14、39;); write_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); / 延時消抖,后同 if(K3=0) flag1=0; write_com(0x80+0x40+13); / 第一次按下光標(biāo)定位到分鐘位置 while(!K3); K3num=1; wr

15、ite_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)開始閃爍 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);

16、 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(0x80+0x40+10); / 光標(biāo)定位到小時位置 K3num=1; while(!K1); shi1+; / 則調(diào)整定時的時加 1 if(shi2=24) / 若滿 24 后將清零 shi1=0; write_sfm(9,shi1); / 每調(diào)節(jié)一次送液晶顯示 write_com

17、(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); fen1+; / 則調(diào)整分加 1if(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è)置

18、完成。 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,則為修改鬧鐘時間時,屏幕顯示的是修改鬧鐘時間的值 write_sfm(12,fen);/ 送去液晶顯示分,時 write_sfm(9,shi);write_com(0x80+0x40+11); write_date(':');write_com(0x80+0x40+14); write_dat

19、e(' ');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); if(K3=0&&K3num=0) / 判斷 K3 首次被按下,則設(shè)置鬧鐘 delay(5); / 延時消抖,后同 if(K3=0) flag1=0;write_com(0x80+0x40+13); / 第一次按下光標(biāo)定位到分鐘位置 while(!K3);

20、K3num=1; write_com(0x80+0x40); for(i=0;i<9;i+)write_date(Alarm_1i);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(12,fen2); / 送去液晶顯示定時的分,時 write_sfm(9,shi2);

21、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(0x80+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é)一次送液晶顯示

22、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);fen2+; / 則調(diào)整分加 1if(fen1=60) / 若滿 60 后將清零fen1=0;write_sfm(12,fen2); / 每調(diào)節(jié)一次送液晶顯示一下write_com(0x80+0x40+13); / 顯示位置重新回到調(diào)節(jié)處 if(K3num=1) / 當(dāng)設(shè)置時間或

23、鬧鐘時, 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,則為修改鬧鐘時間時,屏幕顯示的是修改鬧鐘時間的值 write_sfm(12,fen);/ 送去液晶顯示分,時 write_sfm(9,shi);write_com(0x80+0x40+11); write_date(':');write_com(0x80+0x40+1

24、4); write_date(' ');write_com(0x80+0x40+15); write_date(' '); void xiake() / 下課定時 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(0x80+0x40+13); / 第一次按下光標(biāo)定位到分鐘位置 w

25、hile(!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é)處 if(K2=0&&K3num=0) /K2 被按下時顯示定時時間 delay(5); if(K2=0) write_sfm(12,fen3); / 送去液晶顯示定時的分,時 write_sfm

26、(9,shi3); 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(0x80+0x40+10); / 光標(biāo)定位到小時位置 K3num=1; while(!K1); shi3+; / 則調(diào)整定時的時加 1 if(shi3=24) / 若滿 24 后將清零 shi1=0;write_sfm(9,shi3); /

27、每調(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); fen3+; / 則調(diào)整分加 1if(fen1=60) / 若滿 60 后將清零 fen1=0;write_sfm(12,fen3);/ 每調(diào)節(jié)一次送液晶顯示write_com(0x80+0x40+13); if(K3num=1) / 當(dāng)設(shè)置時間或鬧鐘時, K

28、3 被按下設(shè)置完成。 if(K3=0) / 判斷 K3 按下 delay(5); if(K3=0) K1num=0; K3num=0; while(!K3); write_com(0x0c); / 光標(biāo)停止閃爍 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(

29、9; '); void dengkong() / 燈光控制 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)定位到分鐘位置 while(!K3); K3num=1; write_com(0x80+0x40); for(i=0;i<9;i+)write_

30、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&&K3num=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,s

31、hi); 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);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é)處 if(K2=0&&

32、K3num=1) / 按鍵 2按下,修改鬧鐘時間的分鐘 delay(5); if(K2=0) write_com(0x80+0x40+13); / 光標(biāo)定位到分鐘位置 K3num=1; while(!K2);fen4+; / 則調(diào)整分加 1if(fen1=60) / 若滿 60 后將清零 fen1=0;write_sfm(12,fen4); / 每調(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

33、) K1num=0; K3num=0; while(!K3); write_com(0x0c); / 光標(biāo)停止閃爍 flag1=1;/flag=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 clock()/ 任 意 鬧 鐘 時 間 到 鬧 鐘

34、 響 if(fen=fen1)&&(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ù)三次嘩的聲 音 beep=0; delay(100)

35、; 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=0) )/ 顯 示 時 間 xianshi(); if(fen=fen1)&&(shi=shi1)&&(flag2=1)LED2=1;write_com(

36、0x80+0x40); for(i=0;i<9;i+)write_date(Alarm_00i);write_sfm(12,fen1); / 送去液晶顯示定時的分,時write_sfm(9,shi1); else LED2=0; if(fen=fen1)&&(shi=shi1)&&(flag2=0)|(fen-1=fen1)&&(shi=shi1)&&(flag4=0) ) xian shi();if(fen=fen2)&&(shi=shi2)&&(flag2=1)write_com(0x80

37、+0x40); for(i=0;i<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) ) xian shi(); if(fen=fen3)&&(shi=shi3)&&(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) xians hi(); if(fen=fen4)&&(shi=shi4)&a

溫馨提示

  • 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論