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

下載本文檔

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

文檔簡介

1、<p>  《微型計算機原理與應用》</p><p><b>  課程設計報告書</b></p><p>  課題名稱:基于51單片機的電子鐘設計</p><p><b>  姓名: </b></p><p><b>  學號: </b></p><

2、;p><b>  班級: </b></p><p><b>  指導教師: </b></p><p><b>  目錄:</b></p><p>  任務書......................................................................

3、.........2</p><p>  系統總體設計方案規劃與選定.......................................2</p><p>  硬件設計...........................................................................5</p><p>  軟件設計....

4、.......................................................................6</p><p>  調試...................................................................................8</p><p>  新增功能及實現方法.......

5、................................................8</p><p>  小結與體會.......................................................................9</p><p>  參考文獻............................................

6、...............................9</p><p>  附錄.................................................................................10</p><p><b>  一任務書:</b></p><p>  基于大三上學期我們所

7、學過的清華大學出版社出版的《單片機原理,接口與應用》這門課程以及軟件Keil—c51語言的學習,在最后的課程設計間斷運用學過的基本理論知識,將理論聯系實際,在實際的設計過程中體會單片機的真實應用以及用軟件進行仿真所帶來的方便性。通過系統構造、流程設計、編程與調試的過程,掌握分析與解決實際問題的方法與手段,提高系統設計、程序編碼與調試方面的實際動手能力,做一次實際的系統設計訓練,從中體會理論與實踐之間的聯系與差別。</p>

8、<p>  本次課程設計要完成硬件電路的設計和軟件的編程,使設計的數字電子時鐘可以完成以下幾點功能:</p><p>  1:六個LED上實現正常的時間顯示,24小時制</p><p>  2:實現時間的正確調節</p><p>  3: 鬧鐘的定時及到時間之后的音樂響鈴</p><p>  4:矩陣鍵盤,0到9鍵,光標的左移右移鍵

9、,鬧鐘調節鍵,時 間調節鍵,走時鍵,復位鍵,停止鍵等,其中涉及到某些鍵的復用</p><p><b>  5:實現秒表功能</b></p><p>  在設計過程中還用到8255來擴展并行接口,要注意8255的地址問題。同時在設計過程中還應該注意按鍵去抖問題,保證正確的讀入按鍵值。在鍵盤掃描時要正確的設置掃描頻率,使數碼管顯示正常,人眼可以清晰

10、分辨</p><p>  二系統總體設計方案規劃與選定</p><p>  針對要實現的功能,擬采用AT89C51單片機進行設計,AT89C51 單片機是一款低功耗,高性能CMOS8位單片機,片內含4KB在線可編程(ISP)的可反復擦寫1000次的Flash只讀程序存儲器,器件采用高密度、非易失性存儲技術制造,兼容標準MCS- 51指令系統及80C51引腳結構[7]。這樣,既能做到經濟合理

11、又能實現預期的功能。</p><p>  在程序方面,采用分塊設計的方法,這樣既減小了編程難度、使程序易于理解,又能便于添加各項功能。程序可分為鬧鐘的音樂程序、時間顯示程序、鬧鐘顯示程序、調時顯示、定時程序,走時程序,復位的模塊化的程序。</p><p>  硬件接線圖如圖所示:</p><p>  對于程序的設計,遵循分塊的原則,不同的子程序實現不同的功能,通過函

12、數的調用實現相應的功能</p><p>  主程序:執行主程序,按照得到的的10到15鍵值轉到相應的子程序去執行相應的功能。</p><p>  模塊一:時間顯示模塊:用51單片機的6個LED七段數碼管,依次分別顯示時,分,秒,中間用小數點分開。正常走時時秒數滿60進位,分鐘加1,分鐘滿60小時加1,小時滿24清0</p><p>  模塊二:顯示時間調整模塊:當按

13、下鍵值為10的開關后,進入時間調整程序,對六個數碼管相應位的的控制按照我們生活中的正常邏輯進行控制。進行調整時間</p><p>  模塊三:鬧鐘音樂模塊:當按下鍵值為11的開關后,進入鬧鐘時間設置狀態,設定相應的時間,當到了設定的時間之后,進入產生中斷,進入鬧鐘音樂程序</p><p>  模塊四:鍵盤掃描得到按鍵值函數:4*4矩陣鍵盤,用8255的PA口得到行值,p1口得到列值,最后得

14、到按下開關的鍵值,根據鍵值轉到相應的模塊執行相應的功能。</p><p>  各個模塊程序設計好之后,要進行最后的整合,函數的調用參數設置要正確,使程序能夠正常的運行,在keil上調試通過之后,檢查proteus中硬件連接有沒有錯誤,確定無誤后,在proteus中進行模擬實驗,最后可以到實驗室進行真實元器件的連接,看一看真實電路與模擬電路之間有什么異同之處,比較總結,增加自己的編程與系統實驗仿真能力。</p

15、><p><b>  三硬件設計</b></p><p><b>  用到的元器件如下:</b></p><p>  AT89C51:該單片機功能強大,不僅能滿足設計的需要,也可以在設計要求的基礎上進行一些擴展。</p><p><b>  單片機的結構如下:</b></p&

16、gt;<p>  主要應用AT89C51單片機的p1.0到p1.3得到鍵盤的列值,p1.7通過放大器進行功率放大控制喇叭的響音樂。同時對單片機的并行接口擴展了一個8255,用p0.0和p0.1作為其地址線,同時用到了89c51的兩個十六位定時計數器T0,T1,進行顯示時間和鬧鐘響音樂的中斷控制。</p><p><b>  8255:結構如下</b></p>&l

17、t;p>  8255是一個可編程并行接口芯片,有一個控制口和三個8位數據口,外設通過數據口與單片機進行數據通信,各數據口的工作方式和數據傳送方向是通過用戶對控制口寫控制字控制的。我們用到了PB,PC口進行對數碼顯示管的片選和段選,PA口得到按鍵的行值。</p><p><b>  數碼管:數碼管結構</b></p><p>  使用共陰極數碼管時將6個數碼管按相

18、同功能連接起來,3與8相連,當選通端所接管腳為低電平時該數碼管選通。</p><p>  單片機的P2口作為選通端,連接各數碼管的3、8引腳輪流顯示,連接時要加7407和上拉電阻。</p><p>  單片機的P1口作為功能段,通高電平的引腳會使相應段亮起,同樣的也要與7407和電阻連接使用。</p><p><b>  四軟件設計</b>&l

19、t;/p><p>  關于電子鐘的功能,劃分出主要功能,次要功能。程序的主要功能是準確的實現走時功能,我們用定時器來準確的設定時間(定時器T0準確設定中斷時間為20ms,終端中統計50次中斷即為一秒)。而次要功能,則是修改時間,設定鬧鐘等。在實現程序的同時,盡量使顯示人性化,如LED顯示時,光標的顯示與移動可以方便的修改設定時間及鬧鐘。</p><p>  主程序設計:主程序中完成對8255芯

20、片和定時器設置的初始化,然后進入無限循環的查詢模塊,動態掃描LED顯示模塊,使顯示走時正常。同時在循環中完成對矩陣鍵盤的狀態(是否有鍵按下,如有是哪一個)進行監控,如果有鍵按下根據其鍵值跳轉到相應的子程序中進行執行,完成相應的功能后會自動跳轉回來。這樣整個程序就實現了連續有效的運行。</p><p>  按鍵掃描子程序:首先根據端口狀態判斷是否有鍵按下,如果沒有就跳過讀鍵值這個階段。如果有鍵按下就通過行列掃描判斷

21、出所按下鍵的位置,并相應的形成鍵值,保存在一個全局變量中等待被查詢。然后跳出子程序。</p><p>  顯示子程序:該子程序在LED掃描中被調用。首先根據參數判別是顯示時間還是顯示鬧鐘,然后針對六個位形成相應的段碼值。通過參數值在相應位輸出顯示。</p><p>  時間及鬧鐘設定子程序:本程序完成時間的修改及鬧鐘的設置,對時間和鬧鐘的設置是通過修改時間值的全局變量或鬧鐘值的全局變量來完

22、成的。在修改過程中正在修改位用光標來顯示,按下數字后光標自動轉移到下一位,可以通過左右移動光標來實現正在修改位的調整。當六位全部修改完畢,或者按下確定/退出鍵后自動跳出子程序。</p><p>  響鈴子程序:當設定的鬧鐘時間到時,轉入本程序執行。本程序通過讀取頻率表來設定T1定時中斷的設定,以在響鈴端口輸出頻率一定的脈沖波。同時通過讀取時間表控制每一頻率所響的時間,這樣就可以在揚聲器輸出音樂了。同時在程序中添加

23、了鍵盤掃描環節,一旦按下退出鍵,就關閉T1定時器,跳出程序,響鈴就可以終止。</p><p><b>  五調試</b></p><p>  由于我們采用了“模塊化”的編程思路,程序的調試變得相對簡單。首先我們編制出主程序,使走時功能正常完成,顯示現在的時間,過程中出現的主要問題是動態掃面的相關參數設置不合理,顯示出現不正常的現象;然后我們開始編寫相關子程序,由于幾個

24、主要的子程序之間沒有參數上的直接聯系,所以我們分別編寫各個子程序,調試功能無誤后添加到主干程序中來。由于程序編寫分工完成,這個階段碰到最大的問題之一就是程序中對變量的復雜定義極大的浪費了資源,甚至有些重名的非法定義。然后我們通過設置幾個統一的全局變量,在各個子程序中分別對全局變量做出不同的修改已完成不同的功能。最后這個問題得到了比較好的解決。</p><p>  程序調試中還出現了種種命令的錯誤使用,以及不注意所

25、造成的錯誤,而更重要的是邏輯錯誤。很多時候程序執行出來的結果和所設想的有很大差距,這就靠著不斷的修正邏輯錯誤來調試。</p><p>  六新增功能及實現方法</p><p>  在原先的電子時鐘基礎上添加秒表功能,基本要求如下:應具有開始,暫停,繼續,清零的基本功能,并且要求在秒表模式下,不再對所定的鬧鐘有反應,即要求鬧鐘模式與時鐘模式完全分離。</p><p>

26、  實現方法如下:將鍵12,13,14復用,分別作為開始鍵,暫停(繼續)鍵和清零鍵。在鍵盤掃描過程中,如果掃描到14鍵按下,則轉到清零函數,開始進入秒表模式。由于在清零函數中,將變量pp置零,取消了鬧鐘模式,因此在秒表模式下不會出現鬧鈴響的情況。按下鍵12,啟動定時器T0工作,開始計時,當鍵盤掃描檢測到13鍵按下時,令TR0取反,計時器T0停止工作,再按一下13鍵時,TR0再取反,T0又繼續工作,這樣就實現了暫停和繼續的功能 。注意,在

27、鍵盤掃描值得到以后因為要轉向不同的處理程序,在處理程序中要將鍵值先修改,避免因鍵值不變,而重復進入子程序。此處說明12,13鍵的復用原理:12,13鍵作為時間模式下的光標左右移動鍵,是在先按下調時鍵(10鍵)或定時鍵(11鍵)后轉向修改時間函數后才起作用的,而直接按下12,13鍵會自動轉向秒表模式,不會進入時間模式,因此也就不會與此鍵的其他復用功能產生沖突。</p><p><b>  七小結</

28、b></p><p>  項目進行中遇到了各種各樣的問題,有些問題是預想中沒有過的。項目的開始主要問題是Keil所編寫的程序如何導入到Proteus中,然后在Proteus中進行仿真。程序正常編寫過程中遇到的主要問題是邏輯的錯誤,往往很多程序的運行并不像預想的那樣,所以往往要一遍遍重復的修改,這個工作量是相當大的。其次,就是課本知識掌握并不是特別扎實,有些命令的使用出現了些許的小問題??傊?,這次的項目鍛煉了

29、我的能力,真正的把學到的知識運用到了實際當中去,做出的東西也很讓人振奮。</p><p><b>  八參考文獻</b></p><p>  【1】《單片機原理、接口及應用——單片機嵌入式系統技術基礎(第2版)》,肖看、李群芳,清華大學出版社</p><p>  【2】《51單片機開發與應用技術詳解》,趙建領、薛圓圓,電子工業出版社</p

30、><p><b>  附錄:源程序代碼</b></p><p>  #include "Absacc.h"</p><p>  #include "reg51.h"</p><p>  //8255端口地址定義</p><p>  #define C8255_

31、A XBYTE[0x7F00]</p><p>  #define C8255_B XBYTE[0x7F01]</p><p>  #define C8255_C XBYTE[0x7F02]</p><p>  #define C8255_CON XBYTE[0x7F03]</p><p>  //鍵盤及數碼管顯

32、示變量組</p><p>  unsigned char data timer=0,second=0,minute=0,hour=0;</p><p>  unsigned char data second_bell=59,minute_bell=59,hour_bell=23;</p><p>  unsigned code tab_high[10]={0x3f,

33、0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};</p><p>  unsigned code tab_low[10]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef};</p><p>  unsigned code tab_position[6]={0x3e,0x3d,0x3b,0x37

34、,0x2f,0x1f};</p><p>  unsigned char tab2[6]={0x00,0x00,0x00,0x00,0x00,0x00}; </p><p>  unsigned char key_down;</p><p>  unsigned char key_value;</p><p>  unsigned char

35、flag,tab,pp=1;</p><p>  unsigned char data position=0;</p><p>  unsigned int val;</p><p>  unsigned char i;</p><p>  unsigned char number=100;</p><p><b

36、>  //響鈴函數變量組</b></p><p>  #define Clk 0x070000</p><p>  sbit P17 = P1^7;//揚聲器控制引腳</p><p>  unsigned char data val_H;//計數器高字節</p><p>  unsigned char data

37、val_L;//計數器低字節</p><p><b>  //響鈴音樂頻率表</b></p><p>  unsigned int code freq_list[] = {371,495,495,495,624,556,495,556,624,</p><p>  495,495,624,742,833,833,833,742,624,&l

38、t;/p><p>  624,495,556,495,556,624,495,416,416,</p><p>  371,495,833,742,624,624,495,556,495,</p><p>  556,833,742,624,624,742,833,990,742,</p><p>  624,624,495,556,495,55

39、6,624,495,416,</p><p>  416,371,495,0};</p><p>  //響鈴音樂頻率對應時間表</p><p>  unsigned char code time_list[]= { 4, 6, 2, 4, 4, 6, 2, 4, 4, 6,</p><p>  2, 4, 4,12, 1, 3, 6, 2

40、, 4, 4,</p><p>  6, 2, 4, 4, 6, 2, 4, 4,12, 4,</p><p>  6, 2, 4, 4, 6, 2, 4, 4, 6, 2,</p><p>  4, 4,12, 4, 6, 2, 4, 4, 6, 2,</p><p>  4, 4, 6, 2, 4, 4,12}; </p>

41、<p><b>  //延時函數</b></p><p>  void delay_short(void)</p><p><b>  {</b></p><p><b>  int i=0;</b></p><p>  for(i=0;i<=255;i++)

42、{}</p><p><b>  }</b></p><p><b>  //清除函數</b></p><p>  void clear()</p><p><b>  {</b></p><p><b>  timer=0;</b>

43、;</p><p><b>  second=0;</b></p><p><b>  minute=0;</b></p><p><b>  hour=0;</b></p><p><b>  pp=0;</b></p><p>

44、<b>  }</b></p><p>  //***********************************//</p><p>  //鍵盤函數組(包括按鍵掃描函數、得到按鍵值函數和鍵盤情況函數) </p><p><b>  //按鍵掃描函數</b></p><p>  void k

45、eyscan()</p><p><b>  {</b></p><p>  unsigned char cc;</p><p>  P1= 0x00;</p><p>  cc = C8255_C;key_down = (~cc) & 0x0f;</p><p&g

46、t;<b>  } </b></p><p><b>  //得到按鍵值函數</b></p><p>  void getkey()</p><p><b>  {</b></p><p>  unsigned char value;</p><

47、p>  unsigned char i, j = 0x0e;</p><p>  for(i=0; i<4; i++)</p><p><b>  {</b></p><p><b>  P1 = j;</b></p><p>  value = C8255_C & 0x0f;&

48、lt;/p><p>  if(!(value & 0x01))</p><p><b>  {</b></p><p>  key_value = i + 0;</p><p><b>  return;</b></p><p><b>  }</b>

49、;</p><p>  if(!(value & 0x02))</p><p><b>  {</b></p><p>  key_value = i + 4;</p><p><b>  return;</b></p><p><b>  }</b&

50、gt;</p><p>  if(!(value & 0x04))</p><p><b>  {</b></p><p>  key_value = i + 8;</p><p><b>  return;</b></p><p><b>  }</

51、b></p><p>  if(!(value & 0x08))</p><p><b>  {</b></p><p>  key_value = i + 12;</p><p><b>  return;</b></p><p><b>  }&l

52、t;/b></p><p><b>  j <<= 1;</b></p><p><b>  }</b></p><p><b>  } </b></p><p><b>  //鍵盤情況函數</b></p><p&g

53、t;  void keycondition()</p><p><b>  {</b></p><p>  keyscan();</p><p>  if(key_down)</p><p><b>  {</b></p><p>  delay_short()

54、; </p><p>  keyscan();</p><p>  if(key_down)</p><p><b>  {</b></p><p>  getkey();</p><p><b>  }</b></p><p><

55、b>  } </b></p><p><b>  }</b></p><p>  //***********************************//</p><p>  //顯示函數組(包括數碼管顯示函數和顯示光標函數)</p><p><b>  //數碼管顯示函數</b&

56、gt;</p><p>  void display( unsigned char V ,unsigned char M)</p><p><b>  {</b></p><p><b>  if(M==0)</b></p><p><b>  {</b></p

57、><p>  tab2[5] = hour/10%10;</p><p>  tab2[4] = hour%10; </p><p>  tab2[3] = minute/10%10;</p><p>  tab2[2] = minute%10; </p><p>  tab2[1] = second/10%10;<

58、/p><p>  tab2[0] = second%10;</p><p><b>  }</b></p><p><b>  if(M==1)</b></p><p><b>  {</b></p><p>  tab2[5] = hour_bell/10

59、%10;</p><p>  tab2[4] = hour_bell%10; </p><p>  tab2[3] = minute_bell/10%10;</p><p>  tab2[2] = minute_bell%10; </p><p>  tab2[1] = second_bell/10%10;</p><p&

60、gt;  tab2[0] = second_bell%10;</p><p><b>  }</b></p><p><b>  if(V==0)</b></p><p><b>  {</b></p><p>  C8255_A=tab_position[0]; </p

61、><p>  C8255_B=tab_high[tab2[5]];</p><p>  delay_short();</p><p><b>  }</b></p><p><b>  if(V==1)</b></p><p><b>  {</b><

62、;/p><p>  C8255_A=tab_position[1]; </p><p>  C8255_B=tab_low[tab2[4]];</p><p>  delay_short();</p><p><b>  }</b></p><p><b>  if(V==2)</b

63、></p><p><b>  {</b></p><p>  C8255_A=tab_position[2]; </p><p>  C8255_B=tab_high[tab2[3]];</p><p>  delay_short();</p><p><b>  }</

64、b></p><p><b>  if(V==3)</b></p><p><b>  {</b></p><p>  C8255_A=tab_position[3]; </p><p>  C8255_B=tab_low[tab2[2]];</p><p>  de

65、lay_short();</p><p><b>  }</b></p><p><b>  if(V==4)</b></p><p><b>  {</b></p><p>  C8255_A=tab_position[4]; </p><p>  C

66、8255_B=tab_high[tab2[1]];</p><p>  delay_short();</p><p><b>  }</b></p><p><b>  if(V==5)</b></p><p><b>  {</b></p><p>

67、  C8255_A=tab_position[5]; </p><p>  C8255_B=tab_high[tab2[0]];</p><p>  delay_short();</p><p><b>  }</b></p><p><b>  }</b></p><p>

68、;<b>  //顯示光標函數</b></p><p>  void display_cursor( unsigned char V )</p><p><b>  {</b></p><p>  if((V%2)==0)</p><p><b>  tab=0x08;</

69、b></p><p>  if((V%2)==1)</p><p><b>  tab=0x88;</b></p><p>  C8255_A=tab_position[V]; </p><p>  C8255_B=tab;</p><p>  delay_short();</p>

70、;<p>  } //**********************************//</p><p><b>  //響鈴函數</b></p><p>  void bell_sound(void)</p><p><b>  {</b></p><p>  unsig

71、ned int val;</p><p>  unsigned char i;</p><p>  unsigned char m,k,mark=1;</p><p><b>  TR1 = 1;</b></p><p>  while(mark)</p><p><b>  {<

72、/b></p><p><b>  i = 0;</b></p><p>  while((freq_list[i]!=0)&&(mark==1)){ </p><p>  keycondition();</p><p>  if(key_value==15)</p><p

73、><b>  {</b></p><p><b>  TR1=0;</b></p><p><b>  mark=0;</b></p><p><b>  }</b></p><p>  val = Clk/(freq_list[i]);</p

74、><p>  val = 0xFFFF - val;</p><p>  val_H = (val>>8)&0xff;</p><p>  val_L = val&0xff;</p><p>  TH1 = val_H;</p><p>  TL1 = val_L;</p>

75、<p>  for(m=0;m<time_list[i];m++)</p><p><b>  {</b></p><p>  for(k=0;k<0x26;k++)</p><p><b>  {</b></p><p>  if(position<=5)</p&

76、gt;<p><b>  {</b></p><p>  display(position,0) ;</p><p>  position+=1;</p><p><b>  }</b></p><p><b>  else</b></p><

77、p>  position=0;</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  i++;</b></p><p><b>  }</b></p><p><b&

78、gt;  }</b></p><p><b>  }</b></p><p>  //***********************************//</p><p><b>  //調整時間函數</b></p><p>  void modify_time(unsigned

79、char d)</p><p>  {unsigned char a,b,c;</p><p>  key_value=100;</p><p>  for(flag=0 ; flag<=5 ; )</p><p><b>  {</b></p><p>  if(position<

80、=5)</p><p><b>  { </b></p><p>  if(position!=flag)</p><p>  display(position,d) ;</p><p>  if(position==flag)</p><p>  display_cursor( positio

81、n ); </p><p>  delay_short() ;</p><p>  delay_short() ;</p><p>  position+=1;</p><p><b>  }</b></p><p><b>  else</b></p>&

82、lt;p>  position=0;</p><p>  if(number>=100)</p><p>  keycondition();</p><p>  if(number<100)</p><p>  number=number+1;</p><p>  if((key_value==12

83、)&&(flag>0))</p><p><b>  {</b></p><p>  flag=flag-1;</p><p>  key_value=100;</p><p>  delay_short();</p><p><b>  number=0;<

84、/b></p><p><b>  }</b></p><p>  if((key_value==13)&&(flag<5))</p><p><b>  {</b></p><p>  flag=flag+1;</p><p>  key_val

85、ue=100;</p><p>  delay_short();</p><p><b>  number=0;</b></p><p><b>  }</b></p><p>  if((key_value==15))</p><p><b>  flag=6;&

86、lt;/b></p><p>  if((0<=key_value)&&(key_value<=9))</p><p><b>  {</b></p><p>  delay_short();</p><p>  if((flag==0)&&(key_value<3

87、))</p><p><b>  {</b></p><p>  a=a%10+key_value*10; </p><p>  key_value=100;</p><p>  flag=flag+1;</p><p>  delay_short();</p><p>

88、;<b>  number=0;</b></p><p>  } if((flag==1)&&(key_value!=100)&&(key_value<10))</p><p><b>  {</b></p><p>  a=a/10*10+key_value; <

89、/p><p>  key_value=100;</p><p>  flag=flag+1;</p><p>  delay_short();</p><p><b>  number=0;</b></p><p>  } if((flag==1)&&(key_value!=10

90、0)&&(key_value<4))</p><p><b>  {</b></p><p>  a=a/10*10+key_value; </p><p>  key_value=100;</p><p>  flag=flag+1;</p><p>  delay_s

91、hort();</p><p><b>  number=0;</b></p><p>  } if((flag==2)&&(key_value!=100)&&(key_value<6))</p><p><b>  {</b></p><p>  b

92、=b%10+key_value*10; </p><p>  key_value=100;</p><p>  flag=flag+1;</p><p>  delay_short();</p><p><b>  number=0;</b></p><p>  } if((flag

93、==3)&&(key_value!=100)&&(key_value<10))</p><p><b>  {</b></p><p>  b=b/10*10+key_value; </p><p>  key_value=100;</p><p>  flag=flag+1;&

94、lt;/p><p>  delay_short();</p><p><b>  number=0;</b></p><p>  } if((flag==4)&&(key_value!=100)&&(key_value<6))</p><p><b>  {</

95、b></p><p>  c=c%10+key_value*10; </p><p>  key_value=100;</p><p>  flag=flag+1;</p><p>  delay_short();</p><p><b>  number=0;</b></p>

96、;<p>  } if((flag==5)&&(key_value!=100)&&(key_value<10))</p><p><b>  {</b></p><p>  c=c/10*10+key_value; </p><p>  key_value=100;</p

97、><p>  flag=flag+1;</p><p>  delay_short();</p><p><b>  number=0;</b></p><p><b>  } </b></p><p><b>  if(d==0)</b></p>

98、;<p><b>  {</b></p><p><b>  hour=a;</b></p><p><b>  minute=b;</b></p><p><b>  second=c;</b></p><p><b>  }&l

99、t;/b></p><p><b>  if(d==1)</b></p><p><b>  {</b></p><p>  hour_bell=a;</p><p>  minute_bell=b;</p><p>  second_bell=c;</p>

100、<p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  flag=0;</b></p><p>  number=100;</p><p&

101、gt;<b>  }</b></p><p>  //***********************************//</p><p>  //定時器中斷函數組(包括定時器0和定時器1中斷處理程序)</p><p>  //定時器0中斷程序 </p><p>  timer0()interrupt 1 usi

102、ng 1</p><p><b>  {</b></p><p><b>  timer+=1;</b></p><p>  TH0=-20000/256;</p><p>  TL0=-20000%256;</p><p>  if(timer>=50)</p&

103、gt;<p><b>  {</b></p><p><b>  timer=0;</b></p><p>  second+=1;</p><p>  if(second==60)</p><p><b>  {</b></p><p>

104、;<b>  second=0;</b></p><p>  minute+=1;</p><p>  if(minute==60)</p><p><b>  {</b></p><p><b>  minute=0;</b></p><p><

105、b>  hour+=1;</b></p><p>  if(hour==24)</p><p><b>  {</b></p><p><b>  hour=0;</b></p><p><b>  }</b></p><p><

106、b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  //定時器1中斷處理程序</p><p>  void timer1() i

107、nterrupt 3</p><p><b>  {</b></p><p>  P17 = ~P17;TH1 = val_H;</p><p>  TL1 = val_L;</p><p><b>  }</b></p><p>  //*

108、**********************************//</p><p><b>  //主函數</b></p><p>  void main()</p><p>  { IP = 0x02;</p><p>  TMOD=0x11;</p><p>  IE = 0x8a;&

109、lt;/p><p>  TH0=-20000/256;</p><p>  TL0=-20000%256;</p><p><b>  EA=1;</b></p><p><b>  ET0=1;</b></p><p>  C8255_CON = 0x81;</p

110、><p><b>  while(1)</b></p><p><b>  { </b></p><p>  keycondition();</p><p>  switch(key_value)</p><p><b>  {</b></p>

111、;<p>  case 10: {modify_time(0);}; break;</p><p>  case 11: {modify_time(1);}; break;</p><p>  case 12: { TR0=1;}; break;</p><p>  case 13: {key_value=100; TR0=~TR0;}; break;

112、</p><p>  case 14: {clear();}; break;</p><p><b>  }</b></p><p>  if(position<=5)</p><p><b>  {</b></p><p>  display(position,0)

113、;</p><p>  delay_short() ;</p><p>  delay_short() ;</p><p>  position+=1;</p><p><b>  }</b></p><p><b>  else</b></p><p

114、>  position=0;</p><p>  if((second==second_bell)&&(minute==minute_bell)&&(hour==hour_bell)&&pp==1)</p><p>  bell_sound(); </p><p><b>  }</b>

溫馨提示

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

評論

0/150

提交評論