單片機(jī)原理及系統(tǒng)課程設(shè)計(jì)--基于單片機(jī)的電子鬧鐘設(shè)計(jì)_第1頁(yè)
已閱讀1頁(yè),還剩15頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、<p>  基于單片機(jī)的電子鬧鐘設(shè)計(jì)</p><p><b>  摘 要</b></p><p>  本設(shè)計(jì)以AT89C51芯片為核心,輔以必要的外圍電路,設(shè)計(jì)了一個(gè)結(jié)構(gòu)簡(jiǎn)單,功能齊全的電子時(shí)鐘,它由5V直流電源供電。</p><p>  關(guān)鍵詞:?jiǎn)纹瑱C(jī);led;鬧鐘;定時(shí)器</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設(shè)計(jì)目的</b></p><p>  此次課程設(shè)計(jì)是在學(xué)習(xí)先修課程《單片機(jī)原理與系統(tǒng)設(shè)計(jì)》之后

4、,為加強(qiáng)對(duì)學(xué)生系統(tǒng)設(shè)計(jì)和應(yīng)用能力的培養(yǎng)而開(kāi)設(shè)的綜合設(shè)計(jì)訓(xùn)練環(huán)節(jié)。本課程設(shè)計(jì)應(yīng)結(jié)合《單片機(jī)原理與系統(tǒng)設(shè)計(jì)》課程的基礎(chǔ)理論,重點(diǎn)強(qiáng)調(diào)實(shí)際應(yīng)用技能訓(xùn)練,包括單片機(jī)系統(tǒng)設(shè)計(jì)的軟件和硬件兩部分。其課程設(shè)計(jì)任務(wù)是使學(xué)生通過(guò)應(yīng)用單片機(jī)系統(tǒng)設(shè)計(jì)的基本理論,基本知識(shí)與基本技能,掌握單片機(jī)應(yīng)用系統(tǒng)各主要環(huán)節(jié)的設(shè)計(jì)、調(diào)試方法,初步掌握并具備應(yīng)用單片機(jī)進(jìn)行設(shè)備技術(shù)改造和產(chǎn)品開(kāi)發(fā)的能力,培養(yǎng)學(xué)生的創(chuàng)新意識(shí),提高學(xué)生的動(dòng)手能力和分析問(wèn)題、解決問(wèn)題的能力。</

5、p><p><b>  1.2設(shè)計(jì)要求</b></p><p>  結(jié)合單片機(jī)知識(shí),以AT89C51單片機(jī)為核心,利用七段LED數(shù)碼管實(shí)現(xiàn)計(jì)時(shí)、校時(shí)及鬧鐘功能。</p><p><b>  1.3設(shè)計(jì)方法</b></p><p>  以AT89C51單片機(jī)為核心,外加晶振電路,使用8個(gè)七段數(shù)碼管顯示,L

6、ED采用動(dòng)態(tài)掃描,用74ls245芯片作為驅(qū)動(dòng)電路。通過(guò)四個(gè)獨(dú)立按鍵對(duì)時(shí)間進(jìn)行定時(shí)、校時(shí),從而實(shí)現(xiàn)鬧鐘提醒功能。</p><p><b>  2 設(shè)計(jì)方案及原理</b></p><p><b>  2.1設(shè)計(jì)方案</b></p><p>  選AT89C51單片機(jī)作為系統(tǒng)核心,輔助外部產(chǎn)生時(shí)鐘信號(hào)的晶振電路,再加上四個(gè)獨(dú)立

7、按鍵作為輸入信號(hào),使用8個(gè)七段數(shù)碼管顯示時(shí)間,芯片74ls245為數(shù)碼管段選線的驅(qū)動(dòng),最后用蜂鳴器實(shí)現(xiàn)鬧鈴功能。使用單片機(jī)的定時(shí)器T0計(jì)時(shí)時(shí)間為50ms,計(jì)時(shí)20次作為1s的時(shí)間基準(zhǔn)。第一部分,12MHz的晶振連接至單片機(jī)的時(shí)鐘信號(hào)輸入端;第二部分,四個(gè)獨(dú)立按鍵加上四個(gè)上拉電阻連接至單片機(jī)的P1口的低四位;第三部分,單片機(jī)的P0口通過(guò)由芯片74ls245構(gòu)成的驅(qū)動(dòng)電路連接至數(shù)碼管的段選線,單片機(jī)的P3口連接至數(shù)碼管的位選線;第四部分,單

8、片機(jī)的P2.1通過(guò)一個(gè)NPN型三極管連接至蜂鳴器。8個(gè)七段數(shù)碼管使用動(dòng)態(tài)掃描顯示時(shí)間,獨(dú)立按鍵用軟件編程實(shí)現(xiàn)對(duì)時(shí)間和鬧鐘時(shí)、分、秒的設(shè)置,再通過(guò)比較所設(shè)置的鬧鐘與時(shí)間是否相等,達(dá)到鬧鈴發(fā)出聲響的效果。</p><p><b>  2.2設(shè)計(jì)原理</b></p><p>  系統(tǒng)原理圖如圖2.1所示。</p><p>  圖2.1 系統(tǒng)原理圖&l

9、t;/p><p><b>  3 硬件設(shè)計(jì)</b></p><p>  硬件電路分四個(gè)模塊:晶振電路、鍵盤(pán)電路、數(shù)碼管顯示電路、蜂鳴器驅(qū)動(dòng)電路。晶振電路使用12MHz晶體振蕩器,經(jīng)分頻后供單片機(jī)工作。鍵盤(pán)采用4個(gè)獨(dú)立按鍵配以4個(gè)上拉電阻實(shí)現(xiàn)對(duì)時(shí)鐘和鬧鐘的設(shè)定及修改。由于通過(guò)數(shù)碼管公共及的電流較大且避免過(guò)多地使用分立元件,采用了一片74ls245來(lái)驅(qū)動(dòng)段碼,用P3口作位碼驅(qū)

10、動(dòng)。發(fā)音部分是通過(guò)三極管放大驅(qū)動(dòng)蜂鳴器工作,再通過(guò)軟件這時(shí)產(chǎn)生等時(shí)時(shí)間方波驅(qū)動(dòng)蜂鳴器發(fā)出間斷嘀聲,這樣就可以省去硬件振蕩電路,降低成本。</p><p>  系統(tǒng)硬件電路圖如圖3.1所示。</p><p>  圖3.1 系統(tǒng)硬件圖</p><p><b>  4 軟件設(shè)計(jì)</b></p><p>  源程序清單見(jiàn)附錄。主

11、程序流程圖如圖4.1所示。</p><p>  圖4.1 主程序流程圖</p><p><b>  5 系統(tǒng)仿真及調(diào)試</b></p><p>  硬件部分設(shè)置了的三個(gè)按鍵K1、K2、K3、K4。當(dāng)按鍵K1第一次按下時(shí),停止計(jì)時(shí)進(jìn)入鬧鐘1的秒設(shè)置,當(dāng)按鍵K1第二、第三次按下時(shí),分別進(jìn)入鬧鐘1的分設(shè)置和時(shí)設(shè)置,當(dāng)按K1第四 、第五、第六次按下時(shí)分

12、別進(jìn)入鬧鐘2的秒、分、時(shí)設(shè)置,當(dāng)按K1第七 、第八、第九次按下時(shí)分別進(jìn)入鬧鐘3的秒、分、時(shí)設(shè)置,當(dāng)按K1第十 、第二一、第十二次按下時(shí)分別進(jìn)入時(shí)間的秒、分、時(shí)設(shè)置,在K1按下的各階段,可用按鍵K2、K3進(jìn)行時(shí)間和鬧鈴時(shí)間的時(shí)、分、秒進(jìn)行加減設(shè)置;當(dāng)按鍵K1第十三次按下時(shí)恢復(fù)到時(shí)間顯示功能。當(dāng)顯示的時(shí)間和定時(shí)設(shè)置的時(shí)間一致時(shí),蜂鳴器發(fā)出等時(shí)間斷蜂鳴聲,鬧鈴時(shí)間設(shè)置為60秒。在各個(gè)鬧鐘設(shè)置階段,如果有K4按下,則相應(yīng)鬧鐘功能關(guān)閉或開(kāi)啟;如在

13、鬧鈴時(shí)有K4按下則提前停止鬧鈴。系統(tǒng)仿真圖如圖5.1所示。</p><p>  圖5.1 系統(tǒng)仿真圖</p><p><b>  6 總結(jié)</b></p><p>  通過(guò)兩周的努力,完成了電子鬧鐘的設(shè)計(jì)目的,實(shí)現(xiàn)了時(shí)間的顯示、校時(shí)、設(shè)置鬧鐘、鬧鈴等功能。這期間,我復(fù)習(xí)了單片機(jī)的相關(guān)知識(shí),并結(jié)合查閱相關(guān)資料,設(shè)計(jì)了整體電路以及各模塊的電路,對(duì)照

14、硬件電路編寫(xiě)對(duì)應(yīng)模塊的子程序,最后將各個(gè)子程序整合到一個(gè)主程序中,完成了設(shè)計(jì)所需功能。</p><p>  在設(shè)計(jì)中,我發(fā)現(xiàn)選擇合適的元器件很重要,比如數(shù)碼管有共陽(yáng)極和共陰極兩種,不同的選擇會(huì)導(dǎo)致程序的不同,經(jīng)過(guò)多次調(diào)試最終選擇了共陽(yáng)極數(shù)碼管。另外,我覺(jué)得軟件的設(shè)計(jì)比硬件設(shè)計(jì)更重要,而且難度更大。比如寫(xiě)一個(gè)程序看其功能很少認(rèn)為編寫(xiě)程序簡(jiǎn)單,但到編程的時(shí)候才發(fā)現(xiàn)一些細(xì)微的知識(shí)或低級(jí)錯(cuò)誤經(jīng)常犯做不到最后常常失敗,所以

15、有些東西只有學(xué)精弄懂并且要細(xì)心才行,只學(xué)習(xí)理論有些東西是很難理解的,更談不上掌握。我在這次設(shè)計(jì)中收獲頗多。我對(duì)所學(xué)的理論知識(shí)在實(shí)踐中加深了認(rèn)識(shí),同時(shí)更加熟練掌握了Proteus、Keil等軟件的使用。做任何事都需要耐心和細(xì)心,一點(diǎn)小的疏忽和懈怠可能導(dǎo)致整個(gè)設(shè)計(jì)失敗。還有一點(diǎn),自己的設(shè)計(jì)思路不可能憑空產(chǎn)生,只有借鑒別人已有的設(shè)計(jì)并充分消化吸收成為自己的東西,才能做出更好的設(shè)計(jì)作品。</p><p><b>

16、;  參考文獻(xiàn)</b></p><p>  [1] 王思明.單片機(jī)原理及應(yīng)用系統(tǒng)設(shè)計(jì)[M].北京:科學(xué)出版社,2012.</p><p>  [2] 陳明熒. 89C51單片機(jī)課程設(shè)計(jì)實(shí)訓(xùn)教材[M].北京:清華大學(xué)出版社,2003.</p><p>  [3] 劉瑞新.單片機(jī)原理及應(yīng)用教程[M].北京:機(jī)械工業(yè)出版社,2005.</p>&

17、lt;p>  [4] 楊文龍.單片機(jī)原理及應(yīng)用[M].西安:西安電子科技大學(xué)出版社,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í)間加函數(shù) </p><p>  void jian(); //定義時(shí)間減函數(shù)</p><p>  //********************數(shù)組定

23、義,數(shù)組內(nèi)含有8個(gè)數(shù)值******************</p><p>  uchar table1[8],table2[8],table3[8],table4[8];</p><p>  //**************************時(shí)間顯示初始值**************************</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í) 位閃 次數(shù) 校時(shí) 鬧1 鬧2 鬧3</p><p>  uint flag2;</p><p><b>  // 蜂鳴 <

26、/b></p><p>  //*********************延時(shí)函數(shù),用于動(dòng)態(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; //定時(shí)時(shí)間為:50ms(65536-50000)/256</p><p>  TL0=0x0b0; //(65536-50000)%256</p>

29、<p>  ET0=1; //打開(kāi)定時(shí)器</p><p>  EA=1; //開(kāi)總中斷</p><p>  TR0=1; //啟動(dòng)定時(shí)器</p><p><b>  }</b></p><p>  //*****************

30、***顯示子函數(shù),用于顯示時(shí)間數(shù)值*****************</p><p>  void display() </p><p>  { uchar i,j;</p><p>  if(cnt!=10||wss==0)</p><p>  { table1[0]=miao%10; //分離秒的個(gè)位與十位</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; //分離分的個(gè)位與十位</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; //分離時(shí)的個(gè)位與十位</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、 //從秒到時(shí)的掃描</p><p>  { P3=j;//選通點(diǎn)亮八個(gè)數(shù)碼管</p><p>  P0=table[table1[i]]; //顯示數(shù)值</p><p>  delay(10);//調(diào)用延時(shí)程序</p><p>  j=_cror_(j,1); //循環(huán)右移 </p>

36、<p><b>  }</b></p><p><b>  }</b></p><p>  //*******************顯示子函數(shù),用于顯示定時(shí)1時(shí)間*****************</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; //分離秒的個(gè)位與十位</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; //分離分的個(gè)位與十位</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; //分離時(shí)的個(gè)位與十位</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++) //從秒到時(shí)的掃描</p><p>  { P3=j; //選通點(diǎn)亮八個(gè)數(shù)碼管</p><p>  P0=table[

43、table2[i]];//顯示數(shù)值</p><p>  delay(10); //調(diào)用延時(shí)程序</p><p>  j=_cror_(j,1); //循環(huán)右移</p><p><b>  }</b></p><p><b>  }</b></p><p>  /

44、/********************顯示子函數(shù),用于顯示定時(shí)2時(shí)間******************</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; //分離秒的個(gè)位與十位</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; //分離分的個(gè)位與十位</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; //分離時(shí)的個(gè)位與十位</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++) //從秒到時(shí)的掃描</p><p>  { P3=j; //選通點(diǎn)亮八個(gè)數(shù)碼管</p><p>  P0=table[table3[i]]; /顯示數(shù)值</p><p>  delay(10); //調(diào)用

51、延時(shí)程序</p><p>  j=_cror_(j,1); //循環(huán)右移</p><p><b>  }</b></p><p><b>  }</b></p><p>  //***************顯示子函數(shù),用于顯示定時(shí)3時(shí)間數(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; //分離秒的個(gè)位與十

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; //分離分的個(gè)位與十位</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; //分離時(shí)的個(gè)位與十位</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++) //從秒到時(shí)的掃描</p><

58、;p>  { P3=j; //選通點(diǎn)亮八個(gè)數(shù)碼管</p><p>  P0=table[table4[i]]; //顯示數(shù)值</p><p>  delay(10); //調(diào)用延時(shí)程序</p><p>  j=_cror_(j,1); //循環(huán)右移 </p&

59、gt;<p><b>  }</b></p><p><b>  }</b></p><p>  //***********************時(shí)間子函數(shù) *****************************//</p><p>  void shijian() </p>

60、;<p>  { if(flag>=20) //判斷是否到一秒</p><p>  { wss=~wss;</p><p>  flag=0; //到了,則標(biāo)志位清零</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++; //時(shí)加1</p><p>  if(shi4>23) //判斷時(shí)是否到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++; //時(shí)加1</p><p>  if(shi>23) // 判斷時(shí)是否到

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>  //**************************鍵盤(pán)掃描子函數(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次,調(diào)用鬧鐘1子程序</p><p>  if(cnt==4||cnt==5||

69、cnt==6)</p><p>  { display2(); } // key1按了4、5、6次,調(diào)用鬧鐘2子程序</p><p>  if(cnt==7||cnt==8||cnt==9)</p><p>  { display3(); } // key1按了7、8、9次,調(diào)用鬧鐘3子程序</p><p>  if(cnt==0||c

70、nt==10||cnt==11||cnt==12||cnt==13)</p><p>  { display(); } // key1按了10、11、12、13次,調(diào)用計(jì)時(shí)子程序</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(); //調(diào)用加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(); //調(diào)用減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、 //是,則時(shí)加1</p><p>  if(shi1>23) //判斷時(shí)是否大于23</p><p>  shi1=0; //是,則時(shí)清零</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++; //是,則時(shí)加1</p><p>  if(shi2>23) //判斷時(shí)是否大于23</p><p>  shi2=0; //是,則時(shí)清零</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++; //是,則時(shí)加

94、1</p><p>  if(shi3>23) //判斷時(shí)是否大于23</p><p>  shi3=0; //是,則時(shí)清零</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++; //是,則時(shí)加1</p><p>  if(shi>23) //判斷時(shí)是否大于23</p><p>  shi=0; //是,則時(shí)清零</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,是則時(shí)減1</p><p>  { shi1--;</p><p>  if(shi1==255) //判斷時(shí)是否減到255,是,則時(shí)置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,是則時(shí)減1</p><p>  { shi2--;</p><p>  if(shi2==255) //判斷時(shí)是否減到255,是,則時(shí)置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,是則時(shí)減1</p><p>  { s

109、hi3--;</p><p>  if(shi3==255) //判斷時(shí)是否減到255,是,則時(shí)置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,是則時(shí)減1</p><p><b>  { shi--;</b></p&g

113、t;<p>  if(shi==255) //判斷時(shí)是否減到255,是,則時(shí)置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>  //是,再判斷時(shí)是否相等 </p><p>  if(shi==shi1&&alm1==0||shi==shi2&&alm2==0||shi==shi3&&alm3==0)</p><p>  { flag2=0;

117、 //是,則標(biāo)志位,flag2清零</p><p>  while(!(flag2==1200)&&(cnt==0)) //判斷flag2是否到1200且不</p><p>  // 為調(diào)時(shí)狀態(tài)</p><p>  {if(key4==0) //沒(méi)有,則繼續(xù)驅(qū)動(dòng)蜂

118、鳴器響</p><p>  {while(!key4)</p><p>  flag2=1200;</p><p><b>  } </b></p><p>  if(flag1>1) //等時(shí)方波驅(qū)動(dòng)蜂鳴器</p><p>  { fmq=~fmq;</p>&

119、lt;p><b>  flag1=0;</b></p><p><b>  }</b></p><p>  shijian(); //調(diào)用時(shí)間子函數(shù)</p><p>  display(); //調(diào)用顯示子函數(shù) </p><p><b>  }<

120、;/b></p><p>  fmq=1; //關(guān)閉蜂鳴器</p><p><b>  }</b></p><p><b>  }</b></p><p>  //**************************主函數(shù)*******************

121、*************//</p><p>  void main()</p><p>  { init(); //調(diào)用初始化子函數(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(); //調(diào)用時(shí)間子函數(shù)</p&

124、gt;<p>  key_scan();//調(diào)用鍵盤(pán)掃描子函數(shù)</p><p><b>  }</b></p><p><b>  }</b></p><p>  //**************************定時(shí)中斷******************************//</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++; //標(biāo)

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫(kù)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論