2023年全國碩士研究生考試考研英語一試題真題(含答案詳解+作文范文)_第1頁
已閱讀1頁,還剩36頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、<p>  單片機課程設計說明書</p><p><b>  數(shù)字鐘設計</b></p><p>  1 設計任務與要求1</p><p><b>  1.1設計任務1</b></p><p><b>  1.2設計要求1</b></p><

2、p><b>  2單片機簡介2</b></p><p>  2.1單片機的發(fā)展歷程2</p><p>  3系統(tǒng)設計思路和方案3</p><p>  3.1系統(tǒng)總體方案3</p><p><b>  3.2硬件簡介4</b></p><p>  3.2.1硬件

3、選擇4</p><p>  3.2.2 51單片機的構成4</p><p>  3.2.3 STC89C52RC引腳功能說明5</p><p>  3.2.4 LED簡介6</p><p>  3.3 Keil調試7</p><p><b>  4、系統(tǒng)實物圖9</b></p&g

4、t;<p>  5、課程設計體會10</p><p><b>  參考文獻11</b></p><p><b>  附錄A12</b></p><p><b>  附錄B13</b></p><p><b>  附錄C14</b>&

5、lt;/p><p><b>  1 設計任務與要求</b></p><p><b>  1.1設計任務</b></p><p>  本課題應完成以下設計內容:</p><p><b>  1)硬件設計</b></p><p>  設計數(shù)字鐘的電路原理圖,用P

6、ROTEL繪制硬件電路。制作實物。</p><p><b>  2)軟件設計</b></p><p>  (1)時、分、秒的設置及顯示;</p><p>  (2)畫出程序框圖;</p><p>  (3)調試與分析。用PROTEUS仿真。</p><p><b>  3)課程設計說明書

7、</b></p><p><b>  1.2設計要求</b></p><p>  本課程設計的基本要求是使學生全面掌握單片機控制系統(tǒng)設計的基本理論,熟悉掌握MCS-51 系列單片機的編程方法,具體要求:本例利用AT89C51的定時器和6位7段數(shù)碼管,設計一個電子時鐘。顯示格式為“XX XX XX”,由左向右分別是:時、分、秒。</p><

8、;p><b>  2單片機簡介</b></p><p>  2.1單片機的發(fā)展歷程</p><p>  單片機是微型計算機的一個重要分支,也是一種非?;钴S和頗具生命力的機種,特別適用于工業(yè)控制領域。1971年微處理器研制成功不久,就出現(xiàn)了單片機,但最早的單片機是1位的,處理能力有限。單片機的發(fā)展共分四個階段:第一階段是初級階段,功能非常簡單;第二階段是低性能階段

9、, 16位定時器/計數(shù)器,片內ROM、RAM容量加大,直到現(xiàn)在仍被廣泛應用,是目前應用數(shù)量較多的單片機。、32位單片機推出階段,以滿足不同的用戶需要。縱觀單片機幾十年的發(fā)展歷程,單片機的今后發(fā)展方向將向多功能、高性能、高速度、低功耗、低價格、外圍電路內裝化以及內存儲器容量增加和FLASH存儲器化方向發(fā)展。</p><p>  2.2實用價值與理論意義</p><p>  在單片機模塊里比較

10、常見,數(shù)字時鐘是一種用0數(shù)字電路技術實現(xiàn)時、分、秒計時的裝置,與機械式時鐘相比具有更高的準確性和直觀性,且無機械裝置,具有更高的使用壽命,新詞得到了廣泛的應用。</p><p>  數(shù)字時鐘是采用數(shù)字電路實現(xiàn)對時、分、秒數(shù)字顯示的計時裝置,廣泛用于個人家庭、車站、碼頭、辦公室等公用場所,成為人們日常生活中不可少的必需品,由于數(shù)字集成電路的發(fā)展和石英晶體振蕩器的廣泛應用,使得數(shù)字時鐘的精度遠遠超過老式鐘表,鐘表的數(shù)

11、字化給人們的生產(chǎn)生活帶來了極大的方便,而且大大地擴展了鐘表原先的報時功能。因此研究數(shù)字時鐘及擴大其應用有著非?,F(xiàn)實的意義。</p><p>  3系統(tǒng)設計思路和方案</p><p><b>  3.1系統(tǒng)總體方案</b></p><p>  圖3.1整體設計思路</p><p>  針對要實現(xiàn)的功能,擬采用AT89C51

12、單片機進行設計,AT89C51 單片機是一款低功耗,高性能CMOS8位單片機,片內含4KB在線可編程(ISP)的可反復擦寫1000次的Flash只讀程序存儲器,器件采用高密度、非易失性存儲技術制造,兼容標準MCS- 51指令系統(tǒng)及80C51引腳結構。這樣,既能做到經(jīng)濟合理又能實現(xiàn)預期的功能。在程序方面,采用分塊設計的方法,這樣既減小了編程難度、使程序易于理解,又能便于添加各項功能。程序可分為鬧鐘的聲音程序、顯示程序、鬧鐘顯示程序、調時顯

13、示、定時程序。運用這種方法,關鍵在于各模塊的兼容和配合,若各模塊不匹配會出現(xiàn)意想不到的錯誤。</p><p><b>  3.2硬件簡介</b></p><p><b>  3.2.1硬件選擇</b></p><p>  (1)單片機的選擇  選用STC89C52單片機,并配備12MHz晶振,復位電路采用上電復位

14、。</p><p> ?。?)顯示電路選擇  采用軟件譯碼動態(tài)顯示,P3.0-P3.3作數(shù)碼管的位選口。P1.0-P1.6作數(shù)碼管的段選口??紤]直接用單片機I/O口作位選時驅動功率不夠,</p><p> ?。?)電源選擇  采用直流3V電源供電。</p><p> ?。?)STC89C52是一種帶8K字節(jié)閃爍可編程可檫除只讀存儲器(FPEROM

15、-Flash </p><p>  Programable and Erasable Read Only Memory )的低電壓,高性能COMOS8的微處理器,俗稱單片機。該器件采用ATMEL搞密度非易失存儲器制造技術制造,與工業(yè)標準的MCS-51指令集和輸出管腳相兼容。 </p><p>  3.2.2 5

16、1單片機的構成</p><p>  STC89C52RC單片機是宏晶科技推出的新一代高速/低功耗/超強抗干擾的單片機,指令代碼完全兼容傳統(tǒng)8051單片機,12時鐘/機器周期和6時鐘/機器周期可以任意選擇。</p><p><b>  主要特性如下:</b></p><p>  1、增強型8051單片機,6時鐘/機器周期和12時鐘/機器周期可以任

17、意選擇,指令代碼完全兼容傳統(tǒng)8051.</p><p>  2、工作電壓:5.5V~3.3V(5V單片機)/3.8V~2.0V(3V單片機)</p><p>  3、工作頻率范圍:0~40MHz,相當于普通8051的0~80MHz,實際工作頻率可達48MHz</p><p>  4、用戶應用程序空間為8K字節(jié)</p><p>  5、片上集成

18、512字節(jié)RAM</p><p>  6、通用I/O口(32個),復位后為:P1/P2/P3/P4是準雙向口/弱上拉,P0口是漏極開路輸出,作為總線擴展用時,不用加上拉電阻,作為I/O口用時,需加上拉電阻。</p><p>  7、ISP(在系統(tǒng)可編程)/IAP(在應用可編程),無需專用編程器,無需專用仿真器,可通過串口(RxD/P3.0,TxD/P3.1)直接下載用戶程序,數(shù)秒即可完成一

19、片</p><p>  8、具有EEPROM功能</p><p><b>  9、具有看門狗功能</b></p><p>  10、共3個16位定時器/計數(shù)器。即定時器T0、T1、T2</p><p>  11、外部中斷4路,下降沿中斷或低電平觸發(fā)電路,Power Down模式可由外部中斷低電平觸發(fā)中斷方式喚醒</

20、p><p>  12、通用異步串行口(UART),還可用定時器軟件實現(xiàn)多個UART</p><p>  13、工作溫度范圍:-40~+85℃(工業(yè)級)/0~75℃(商業(yè)級)</p><p><b>  14、PDIP封裝</b></p><p>  3.2.3 STC89C52RC引腳功能說明</p><

21、p>  VCC(40引腳):電源電壓</p><p>  VSS(20引腳):接地</p><p>  RST(9引腳):復位輸入。當輸入連續(xù)兩個機器周期以上高電平時為有效,用來完成單片機單片機的復位初始化操作。看門狗計時完成后,RST引腳輸出96個晶振周期的高電平。特殊寄存器AUXR(地址8EH)上的DISRTO位可以使此功能無效。DISRTO默認狀態(tài)下,復位高電平有效。</

22、p><p>  ALE/ (30引腳):地址鎖存控制信號(ALE)是訪問外部程序存儲器時,鎖存低8位地址的輸出脈沖。在Flash編程時,此引腳( )也用作編程輸入脈沖。</p><p> ?。?9引腳):外部程序存儲器選通信號( )是外部程序存儲器選通信號。當AT89C51RC從外部程序存儲器執(zhí)行外部代碼時, 在每個機器周期被激活兩次,而訪問外部數(shù)據(jù)存儲器時, 將不被激活。</p>

23、<p>  /VPP(31引腳):訪問外部程序存儲器控制信號。為使能從0000H到FFFFH的外部程序存儲器讀取指令, 必須接GND。注意加密方式1時, 將內部鎖定位RESET。為了執(zhí)行內部程序指令, 應該接VCC。在Flash編程期間, 也接收12伏VPP電壓。</p><p>  XTAL1(19引腳):振蕩器反相放大器和內部時鐘發(fā)生電路的輸入端。</p><p>  X

24、TAL2(18引腳):振蕩器反相放大器的輸入端。</p><p>  圖3.2 STC89C52RS</p><p>  3.2.4 LED簡介</p><p>  LED數(shù)碼管根據(jù)LED的接法不同分為共陰和共陽兩類,了解LED的這些特性,對編程是很重要的,因為不同類型的數(shù)碼管,除了它們的硬件電路有差異外,編程方法也是不同的。圖2.7(a)是共陰和共陽極數(shù)碼管的內部

25、電路圖,它們的發(fā)光原理是一樣的,只是它們的電源極性不同而已。</p><p>  將多只LED的陰極連在一起即為共陰式,而將多只LED的陽極連在一起即為共陽式。以共陰式為例,如把陰極接地,在相應段的陽極接上正電源,該段即會發(fā)光。當然,LED的電流通常較小,一般均需在回路中接上限流電阻。假如我們將"b"和"c"段接上正電源,其它端接地或懸空,那么"b"和&

26、quot;c"段發(fā)光,此時,數(shù)碼管顯示將顯示數(shù)字“1”。而將"a"、"b"、"d"、"e"和"g"段都接上正電源,其它引腳懸空,此時數(shù)碼管將顯示“2”。其它數(shù)字的顯示原理與此類同。</p><p>  LED的7段數(shù)碼管利用單只LED組合排列成“8”字型的數(shù)碼管,分別引出它們的電極,點亮相應的點劃來顯示出

27、0-9的數(shù)字。在這次的設計中采用的均是共陰極的LED顯示,當I/O口輸出為高電平的時候,對應段就被點亮。LED數(shù)碼管的結構圖如圖2.4(b)所示。</p><p><b>  (a)</b></p><p><b> ?。╞)</b></p><p>  圖3.3 LED分類結構圖和結構圖</p><p

28、>  這次設計的顯示部分采用AT89C51單片機動態(tài)掃描完成, 在多數(shù)的應用場合中,我們并不希望使用多I/O端口的單片機,原則上是使用盡量少引腳的器件。在沒有富余端口的情況下,應通過優(yōu)化設計程序和擴展電路達到預期的目的。動態(tài)掃描的頻率有一定的要求,頻率太低,LED將出現(xiàn)閃爍現(xiàn)象。如頻率太高,由于每個LED點亮的時間太短,LED的亮度太低,肉眼無法看清,所以一般均取幾個ms左右為宜,這就要求在編寫程序時,選通某一位LED使

29、其點亮并保持一定的時間,程序上常采用的是調用延時子程序。</p><p>  3.3 Keil調試</p><p>  啟動Keil軟件,選擇“Project”菜單下的“New Project”命令,輸入項目的文件名,選擇存儲路徑,點擊“保存”按鈕。</p><p>  在“Select Device”窗口中選擇“Atmel”下的“AT89C51” 芯片,單擊“確定

30、”按鈕。展開“Project Workspace”窗口中的“Target 1”, 右擊 “Target 1”,選擇“Options for Target ’Target 1’”,選擇“Target”選項在Keil (MHZ)右邊輸入“12m”。選擇“Debug”選項,選擇“Use Keil Monitor-51 Driver”。單擊“Settings”按鈕,串口選擇“COM1”,波特率選擇“38400”,單擊“OK”按鈕。</

31、p><p>  右擊“Source Group 1”,選擇“Add files to Group ‘Source Group 1’,在文件類型中選擇“Asm Source file”,找到將要編譯的程序,單擊 “ADD”按鈕,然后再單擊“CLOSE”按鈕。單擊“Rebuild all target files”,在“Build”窗口中觀察編譯結果,根據(jù)提示修改程序,直到?jīng)]有錯誤出現(xiàn)。</p><p

32、><b>  4、系統(tǒng)實物圖</b></p><p>  圖4.1 系統(tǒng)實物圖</p><p><b>  5、課程設計體會</b></p><p>  這次電子技術課程設計,我很用心的去完成,當總原理圖繪好的那一刻,心里有說不出的滿足感。從這次課程設計中,我真正學到了很多有用的知識。</p><

33、p>  拿到課題后,我首先將《單片機原理與應用及C51程序設計》中有關本次設計的內容復習了一遍,比如七段譯碼顯示器、計數(shù)器、振蕩器等等。然后根據(jù)設計要求,我去圖書館查閱了相關的資料,對整體框架做了一個初步的了解。做完準備工作后就正式開始設計與繪圖。先要將沒每一功能模塊設計出來,再整體排版、連接。</p><p>  這次設計讓我熟練掌握了課本上的一些理論知識,在這次課程設計中,反復查找資料,發(fā)現(xiàn)電路中的錯誤

34、和改善電路中的錯誤,讓我將課本上的理論知識重新過了一遍。</p><p>  回過頭來一想,其實設計這些電路也并不是很困難,而且還十分有意思,特別是用protues將電路圖模擬成功后很有成就感。</p><p>  課程設計是一個學習新知識、鞏固加深所學課本理論知識的過程,它培養(yǎng)了我們綜合運用知識的能力,獨立思考和解決問題的能力。它不僅加深了我對單片機課程的理解,還讓我感受到了設計電路的樂

35、趣。在這次設計中,我一點也不怕麻煩,反復設計、繪圖與修改,就是希望能把這次課程設計做好。因此對我來說,這次課程設計是非常有意義的。</p><p><b>  參考文獻</b></p><p>  [1]楊文龍.單片機原理及應用[M].西安:西安電子科技大學出版社,1993</p><p>  [2]胡漢才.單片機原理及系統(tǒng)設計[M].北京:清

36、華大學出版社,2003</p><p>  [3]楊忠煌,黃博俊,李文昌.單芯片8051實務與應用[M].北京:中國水利水電出版社,2001</p><p>  [4]王守中,51單片機開發(fā)入門與典型實例[M].人民郵電出版社</p><p>  [5]徐愛鈞,單片機原理與應用:基于Proteus虛擬仿真技術[M].北京:機械工業(yè)出版社,2010.7</p&g

37、t;<p>  [6]周潤景,基于PROTEUS的電路及單片機設計與仿真(第二版)[M].北京:北京航空航天大學出版社,2009.12</p><p>  [7] 肖洪兵. 跟我學用單片機[M]. 北京:北京航空航天大學出版社,2002.8 </p><p>  [8] 何立民. 單片機高級教程[M].第1版.北京:北京航空航天大學出版社,2001 </p>&

38、lt;p>  [9] 趙曉安. MCS-51單片機原理及應用[M]. 天津:天津大學出版社,2001.3 </p><p>  [10] 李廣第.單片機基礎.第1版[M].北京:北京航空航天大學出版社,1999 </p><p>  [11] 孫涵芳. MCS-51/96系列單片機原理及應用(修訂版)[M].北京航空航天大學出版社,1994 </p><p>

39、  [12] 李朝青. 單片機原理及接口技術(第3版)[M]. 北京航空航天大學出版社,2005</p><p>  [13] 夏繼強. 單片機實驗與實踐教程[M]. 北京:北京航空航天大學出版社,2001 </p><p>  [14]陳小虎.電工實習(I)[M].北京:中國電力出版社,1996 </p><p>  [15]焦輜厚.電子工藝實習教程[M

40、].哈爾濱:哈爾濱工業(yè)大學出版社,1993</p><p>  [16]宋春榮.通用集成電路速查手冊[M].山東科學技術出版社,1995 </p><p>  [17]高吉祥.電子技術基礎實驗與課程設計[M].電子工業(yè)出版社,2002 </p><p><b>  附錄A </b></p><p>&

41、lt;b>  硬件原理圖</b></p><p>  PROTEUS仿真運行結果</p><p><b>  附錄B</b></p><p><b>  軟件設計流程圖</b></p><p><b>  附錄C</b></p><p>

42、;  #include <reg52.h></p><p>  #include <intrins.h></p><p>  #define uchar unsigned char</p><p>  #define uint unsigned int </p><p>  sbit dis_bi

43、t1=P2^7;//定義數(shù)碼管控制口</p><p>  sbit dis_bit2=P2^6;//定義數(shù)碼管控制口</p><p>  sbit dis_bit3=P2^4;//定義數(shù)碼管控制口</p><p>  sbit dis_bit4=P2^3;//定義數(shù)碼管控制口</p><p>  sbit dis_bi

44、t5=P2^1;//定義數(shù)碼管控制口</p><p>  sbit dis_bit6=P2^0;//定義數(shù)碼管控制口</p><p>  sbit led1_bit=P2^2;//定時LED的控制口</p><p>  sbit led2_bit=P2^5;//定時LED的控制口</p><p>  sbit s1_b

45、it=P1^0; //定義S1控制口</p><p>  sbit s2_bit=P1^1; //定義S2控制口</p><p>  sbit s3_bit=P1^2; //定義S3控制口</p><p>  sbit speak=P3^7; //定義蜂鳴器控制口</p><p>  #define smg_dat

46、a P0//定義數(shù)碼管數(shù)據(jù)口 </p><p>  void delay_50us(uint t);//延時50*T微妙函數(shù)的聲明</p><p>  void display1(uchar dis_data);//數(shù)碼管1顯示子程序</p><p>  void display2(uchar dis_data);//數(shù)碼管2顯示子程序<

47、;/p><p>  void display3(uchar dis_data);//數(shù)碼管3顯示子程序</p><p>  void display4(uchar dis_data);//數(shù)碼管4顯示子程序</p><p>  void display5(uchar dis_data);//數(shù)碼管5顯示子程序</p><p>  void

48、 display6(uchar dis_data);//數(shù)碼管6顯示子程序</p><p>  void init_t0();//定時器0初始化函數(shù)</p><p>  void dis_led();//LED處理函數(shù)</p><p>  void judge_s1();//S1按鍵處理函數(shù)</p><p>  void judge_

49、s2();//S2按鍵處理函數(shù)</p><p>  void judge_s3();//S3按鍵處理函數(shù)</p><p>  void dis(uchar s6,uchar s5,uchar s4,uchar s3,uchar s2,uchar s1);//顯示子程序</p><p>  void dis_san(uchar s6,uchar s5,uchar

50、 s4,uchar s3,uchar s2,uchar s1,uchar san);//閃爍顯示子程序</p><p>  void judge_dis();//顯示處理函數(shù)</p><p>  void judge_clock();//顯示處理函數(shù)</p><p>  //共陽數(shù)碼管斷碼表</p><p>  const unsigne

51、d char tabl1[17]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,</p><p>  // 0 1 2 3 4 5</p><p>  0x82,0xf8,0x80,0x90,0x86,0x87,0xFF, </p><p>  //6 7 8 9 E T B</

52、p><p>  0xc6,0xa1,0x8e,0xb6}; // C D F 三 </p><p>  uchar t0_crycle;</p><p>  uchar hour_count,minute_count,second_count,msecond_count;</p

53、><p>  uchar clock_hour,clock_minute;</p><p>  uchar clock_en;//鬧鐘關閉和開啟的標志,1開啟,0關閉</p><p>  uchar flag1,zancun1,zancun2,zancun3;//,flag2;</p><p>  uchar clock_flag;</p&

54、gt;<p>  uint speak_count;</p><p><b>  //主程序</b></p><p>  void main()</p><p><b>  {</b></p><p><b>  P3=0x00;</b></p>

55、<p>  flag1=0; </p><p>  zancun3=0;</p><p>  speak=1;//關閉蜂鳴器</p><p>  speak_count=0;</p><p>  clock_hour=0;</p><p>  clock_minute=0;</p><

56、;p>  clock_flag=0;</p><p>  clock_en=0;//開機時默認關閉鬧鐘</p><p>  init_t0();</p><p><b>  TR0=1;//</b></p><p>  //接下來開始編寫讓數(shù)碼管顯示的程序</p><p><b>

57、  while(1)</b></p><p><b>  {</b></p><p>  judge_dis();//顯示處理</p><p>  judge_s1();</p><p>  judge_s2();</p><p>  judge_s3();</p>&l

58、t;p>  judge_clock();//鬧鐘處理程序</p><p><b>  }</b></p><p><b>  }</b></p><p>  void timer0() interrupt 1</p><p><b>  {</b></p>

59、<p>  TH0=(65536-50000)/256;</p><p>  TL0=(65536-50000)/256;</p><p>  t0_crycle++;</p><p>  if(t0_crycle==2)// 0.1秒</p><p><b>  {</b></p><p&

60、gt;  t0_crycle=0;</p><p>  msecond_count++;</p><p>  if(msecond_count==10)//1秒</p><p><b>  { </b></p><p>  msecond_count=0;</p><p>  second_cou

61、nt++;</p><p>  if(second_count==60)</p><p><b>  {</b></p><p>  second_count=0;</p><p>  minute_count++;</p><p>  if(minute_count==60)</p>

62、<p><b>  {</b></p><p>  minute_count=0;</p><p>  hour_count++;</p><p>  if(hour_count==24)</p><p><b>  {</b></p><p>  hour_c

63、ount=0; </p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  } </b></p><p><b>  }<

64、;/b></p><p><b>  }</b></p><p><b>  //顯示處理函數(shù)</b></p><p>  void judge_dis()</p><p><b>  { </b></p><p>  if(flag1=

65、=0)</p><p><b>  {</b></p><p>  dis(hour_count/10,hour_count%10,minute_count/10,</p><p>  minute_count%10,second_count/10,second_count%10);</p><p>  dis_led(

66、);</p><p><b>  }</b></p><p>  if(flag1!=0)</p><p><b>  {</b></p><p>  switch(flag1)</p><p><b>  {</b></p><p&

67、gt;<b>  case 1:</b></p><p>  dis(5,10,11,1,12,12);//顯示SET1</p><p>  led1_bit=1;</p><p>  led2_bit=1;</p><p><b>  break;</b></p><p>

68、<b>  case 2:</b></p><p>  dis(5,10,11,2,12,12);//顯示SET2</p><p><b>  break;</b></p><p><b>  case 3:</b></p><p>  dis(5,10,11,3,12,12)

69、;//顯示SET3</p><p><b>  break;</b></p><p><b>  case 4:</b></p><p>  dis(5,10,11,4,12,12);//顯示SET4</p><p><b>  break;</b></p>&l

70、t;p><b>  case 5:</b></p><p>  dis(5,10,11,5,12,12);//顯示SET5</p><p><b>  break;</b></p><p><b>  case 6:</b></p><p>  dis_san(zancu

71、n1/10,zancun1%10,zancun2/10,</p><p>  zancun2%10,12,12,1);</p><p><b>  break;</b></p><p><b>  case 7:</b></p><p>  dis_san(zancun1/10,zancun1%10

72、,zancun2/10,</p><p>  zancun2%10,12,12,2);</p><p><b>  break;</b></p><p><b>  case 8:</b></p><p>  dis_san(zancun1/10,zancun1%10,zancun2/10,<

73、/p><p>  zancun2%10,12,12,3);</p><p><b>  break;</b></p><p>  case 9://進入修改時間,時間分位個位閃爍</p><p>  dis_san(zancun1/10,zancun1%10,zancun2/10,</p><p> 

74、 zancun2%10,12,12,4);</p><p><b>  break;</b></p><p>  case 10://進入修改鬧鐘,鬧鐘小時十位閃爍</p><p>  dis_san(zancun1/10,zancun1%10,zancun2/10,</p><p>  zancun2%10,12,za

75、ncun3,1);</p><p><b>  break;</b></p><p>  case 11://進入修改鬧鐘,鬧鐘小時個位閃爍</p><p>  dis_san(zancun1/10,zancun1%10,zancun2/10,</p><p>  zancun2%10,12,zancun3,2);<

76、;/p><p><b>  break;</b></p><p>  case 12://進入修改鬧鐘,鬧鐘小時十位閃爍</p><p>  dis_san(zancun1/10,zancun1%10,zancun2/10,</p><p>  zancun2%10,12,zancun3,3);</p><

77、;p><b>  break;</b></p><p>  case 13://進入修改鬧鐘,鬧鐘小時個位閃爍</p><p>  dis_san(zancun1/10,zancun1%10,zancun2/10,</p><p>  zancun2%10,12,zancun3,4);</p><p><b&

78、gt;  break;</b></p><p>  case 14://進入修改鬧鐘的開關</p><p>  dis_san(zancun1/10,zancun1%10,zancun2/10,</p><p>  zancun2%10,12,zancun3,6);</p><p><b>  break;</b&

79、gt;</p><p><b>  default:</b></p><p><b>  break;</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }

80、</b></p><p>  //S1按鍵處理函數(shù)</p><p>  void judge_s1()</p><p><b>  {</b></p><p>  s1_bit=1;//置IO為1,準備讀入收據(jù)</p><p>  if(s1_bit==0)//判斷是否有按鍵按下&l

81、t;/p><p><b>  {</b></p><p>  delay_50us(1);// 延時,去除機械抖動</p><p>  if(s1_bit==0)</p><p><b>  {</b></p><p>  switch(flag1)</p><

82、;p><b>  {</b></p><p><b>  case 0:</b></p><p><b>  flag1=1;</b></p><p><b>  break;</b></p><p><b>  case 1:</b

83、></p><p><b>  flag1=2;</b></p><p><b>  break;</b></p><p><b>  case 2:</b></p><p><b>  flag1=3;</b></p><p&g

84、t;<b>  break;</b></p><p><b>  case 3:</b></p><p><b>  flag1=4;</b></p><p><b>  break;</b></p><p><b>  case 4:</

85、b></p><p><b>  flag1=5;</b></p><p><b>  break;</b></p><p><b>  case 5:</b></p><p><b>  flag1=0;</b></p><p&

86、gt;<b>  break;</b></p><p>  case 6://在修改時間小時十位下按S1鍵</p><p><b>  flag1=7;</b></p><p><b>  break;</b></p><p><b>  case 7:</b&

87、gt;</p><p><b>  flag1=8;</b></p><p><b>  break;</b></p><p><b>  case 8:</b></p><p><b>  flag1=9;</b></p><p>

88、;<b>  break;</b></p><p><b>  case 9:</b></p><p><b>  flag1=6;</b></p><p><b>  break;</b></p><p><b>  case 10:</

89、b></p><p><b>  flag1=11;</b></p><p><b>  break;</b></p><p><b>  case 11:</b></p><p><b>  flag1=12;</b></p><

90、;p><b>  break;</b></p><p><b>  case 12:</b></p><p><b>  flag1=13;</b></p><p><b>  break;</b></p><p><b>  case 1

91、3:</b></p><p><b>  flag1=14;</b></p><p><b>  break;</b></p><p><b>  case 14:</b></p><p><b>  flag1=10;</b></p&g

92、t;<p><b>  break;</b></p><p><b>  default:</b></p><p><b>  break;</b></p><p>  } </p><p>  while(s1_bit==0)</p&g

93、t;<p><b>  {</b></p><p>  judge_dis();</p><p>  }//等待按鍵釋放 </p><p><b>  }</b></p><p><b>  }</b></p><p><b> 

94、 }</b></p><p>  //S2按鍵處理函數(shù)</p><p>  void judge_s2()</p><p><b>  {</b></p><p>  s2_bit=1;//置IO為1,準備讀入收據(jù)</p><p>  if(s2_bit==0)//判斷是否有按鍵按下

95、</p><p><b>  {</b></p><p>  delay_50us(1);// 延時,去除機械抖動</p><p>  if(s2_bit==0)</p><p><b>  {</b></p><p>  switch (flag1)</p>

96、<p><b>  {</b></p><p>  case 1: //在顯示SET1狀態(tài)下按S2件,進入修改時間</p><p><b>  flag1=6;</b></p><p>  zancun1=hour_count;</p><p>  zancun2=minute_count

97、;</p><p><b>  break;</b></p><p>  case 2://在顯示SET2狀態(tài)下按S2,進入設置鬧鐘</p><p>  zancun1=clock_hour;</p><p>  zancun2=clock_minute;</p><p><b>  f

98、lag1=10;</b></p><p><b>  break; </b></p><p>  case 6://修改時鐘小時十位狀態(tài)下按S2件</p><p>  hour_count=zancun1;</p><p>  minute_count=zancun2;</p><p>

99、;  second_count=0;</p><p><b>  flag1=0;</b></p><p><b>  break;</b></p><p>  case 7://修改時鐘小時個位狀態(tài)下按S2件</p><p>  hour_count=zancun1;</p><

100、;p>  minute_count=zancun2;</p><p>  second_count=0;</p><p><b>  flag1=0;</b></p><p><b>  break;</b></p><p>  case 8://修改時鐘分鐘十位狀態(tài)下按S2件</p&g

101、t;<p>  hour_count=zancun1;</p><p>  minute_count=zancun2;</p><p>  second_count=0;</p><p><b>  flag1=0;</b></p><p><b>  break;</b></p

102、><p>  case 9://修改時鐘分鐘個位狀態(tài)下按S2件</p><p>  hour_count=zancun1;</p><p>  minute_count=zancun2;</p><p>  second_count=0;</p><p><b>  flag1=0;</b></

103、p><p><b>  break;</b></p><p><b>  case 10:</b></p><p>  clock_hour=zancun1;</p><p>  clock_minute=zancun2;</p><p>  clock_en=zancun3;&

104、lt;/p><p><b>  flag1=0;</b></p><p><b>  break;</b></p><p><b>  case 11:</b></p><p>  clock_hour=zancun1;</p><p>  clock_mi

105、nute=zancun2;</p><p>  clock_en=zancun3;</p><p><b>  flag1=0;</b></p><p><b>  break;</b></p><p><b>  case 12:</b></p><p&g

106、t;  clock_hour=zancun1;</p><p>  clock_minute=zancun2;</p><p>  clock_en=zancun3;</p><p><b>  flag1=0;</b></p><p><b>  break;</b></p><

107、;p><b>  case 13:</b></p><p>  clock_hour=zancun1;</p><p>  clock_minute=zancun2;</p><p>  clock_en=zancun3;</p><p><b>  flag1=0;</b></p>

108、;<p><b>  break;</b></p><p><b>  case 14:</b></p><p>  clock_hour=zancun1;</p><p>  clock_minute=zancun2;</p><p>  clock_en=zancun3;</

109、p><p><b>  flag1=0;</b></p><p><b>  break;</b></p><p><b>  default:</b></p><p>  break; </p><p><

110、b>  } </b></p><p>  while(s2_bit==0)</p><p><b>  {</b></p><p>  judge_dis();</p><p>  }//等待按鍵釋放 </p><p><b>  }</b></p

111、><p><b>  }</b></p><p><b>  }</b></p><p>  //S3按鍵處理函數(shù)</p><p>  void judge_s3()</p><p><b>  {</b></p><p>  s3

112、_bit=1;//置IO為1,準備讀入收據(jù)</p><p>  if(s3_bit==0)//判斷是否有按鍵按下</p><p><b>  {</b></p><p>  delay_50us(1);// 延時,去除機械抖動</p><p>  if(s3_bit==0)</p><p><

113、;b>  {</b></p><p>  switch (flag1)</p><p><b>  {</b></p><p>  case 6://修改時間小時的十位數(shù)</p><p>  zancun1+=10;</p><p>  if(zancun1>=24)zan

114、cun1=zancun1%10;</p><p><b>  break;</b></p><p>  case 7://修改時間小時的個位數(shù)</p><p>  zancun1=zancun1/10*10+(zancun1%10+1)%10;</p><p>  if(zancun1>=24)zancun1=20

115、;</p><p><b>  break;</b></p><p>  case 8://修改時間分鐘的十位數(shù)</p><p>  zancun2+=10;</p><p>  if(zancun2>=60)zancun2-=60;</p><p><b>  break;<

116、;/b></p><p>  case 9://修改時間分鐘的個位數(shù)</p><p>  zancun2=zancun2/10*10+(zancun2%10+1)%10;</p><p><b>  break;</b></p><p>  case 10://修改鬧鐘小時的十位數(shù)</p><p

117、>  zancun1+=10;</p><p>  if(zancun1>=24)zancun1=zancun1%10;</p><p><b>  break;</b></p><p>  case 11://修改鬧鐘小時的個位數(shù)</p><p>  zancun1=zancun1/10*10+(zancu

118、n1%10+1)%10;</p><p>  if(zancun1>=24)zancun1=20;</p><p><b>  break;</b></p><p>  case 12://修改鬧鐘分鐘的十位數(shù)</p><p>  zancun2+=10;</p><p>  if(zanc

119、un2>=60)zancun2-=60;</p><p><b>  break;</b></p><p>  case 13://修改鬧鐘分鐘的個位數(shù)</p><p>  zancun2=zancun2/10*10+(zancun2%10+1)%10;</p><p><b>  break;</

120、b></p><p><b>  case 14:</b></p><p>  zancun3^=1;</p><p><b>  break;</b></p><p><b>  default:</b></p><p><b>  b

121、reak;</b></p><p><b>  } </b></p><p>  while(s3_bit==0)</p><p><b>  {</b></p><p>  judge_dis();</p><p>  }//等待按鍵釋放 </p>

122、;<p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  //顯示處理函數(shù)</b></p><p>  void judge_clock()</p&g

123、t;<p><b>  {</b></p><p>  if(clock_hour==hour_count && clock_minute==minute_count)</p><p><b>  {</b></p><p>  if(clock_en==1 && clock_

124、flag==0)</p><p>  { </p><p>  speak_count=0;//開啟蜂鳴器</p><p>  clock_flag=1;</p><p>  speak_count=0;</p><p><b>  }</b></p><p&

125、gt;<b>  }</b></p><p><b>  else</b></p><p><b>  {</b></p><p>  clock_flag=0;</p><p><b>  }</b></p><p>  if(c

126、lock_flag==1 && speak_count<400)</p><p><b>  {</b></p><p>  if(msecond_count<=5)</p><p><b>  {</b></p><p><b>  speak=0;</

127、b></p><p>  speak_count++;</p><p><b>  }</b></p><p><b>  else</b></p><p><b>  {</b></p><p><b>  speak=1;</b

128、></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  else</b></p><p><b>  {</b></p><p><b>  speak=1;&

129、lt;/b></p><p><b>  }</b></p><p><b>  }</b></p><p>  ////閃爍顯示子程序</p><p>  void dis_san(uchar s6,uchar s5,uchar s4,uchar s3,uchar s2,uchar s1,

130、uchar san)</p><p><b>  { </b></p><p>  if(san==1)</p><p><b>  {</b></p><p>  if(msecond_count<5)</p><p><b>  {</b>

131、;</p><p>  display1(s6);</p><p><b>  } </b></p><p><b>  }</b></p><p><b>  else</b></p><p><b>  {</b></p&

132、gt;<p>  display1(s6);</p><p><b>  }</b></p><p>  if(san==2)</p><p><b>  {</b></p><p>  if(msecond_count<5)</p><p><b&

133、gt;  {</b></p><p>  display2(s5);</p><p><b>  } </b></p><p><b>  }</b></p><p><b>  else</b></p><p><b>  {&l

134、t;/b></p><p>  display2(s5);</p><p><b>  }</b></p><p>  if(san==3)</p><p><b>  {</b></p><p>  if(msecond_count<5)</p>

135、<p><b>  {</b></p><p>  display3(s4);</p><p><b>  } </b></p><p><b>  }</b></p><p><b>  else</b></p><p>

136、;<b>  {</b></p><p>  display3(s4);</p><p><b>  }</b></p><p>  if(san==4)</p><p><b>  {</b></p><p>  if(msecond_count<

137、;5)</p><p><b>  {</b></p><p>  display4(s3);</p><p><b>  } </b></p><p><b>  }</b></p><p><b>  else</b></

138、p><p><b>  {</b></p><p>  display4(s3);</p><p><b>  }</b></p><p>  if(san==6)</p><p><b>  {</b></p><p>  if(m

139、second_count<5)</p><p><b>  {</b></p><p>  display6(s1);</p><p><b>  } </b></p><p><b>  }</b></p><p><b>  else

140、</b></p><p><b>  {</b></p><p>  display6(s1);</p><p><b>  }</b></p><p>  display5(s2);</p><p>  // display6(s1); </p>

溫馨提示

  • 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論