版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、<p> 基于單片機的電子鬧鐘設計</p><p><b> 摘 要</b></p><p> 本設計以AT89C51芯片為核心,輔以必要的外圍電路,設計了一個結構簡單,功能齊全的電子時鐘,它由5V直流電源供電。</p><p> 關鍵詞:單片機;led;鬧鐘;定時器</p><p><b>
2、; Abstract</b></p><p> This design, adopting AT89C51 chip as the core part with some necessary peripheral circuits, is a simple electronic clock which uses 5V DC as the power supply.</p><p
3、> Keywords:single chip machine ,in fixed time machine, alarm clock,LED</p><p><b> 1 引言</b></p><p><b> 1.1設計目的</b></p><p> 此次課程設計是在學習先修課程《單片機原理與系統(tǒng)設計》之后
4、,為加強對學生系統(tǒng)設計和應用能力的培養(yǎng)而開設的綜合設計訓練環(huán)節(jié)。本課程設計應結合《單片機原理與系統(tǒng)設計》課程的基礎理論,重點強調實際應用技能訓練,包括單片機系統(tǒng)設計的軟件和硬件兩部分。其課程設計任務是使學生通過應用單片機系統(tǒng)設計的基本理論,基本知識與基本技能,掌握單片機應用系統(tǒng)各主要環(huán)節(jié)的設計、調試方法,初步掌握并具備應用單片機進行設備技術改造和產(chǎn)品開發(fā)的能力,培養(yǎng)學生的創(chuàng)新意識,提高學生的動手能力和分析問題、解決問題的能力。</
5、p><p><b> 1.2設計要求</b></p><p> 結合單片機知識,以AT89C51單片機為核心,利用七段LED數(shù)碼管實現(xiàn)計時、校時及鬧鐘功能。</p><p><b> 1.3設計方法</b></p><p> 以AT89C51單片機為核心,外加晶振電路,使用8個七段數(shù)碼管顯示,L
6、ED采用動態(tài)掃描,用74ls245芯片作為驅動電路。通過四個獨立按鍵對時間進行定時、校時,從而實現(xiàn)鬧鐘提醒功能。</p><p><b> 2 設計方案及原理</b></p><p><b> 2.1設計方案</b></p><p> 選AT89C51單片機作為系統(tǒng)核心,輔助外部產(chǎn)生時鐘信號的晶振電路,再加上四個獨立
7、按鍵作為輸入信號,使用8個七段數(shù)碼管顯示時間,芯片74ls245為數(shù)碼管段選線的驅動,最后用蜂鳴器實現(xiàn)鬧鈴功能。使用單片機的定時器T0計時時間為50ms,計時20次作為1s的時間基準。第一部分,12MHz的晶振連接至單片機的時鐘信號輸入端;第二部分,四個獨立按鍵加上四個上拉電阻連接至單片機的P1口的低四位;第三部分,單片機的P0口通過由芯片74ls245構成的驅動電路連接至數(shù)碼管的段選線,單片機的P3口連接至數(shù)碼管的位選線;第四部分,單
8、片機的P2.1通過一個NPN型三極管連接至蜂鳴器。8個七段數(shù)碼管使用動態(tài)掃描顯示時間,獨立按鍵用軟件編程實現(xiàn)對時間和鬧鐘時、分、秒的設置,再通過比較所設置的鬧鐘與時間是否相等,達到鬧鈴發(fā)出聲響的效果。</p><p><b> 2.2設計原理</b></p><p> 系統(tǒng)原理圖如圖2.1所示。</p><p> 圖2.1 系統(tǒng)原理圖&l
9、t;/p><p><b> 3 硬件設計</b></p><p> 硬件電路分四個模塊:晶振電路、鍵盤電路、數(shù)碼管顯示電路、蜂鳴器驅動電路。晶振電路使用12MHz晶體振蕩器,經(jīng)分頻后供單片機工作。鍵盤采用4個獨立按鍵配以4個上拉電阻實現(xiàn)對時鐘和鬧鐘的設定及修改。由于通過數(shù)碼管公共及的電流較大且避免過多地使用分立元件,采用了一片74ls245來驅動段碼,用P3口作位碼驅
10、動。發(fā)音部分是通過三極管放大驅動蜂鳴器工作,再通過軟件這時產(chǎn)生等時時間方波驅動蜂鳴器發(fā)出間斷嘀聲,這樣就可以省去硬件振蕩電路,降低成本。</p><p> 系統(tǒng)硬件電路圖如圖3.1所示。</p><p> 圖3.1 系統(tǒng)硬件圖</p><p><b> 4 軟件設計</b></p><p> 源程序清單見附錄。主
11、程序流程圖如圖4.1所示。</p><p> 圖4.1 主程序流程圖</p><p><b> 5 系統(tǒng)仿真及調試</b></p><p> 硬件部分設置了的三個按鍵K1、K2、K3、K4。當按鍵K1第一次按下時,停止計時進入鬧鐘1的秒設置,當按鍵K1第二、第三次按下時,分別進入鬧鐘1的分設置和時設置,當按K1第四 、第五、第六次按下時分
12、別進入鬧鐘2的秒、分、時設置,當按K1第七 、第八、第九次按下時分別進入鬧鐘3的秒、分、時設置,當按K1第十 、第二一、第十二次按下時分別進入時間的秒、分、時設置,在K1按下的各階段,可用按鍵K2、K3進行時間和鬧鈴時間的時、分、秒進行加減設置;當按鍵K1第十三次按下時恢復到時間顯示功能。當顯示的時間和定時設置的時間一致時,蜂鳴器發(fā)出等時間斷蜂鳴聲,鬧鈴時間設置為60秒。在各個鬧鐘設置階段,如果有K4按下,則相應鬧鐘功能關閉或開啟;如在
13、鬧鈴時有K4按下則提前停止鬧鈴。系統(tǒng)仿真圖如圖5.1所示。</p><p> 圖5.1 系統(tǒng)仿真圖</p><p><b> 6 總結</b></p><p> 通過兩周的努力,完成了電子鬧鐘的設計目的,實現(xiàn)了時間的顯示、校時、設置鬧鐘、鬧鈴等功能。這期間,我復習了單片機的相關知識,并結合查閱相關資料,設計了整體電路以及各模塊的電路,對照
14、硬件電路編寫對應模塊的子程序,最后將各個子程序整合到一個主程序中,完成了設計所需功能。</p><p> 在設計中,我發(fā)現(xiàn)選擇合適的元器件很重要,比如數(shù)碼管有共陽極和共陰極兩種,不同的選擇會導致程序的不同,經(jīng)過多次調試最終選擇了共陽極數(shù)碼管。另外,我覺得軟件的設計比硬件設計更重要,而且難度更大。比如寫一個程序看其功能很少認為編寫程序簡單,但到編程的時候才發(fā)現(xiàn)一些細微的知識或低級錯誤經(jīng)常犯做不到最后常常失敗,所以
15、有些東西只有學精弄懂并且要細心才行,只學習理論有些東西是很難理解的,更談不上掌握。我在這次設計中收獲頗多。我對所學的理論知識在實踐中加深了認識,同時更加熟練掌握了Proteus、Keil等軟件的使用。做任何事都需要耐心和細心,一點小的疏忽和懈怠可能導致整個設計失敗。還有一點,自己的設計思路不可能憑空產(chǎn)生,只有借鑒別人已有的設計并充分消化吸收成為自己的東西,才能做出更好的設計作品。</p><p><b>
16、; 參考文獻</b></p><p> [1] 王思明.單片機原理及應用系統(tǒng)設計[M].北京:科學出版社,2012.</p><p> [2] 陳明熒. 89C51單片機課程設計實訓教材[M].北京:清華大學出版社,2003.</p><p> [3] 劉瑞新.單片機原理及應用教程[M].北京:機械工業(yè)出版社,2005.</p>&
17、lt;p> [4] 楊文龍.單片機原理及應用[M].西安:西安電子科技大學出版社,2002.</p><p><b> 附錄</b></p><p><b> 源程序清單:</b></p><p> //****************************頭文件**********************
18、**********</p><p> #include<reg51.h> </p><p> #include<intrins.h></p><p> //****************************宏定義********************************</p>&l
19、t;p> #define uchar unsigned char </p><p> #define uint unsigned int</p><p> //****************************位聲明********************************</p><p> sbit key1=P1^0;
20、 </p><p> sbit key2=P1^1;</p><p> sbit key3=P1^2;</p><p> sbit key4=P1^3;</p><p> sbit fmq=P2^1;</p><p> //************************數(shù)碼管顯示的數(shù)值
21、**************************</p><p> uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,</p><p> // 0 1 2 3 4 5</p><p> 0x82,0xf8,0x80,0x90,0xbf,0x0ff}; &l
22、t;/p><p> // 6 7 8 9 - 滅 </p><p> void jia(); //定義時間加函數(shù) </p><p> void jian(); //定義時間減函數(shù)</p><p> //********************數(shù)組定
23、義,數(shù)組內含有8個數(shù)值******************</p><p> uchar table1[8],table2[8],table3[8],table4[8];</p><p> //**************************時間顯示初始值**************************</p><p> uchar shi=12,fe
24、n=0,miao=0; </p><p> //**************************定義全局變量****************************</p><p> uchar shi1,fen1,miao1,shi2,fen2,miao2,shi3,fen3,miao3;</p><p> uchar shi4,fen4,miao4;
25、</p><p> uchar flag, flag1, wss, cnt, cnt1, alm1, alm2, alm3;</p><p> // 1秒 等時 位閃 次數(shù) 校時 鬧1 鬧2 鬧3</p><p> uint flag2;</p><p><b> // 蜂鳴 <
26、/b></p><p> //*********************延時函數(shù),用于動態(tài)掃描數(shù)碼管*****************</p><p> void delay(uchar i) </p><p> { uchar x,y;</p><p>
27、 for(x=i;x>0;x--)</p><p> for(y=120;y>0;y--);</p><p><b> }</b></p><p> //*******************************初始化函數(shù)*************************</p><p> voi
28、d init() </p><p> { TMOD=0x01; //工作方式1 </p><p> TH0=0x3c; //定時時間為:50ms(65536-50000)/256</p><p> TL0=0x0b0; //(65536-50000)%256</p>
29、<p> ET0=1; //打開定時器</p><p> EA=1; //開總中斷</p><p> TR0=1; //啟動定時器</p><p><b> }</b></p><p> //*****************
30、***顯示子函數(shù),用于顯示時間數(shù)值*****************</p><p> void display() </p><p> { uchar i,j;</p><p> if(cnt!=10||wss==0)</p><p> { table1[0]=miao%10; //分離秒的個位與十位</p&
31、gt;<p> table1[1]=miao/10;</p><p><b> }</b></p><p><b> else</b></p><p> { table1[0]=table1[1]=11;}</p><p> if(cnt!=11||wss==0)</p
32、><p> { table1[3]=fen%10; //分離分的個位與十位</p><p> table1[4]=fen/10;</p><p><b> }</b></p><p><b> else</b></p><p> { table1[3]=
33、table1[4]=11;}</p><p> if(cnt!=12||wss==0)</p><p> { table1[6]=shi%10; //分離時的個位與十位</p><p> table1[7]=shi/10;</p><p><b> }</b></p><p&g
34、t;<b> else</b></p><p> { table1[6]=table1[7]=11;}</p><p> table1[2]=table1[5]=10;</p><p><b> j=0x7f; </b></p><p> for(i=0;i<=7;i++)
35、 //從秒到時的掃描</p><p> { P3=j;//選通點亮八個數(shù)碼管</p><p> P0=table[table1[i]]; //顯示數(shù)值</p><p> delay(10);//調用延時程序</p><p> j=_cror_(j,1); //循環(huán)右移 </p>
36、<p><b> }</b></p><p><b> }</b></p><p> //*******************顯示子函數(shù),用于顯示定時1時間*****************</p><p> void display1() </p><p> { ucha
37、r i,j;</p><p> if(alm1==0)</p><p> { if(cnt!=1||wss==0)</p><p> { table2[0]=miao1%10; //分離秒的個位與十位</p><p> table2[1]=miao1/10;</p><p><b>
38、}</b></p><p><b> else</b></p><p> { table2[0]=table2[1]=11;}</p><p> if(cnt!=2||wss==0)</p><p> { table2[3]=fen1%10; //分離分的個位與十位</p&g
39、t;<p> table2[4]=fen1/10;</p><p><b> }</b></p><p><b> else</b></p><p> { table2[3]=table2[4]=11;}</p><p> if(cnt!=3||wss==0)</p&g
40、t;<p> { table2[6]=shi1%10; //分離時的個位與十位</p><p> table2[7]=shi1/10;</p><p><b> }</b></p><p><b> else</b></p><p> { table2[6
41、]=table2[7]=11;}</p><p><b> }</b></p><p><b> else</b></p><p> table2[0]=table2[1]=table2[3]=table2[4]=table2[6]=table2[7]=10;</p><p> table2
42、[2]= table2[5]=10;</p><p><b> j=0x7f;</b></p><p> for(i=0;i<=7;i++) //從秒到時的掃描</p><p> { P3=j; //選通點亮八個數(shù)碼管</p><p> P0=table[
43、table2[i]];//顯示數(shù)值</p><p> delay(10); //調用延時程序</p><p> j=_cror_(j,1); //循環(huán)右移</p><p><b> }</b></p><p><b> }</b></p><p> /
44、/********************顯示子函數(shù),用于顯示定時2時間******************</p><p> void display2() </p><p> { uchar i,j;</p><p> if(alm2==0)</p><p> { if(cnt!=4||wss==0)</p>&l
45、t;p> { table3[0]=miao2%10; //分離秒的個位與十位</p><p> table3[1]=miao2/10;</p><p><b> }</b></p><p><b> else</b></p><p> { table3[0]=tab
46、le3[1]=11;}</p><p> if(cnt!=5||wss==0)</p><p> { table3[3]=fen2%10; //分離分的個位與十位</p><p> table3[4]=fen2/10;</p><p><b> }</b></p><p&g
47、t;<b> else</b></p><p> { table3[3]=table3[4]=11;}</p><p> if(cnt!=6||wss==0)</p><p> { table3[6]=shi2%10; //分離時的個位與十位</p><p> table3[7]=shi2/
48、10;</p><p><b> }</b></p><p><b> else</b></p><p> { table3[6]=table3[7]=11;}</p><p><b> }</b></p><p><b> else
49、</b></p><p> table3[0]=table3[1]=table3[3]=table3[4]=table3[6]=table3[7]=10;</p><p> table3[2]= table3[5]=10;</p><p><b> j=0x7f;</b></p><p> for(i
50、=0;i<=7;i++) //從秒到時的掃描</p><p> { P3=j; //選通點亮八個數(shù)碼管</p><p> P0=table[table3[i]]; /顯示數(shù)值</p><p> delay(10); //調用
51、延時程序</p><p> j=_cror_(j,1); //循環(huán)右移</p><p><b> }</b></p><p><b> }</b></p><p> //***************顯示子函數(shù),用于顯示定時3時間數(shù)值**************
52、**//</p><p> void display3() </p><p> { uchar i,j;</p><p> if(alm3==0)</p><p> { if(cnt!=7||wss==0)</p><p> { table4[0]=miao3%10; //分離秒的個位與十
53、位</p><p> table4[1]=miao3/10;</p><p><b> }</b></p><p><b> else</b></p><p> { table4[0]=table4[1]=11;}</p><p> if(cnt!=8||wss==
54、0)</p><p> { table4[3]=fen3%10; //分離分的個位與十位</p><p> table4[4]=fen3/10;</p><p><b> }</b></p><p><b> else</b></p><p> {
55、table4[3]=table4[4]=11;}</p><p> if(cnt!=9||wss==0)</p><p> { table4[6]=shi3%10; //分離時的個位與十位</p><p> table4[7]=shi3/10;</p><p><b> }</b></p&g
56、t;<p><b> else</b></p><p> {table4[6]=table4[7]=11;}</p><p><b> }</b></p><p><b> else</b></p><p> table4[0]=table4[1]=t
57、able4[3]=table4[4]=table4[6]=table4[7]=10;</p><p> table4[2]= table4[5]=10;</p><p> j=0x7f; </p><p> for(i=0;i<=7;i++) //從秒到時的掃描</p><
58、;p> { P3=j; //選通點亮八個數(shù)碼管</p><p> P0=table[table4[i]]; //顯示數(shù)值</p><p> delay(10); //調用延時程序</p><p> j=_cror_(j,1); //循環(huán)右移 </p&
59、gt;<p><b> }</b></p><p><b> }</b></p><p> //***********************時間子函數(shù) *****************************//</p><p> void shijian() </p>
60、;<p> { if(flag>=20) //判斷是否到一秒</p><p> { wss=~wss;</p><p> flag=0; //到了,則標志位清零</p><p> if(cnt1!=0)</p><p> { mi
61、ao4++; //秒加1</p><p> if( miao4>59) //判斷秒是否到60s</p><p> { miao4=0; //到了,則清零</p><p> fen4++; //分加1</p><p> if
62、(fen4>59) //判斷分是否到1min</p><p> { fen4=0; //到了,則清零</p><p> shi4++; //時加1</p><p> if(shi4>23) //判斷時是否到24h</p><p> shi4=0;
63、 //到了,則清零</p><p><b> }</b></p><p><b> }</b></p><p><b> } </b></p><p><b> else</b></p><p> {
64、miao++; //秒加1</p><p> if( miao>59) //判斷秒是否到60s</p><p> { miao=0; //到了,則清零</p><p> fen++; //分加1</p&g
65、t;<p> if(fen>59) //判斷分是否到1min</p><p> { fen=0; // 到了,則清零</p><p> shi++; //時加1</p><p> if(shi>23) // 判斷時是否到
66、24h</p><p> shi=0; //到了,則清零 </p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p&g
67、t;<b> }</b></p><p><b> }</b></p><p> //**************************鍵盤掃描子函數(shù)************************//</p><p> void key_scan() </p><p> { if(k
68、ey1==0)</p><p> { while(!key1) //防止掉顯</p><p> { if(cnt==1||cnt==2||cnt==3)</p><p> { display1(); } //key1按了1、2、3次,調用鬧鐘1子程序</p><p> if(cnt==4||cnt==5||
69、cnt==6)</p><p> { display2(); } // key1按了4、5、6次,調用鬧鐘2子程序</p><p> if(cnt==7||cnt==8||cnt==9)</p><p> { display3(); } // key1按了7、8、9次,調用鬧鐘3子程序</p><p> if(cnt==0||c
70、nt==10||cnt==11||cnt==12||cnt==13)</p><p> { display(); } // key1按了10、11、12、13次,調用計時子程序</p><p><b> }</b></p><p> cnt++; //記下按鍵key1按下的次數(shù) <
71、/p><p> if(cnt==10&&cnt1==0)</p><p> { miao4=miao;</p><p><b> fen4=fen;</b></p><p><b> shi4=shi;</b></p><p><b> cnt
72、1++;</b></p><p><b> }</b></p><p> if(cnt==13)</p><p><b> { cnt=0;</b></p><p> if(cnt1==1)</p><p> { miao=miao4;</p>
73、;<p><b> fen=fen4;</b></p><p><b> shi=shi4;</b></p><p><b> }</b></p><p><b> cnt1=0; </b></p><p> } &
74、lt;/p><p><b> }</b></p><p> if(key2==0) //判斷key2是否按下</p><p> { while(!key2) //防止掉顯</p><p> { if(cnt==1||cnt==2||cnt==3)</p>
75、<p> { display1(); }</p><p> if(cnt==4||cnt==5||cnt==6)</p><p> { display2(); }</p><p> if(cnt==7||cnt==8||cnt==9)</p><p> { display3(); }</p><p>
76、; if(cnt==0||cnt==10||cnt==11||cnt==12||cnt==13)</p><p> { display(); }</p><p><b> }</b></p><p> jia(); //調用加1子函數(shù)</p><p><b> }&l
77、t;/b></p><p> if(key3==0) //判斷key3是否按下</p><p> { while(!key3) //防止掉顯</p><p> { if(cnt==1||cnt==2||cnt==3)</p><p> { display1(); }</p&g
78、t;<p> if(cnt==4||cnt==5||cnt==6)</p><p> { display2(); }</p><p> if(cnt==7||cnt==8||cnt==9)</p><p> { display3(); } </p><p> if(cnt==0||cnt==10||cnt==11||c
79、nt==12||cnt==13)</p><p> { display(); }</p><p><b> }</b></p><p> jian(); //調用減1子函數(shù) </p><p><b> }</b></p><p&g
80、t; if(key4==0) //判斷key4是否按下</p><p> {while(!key4) //防止掉顯</p><p> { if(cnt==1||cnt==2||cnt==3)</p><p> { alm1=~alm1;</p><p> display1();</p><
81、;p><b> }</b></p><p> if(cnt==4||cnt==5||cnt==6)</p><p> { alm2=~alm2;</p><p> display2();</p><p><b> }</b></p><p> if(cnt
82、==7||cnt==8||cnt==9)</p><p> { alm3=~alm3;</p><p> display3(); </p><p><b> }</b></p><p> if(cnt==0||cnt==10||cnt==11||cnt==12||cnt==13)</p><
83、p> display();</p><p><b> } </b></p><p><b> } </b></p><p><b> }</b></p><p> //****************************加1子函數(shù)********
84、*******************</p><p> void jia() </p><p> { if(cnt==1) //判斷key1按下的次數(shù)是否為1</p><p> { miao1++; //是,則秒加1</p><p> if(miao1>59) //判斷秒是否大于60
85、,是,則秒清零</p><p><b> miao1=0;</b></p><p><b> }</b></p><p> if(cnt==2) //判斷key1按下的次數(shù)是否為2</p><p> { fen1++;//是,則分加1</p><p&g
86、t; if(fen1>59) //判斷分是否大于60</p><p> fen1=0; //是,則分清零</p><p><b> }</b></p><p> if(cnt==3) //判斷key1按下的次數(shù)是否為3</p><p> { shi1++;
87、 //是,則時加1</p><p> if(shi1>23) //判斷時是否大于23</p><p> shi1=0; //是,則時清零</p><p><b> }</b></p><p> if(cnt==4) //判斷key1按下的次數(shù)是否為4</p>
88、;<p> { miao2++; //是,則秒加1</p><p> if(miao2>59) //判斷秒是否大于60,是,則秒清零</p><p><b> miao2=0; </b></p><p><b> }</b></p><p> if(cn
89、t==5) //判斷key1按下的次數(shù)是否為5</p><p> { fen2++; //是,則分加1</p><p> if(fen2>59) //判斷分是否大于60</p><p> fen2=0; //是,則分清零</p><p><b> }</b&g
90、t;</p><p> if(cnt==6) //判斷key1按下的次數(shù)是否為6</p><p> { shi2++; //是,則時加1</p><p> if(shi2>23) //判斷時是否大于23</p><p> shi2=0; //是,則時清零</p>
91、<p><b> }</b></p><p> if(cnt==7) //判斷key1按下的次數(shù)是否為7</p><p> { miao3++; //是,則秒加1</p><p> if(miao3>59) //判斷秒是否大于60,是,則秒清零</p><p&g
92、t;<b> miao3=0;</b></p><p><b> }</b></p><p> if(cnt==8) //判斷key1按下的次數(shù)是否為8</p><p> { fen3++; //是,則分加1</p><p> if(fen3>
93、;59) //判斷分是否大于60</p><p> fen3=0; //是,則分清零</p><p><b> }</b></p><p> if(cnt==9) //判斷key1按下的次數(shù)是否為9</p><p> { shi3++; //是,則時加
94、1</p><p> if(shi3>23) //判斷時是否大于23</p><p> shi3=0; //是,則時清零</p><p><b> }</b></p><p> if(cnt==10) //判斷key1按下的次數(shù)是否為10</p&g
95、t;<p> { miao++; //是,則秒加1</p><p> if(miao>59) //判斷秒是否大于60,是,則秒清零</p><p><b> miao=0;</b></p><p><b> cnt1++;</b></p><
96、;p><b> }</b></p><p> if(cnt==11) //判斷key1按下的次數(shù)是否為11</p><p> { fen++; //是,則分加1</p><p> if(fen>59) //判斷分是否大于60</p>
97、<p> fen=0; //是,則分清零</p><p><b> cnt1++; </b></p><p><b> }</b></p><p> if(cnt==12) //判斷key1按下的次數(shù)是否為12</p><p> {
98、 shi++; //是,則時加1</p><p> if(shi>23) //判斷時是否大于23</p><p> shi=0; //是,則時清零</p><p><b> cnt1++;</b></p><p><b> }</b>
99、;</p><p><b> }</b></p><p> //***************************減1子函數(shù)**************************//</p><p> void jian() </p><p> { if(cnt==1)//判斷key1按下的次數(shù)是
100、否為1,是則秒減1</p><p> { miao1--;</p><p> if(miao1==255)//判斷秒是否減到255,是,則秒置59</p><p><b> miao1=59;</b></p><p><b> }</b></p><p> if
101、(cnt==2)//判斷key1按下的次數(shù)是否為2,是則分減1</p><p> { fen1--;</p><p> if(fen1==255) //判斷分是否減到255,是,則分置59</p><p><b> fen1=59;</b></p><p><b> }</b>&
102、lt;/p><p> if(cnt==3) //判斷key1按下的次數(shù)是否為3,是則時減1</p><p> { shi1--;</p><p> if(shi1==255) //判斷時是否減到255,是,則時置23</p><p><b> shi1=23;</b></p>&
103、lt;p><b> }</b></p><p> if(cnt==4) //判斷key1按下的次數(shù)是否為4,是則秒減1</p><p> { miao2--;</p><p> if(miao2==255) //判斷秒是否減到255,是,則秒置59</p><p><b> miao2=59;
104、</b></p><p><b> }</b></p><p> if(cnt==5) //判斷key1按下的次數(shù)是否為5,是則分減1</p><p> { fen2--;</p><p> if(fen2==255) //判斷分是否減到255,是,則分置59</p><p>
105、;<b> fen2=59;</b></p><p><b> }</b></p><p> if(cnt==6) //判斷key1按下的次數(shù)是否為6,是則時減1</p><p> { shi2--;</p><p> if(shi2==255) //判斷時是否減到255,是,則時置23
106、</p><p><b> shi2=23;</b></p><p><b> }</b></p><p> if(cnt==7) //判斷key1按下的次數(shù)是否為7,是則秒減1</p><p> { miao3--;</p><p> if(miao3==255
107、) //判斷秒是否減到255,是,則秒置59</p><p><b> miao3=59;</b></p><p><b> }</b></p><p> if(cnt==8) //判斷key1按下的次數(shù)是否為8,是則分減1</p><p> { fen3--;</p>&l
108、t;p> if(fen3==255) //判斷分是否減到255,是,則分置59</p><p><b> fen3=59;</b></p><p><b> }</b></p><p> if(cnt==9) //判斷key1按下的次數(shù)是否為9,是則時減1</p><p> { s
109、hi3--;</p><p> if(shi3==255) //判斷時是否減到255,是,則時置23</p><p><b> shi3=23;</b></p><p><b> }</b></p><p> if(cnt==10) //判斷key1按下的次數(shù)是否為10,是則秒
110、減1</p><p> { miao--;</p><p> if(miao==255) //判斷秒是否減到255,是,則秒置59</p><p><b> miao=59;</b></p><p><b> cnt1++;</b></p><p><b&g
111、t; }</b></p><p> if(cnt==11) //判斷key1按下的次數(shù)是否為11,是則分減1</p><p><b> { fen--;</b></p><p> if(fen==255) //判斷分是否減到255,是,則分置59</p><p><b> fen=59;
112、</b></p><p><b> cnt1++;</b></p><p><b> }</b></p><p> if(cnt==12) //判斷key1按下的次數(shù)是否為12,是則時減1</p><p><b> { shi--;</b></p&g
113、t;<p> if(shi==255) //判斷時是否減到255,是,則時置23</p><p><b> shi=23;</b></p><p><b> cnt1++;</b></p><p><b> }</b></p><p><b>
114、 }</b></p><p> //***************************鬧鈴子函數(shù)***************************//</p><p> void clock() </p><p> //判斷秒的數(shù)值是否相等 </p><p> { if(miao==miao1&
115、amp;&alm1==0||miao==miao2&&alm2==0||miao==miao3&&alm3==0)</p><p> //是,在判斷分是否相等 </p><p> if(fen==fen1&&alm1==0||fen==fen2&&
116、alm2==0||fen==fen3&&alm3==0)</p><p> //是,再判斷時是否相等 </p><p> if(shi==shi1&&alm1==0||shi==shi2&&alm2==0||shi==shi3&&alm3==0)</p><p> { flag2=0;
117、 //是,則標志位,flag2清零</p><p> while(!(flag2==1200)&&(cnt==0)) //判斷flag2是否到1200且不</p><p> // 為調時狀態(tài)</p><p> {if(key4==0) //沒有,則繼續(xù)驅動蜂
118、鳴器響</p><p> {while(!key4)</p><p> flag2=1200;</p><p><b> } </b></p><p> if(flag1>1) //等時方波驅動蜂鳴器</p><p> { fmq=~fmq;</p>&
119、lt;p><b> flag1=0;</b></p><p><b> }</b></p><p> shijian(); //調用時間子函數(shù)</p><p> display(); //調用顯示子函數(shù) </p><p><b> }<
120、;/b></p><p> fmq=1; //關閉蜂鳴器</p><p><b> }</b></p><p><b> }</b></p><p> //**************************主函數(shù)*******************
121、*************//</p><p> void main()</p><p> { init(); //調用初始化子函數(shù)</p><p><b> while(1)</b></p><p> { clock();
122、//鬧鐘子函數(shù) </p><p> if(cnt==1||cnt==2||cnt==3) //顯示子函數(shù)</p><p> { display1(); }</p><p> if(cnt==4||cnt==5||cnt==6)</p><p> { display2(); }</p><p> if
123、(cnt==7||cnt==8||cnt==9)</p><p> { display3(); }</p><p> if(cnt==0||cnt==10||cnt==11||cnt==12||cnt==13)</p><p> { display(); }</p><p> shijian(); //調用時間子函數(shù)</p&
124、gt;<p> key_scan();//調用鍵盤掃描子函數(shù)</p><p><b> }</b></p><p><b> }</b></p><p> //**************************定時中斷******************************//</p&
125、gt;<p> void time0() interrupt 1 </p><p> { TH0=0x3c; //初值50ms (65536-50000)/256</p><p> TL0=0x0b0; // (65536-50000)%256</p><p> flag++; //標
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 基于單片機的電子鬧鐘設計-單片機原理及系統(tǒng)課程設計報告
- 單片機課程設計(電子鬧鐘)
- 單片機課程設計--基于51單片機的定時鬧鐘設計
- 單片機課程設計---單片機原理及應用
- 單片機課程設計-- 單片機原理及應用
- 單片機原理及應用課程設計--基于單片機的電子時鐘設計
- 單片機定時鬧鐘課程設計
- 單片機課程設計---- lcd電子定時鬧鐘設計
- 單片機課程設計-單片機課程設計---電子時鐘
- 單片機課程設計---基于單片機的電子琴設計
- 單片機定時鬧鐘課程設計
- 定時鬧鐘—單片機課程設計
- 單片機課程設計—定時鬧鐘設計
- 單片機課程設計—定時鬧鐘設計
- 單片機課程設計-- 基于51單片機的電子時鐘系統(tǒng)
- 單片機課程設計—基于單片機的電子琴
- 基于單片機的定時鬧鐘課程設計
- 單片機課程設計---定時鬧鐘設計
- 單片機課程設計--定時鬧鐘設計
- 單片機課程設計--基于單片機的秒表系統(tǒng)設計
評論
0/150
提交評論