51單片機電子時鐘課程設計_第1頁
已閱讀1頁,還剩12頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、<p><b>  摘 要</b></p><p>  近年來隨著計算機在社會領域的滲透和大規(guī)模集成電路的發(fā)展,單片機的應用正在不斷地走向深入,由于它具有功能強,體積小,功耗低,價格便宜,工作可靠,使用方便等特點,因此特別適合于與控制有關的系統(tǒng),越來越廣泛地應用于自動控制,智能化儀器,儀表,數據采集,軍工產品以及家用電器等各個領域,單片機往往是作為一個核心部件來使用,在根據具體硬

2、件結構,以及針對具體應用對象特點的軟件結合,以作完善。</p><p>  本次設計中以單片機的發(fā)展過程和發(fā)展方向為背景,介紹了單片機的輸入輸出的工作原理和操作方法,中斷的工作原理和操作方法,74HC573驅動器的工作原理和與數碼管連接的方法。</p><p>  本次做的數字鐘是以單片機(STC89C52)為核心,結合相關的元器件(共陰極LED數碼管、驅動器74HC573等),再配以相應

3、的軟件,是它具有時,分,秒顯示的功能,并且時,分,秒還可以調整。此次設計電子數字鐘是為了了解電子數字鐘的原理,從而學會制作電子數字鐘。而且通過電子數字鐘的制作進一步的了解各種在制作中用到的中小規(guī)模集成電路的作用及實用方法。通過它可以進一步學習與掌握單片機原理與使用方法。</p><p>  關鍵詞:單片機 STC89C52 共陰極LED數碼顯示器 74HC573驅動器</p><p&

4、gt;<b>  一.設計目的</b></p><p>  1、實現時鐘的基本功能</p><p>  2、能夠手動對時間的調整</p><p><b>  3、實現跑秒功能</b></p><p><b>  二.數字鐘基本原理</b></p><p>

5、;  它是利用單片機的內部的定時/計數器工作與定時方式,對機器周期計數形成基準時間(如10ms)然后用另外一個計數器或軟件計數的形式對基準時間進行計數形成秒(如對10ms計數100次),“秒”計數60次形成“分”,“分”計數60次形成“時”,“時”計數24次形成“天”并清零,然后通過譯碼器,數碼管把他們的內容在相應的位置顯示出來。在具體的設計時定時器采用中斷方式工作,對時鐘的形成在終中斷序中實現,在主程序只是對定時/計數器的定義初始化,

6、調用顯示程序和控制程序的初始化。另外為了使用的方便,也設計了按鍵,可以通過按鍵對時分秒進行調整,這樣程序就加了按鍵程序。</p><p>  三.單片機數字時鐘的程序設計</p><p><b>  3.1主程序</b></p><p>  主程序是先開始,系統(tǒng)初始化、定時器初始化,脈沖基時開始跑秒后進行按鍵檢測。若沒有按鍵設置,顯示當前時間;

7、若有按鈕按下,按鍵調時,檢測完后,</p><p>  就可以顯示更新后的時間。</p><p><b>  主程序流程:</b></p><p>  3.2定時中斷(走時)子程序流程</p><p>  定時器中斷時,先檢測50ms脈沖是否計數20次,計數到20次,秒就加1;</p><p> 

8、 如果沒計滿60,就返回顯示時間,如果秒計滿60秒,就清零秒,給分加1;檢測分鐘,如果沒計滿60,繼續(xù)計時,返回顯示時間,如果滿60,就清零分鐘,給小時加1;檢測小時,如果沒計滿24,就繼續(xù)計時,返回顯示時間,如果計滿24,就清零,給秒加1,顯示時間。</p><p>  3.3按鍵掃描子程序:</p><p>  按鍵調試程序,是檢測是否有按鍵按下:</p><p&g

9、t;  如果小時 增加鍵/減小鍵 按下,就給小時 加1/減1</p><p>  如果分鐘 增加鍵/減小鍵 按下,就給分鐘 加1/減1</p><p>  如果秒 增加鍵/減小鍵 按下,就給秒 加1/減1</p><p>  如果顯示鍵(key7)按下,則顯示當前時間</p><p><b>  3.4程序代碼</b&

10、gt;</p><p>  #include<reg52.h></p><p>  #define uint unsigned int</p><p>  #define uchar unsigned char </p><p>  sbit dula=P2^0;//段選</p><p>  sbit w

11、ela=P2^1;//位選</p><p>  sbit key1=P1^0;</p><p>  sbit key2=P1^1;</p><p>  sbit key3=P1^2;</p><p>  sbit key4=P1^3;</p><p>  sbit key5=P1^4;</p><p

12、>  sbit key6=P1^5;</p><p>  sbit key7=P1^6;</p><p>  sbit key8=P1^7;</p><p>  char flag=0;</p><p>  int num1=0,num2,shi,shih,shil,fen,fenh,fenl,miao,miaoh,miaol,p,ph

13、,pl;</p><p>  void delayms(uint z)</p><p><b>  {</b></p><p><b>  uint x,y;</b></p><p>  for(x=z;x>0;x--)</p><p>  for(y=110;y>

14、;0;y--);</p><p><b>  }</b></p><p>  uchar code table[]={0x3f,0x06,0x5b,0x4f,</p><p>  0x66,0x6d,0x7d,0x07,</p><p>  0x7f,0x6f,0x77,0x7c,</p><p>

15、;  0x39,0x5e,0x79,0x71}; //共陰</p><p>  void diaplay(int shih,int shil,int fenh,int fenl,int miaoh,int miaol,int ph,int pl)//動態(tài)顯示</p><p><b>  {</b></p><p><b>  dula

16、=1;</b></p><p>  P0=table[ph];</p><p><b>  dula=0;</b></p><p><b>  P0=0xff;</b></p><p><b>  wela=1;</b></p><p>  

17、P0=0xbf;//1011 1111</p><p><b>  wela=0;</b></p><p>  delayms(1);</p><p><b>  dula=1;</b></p><p>  P0=table[pl];</p><p><b>  d

18、ula=0;</b></p><p><b>  P0=0xff;</b></p><p><b>  wela=1;</b></p><p>  P0=0x7f;// 0111 1111</p><p><b>  wela=0;</b></p>&

19、lt;p>  delayms(1);</p><p><b>  dula=1;</b></p><p>  P0=table[miaol];</p><p><b>  dula=0;</b></p><p><b>  P0=0xff;</b></p>

20、<p><b>  wela=1;</b></p><p>  P0=0xdf;//1101 1111</p><p><b>  wela=0;</b></p><p>  delayms(1);</p><p><b>  dula=1;</b></p>

21、;<p>  P0=table[miaoh];</p><p><b>  dula=0;</b></p><p><b>  P0=0xff;</b></p><p><b>  wela=1;</b></p><p>  P0=0xef;//1110 1111

22、</p><p><b>  wela=0;</b></p><p>  delayms(1);</p><p><b>  dula=1;</b></p><p>  P0=table[fenl];</p><p><b>  dula=0;</b>&

23、lt;/p><p><b>  P0=0xff;</b></p><p><b>  wela=1;</b></p><p>  P0=0xf7;//1111 0111</p><p><b>  wela=0;</b></p><p>  delayms(

24、1);</p><p><b>  dula=1;</b></p><p>  P0=table[fenh];</p><p><b>  dula=0;</b></p><p><b>  P0=0xff;</b></p><p><b> 

25、 wela=1;</b></p><p>  P0=0xfb;//1111 1011</p><p><b>  wela=0;</b></p><p><b>  dula=1;</b></p><p>  P0=table[shil];</p><p><

26、;b>  dula=0;</b></p><p><b>  P0=0xff;</b></p><p>  delayms(1);</p><p><b>  wela=1;</b></p><p>  P0=0xfd;//1111 1101</p><p>

27、;<b>  wela=0;</b></p><p>  delayms(1);</p><p><b>  dula=1;</b></p><p>  P0=table[shih];</p><p><b>  dula=0;</b></p><p>

28、<b>  P0=0xff;</b></p><p><b>  wela=1;</b></p><p>  P0=0xfe;//1111 1110</p><p><b>  wela=0;</b></p><p>  delayms(1);</p><p

29、><b>  }</b></p><p>  void keyscan()//鍵盤掃描</p><p><b>  {</b></p><p>  if(key1==0)</p><p><b>  {</b></p><p>  delayms(

30、10);</p><p>  if(key1==0)</p><p><b>  {</b></p><p>  shi++;shih=shi/10;shil=shi%10;</p><p>  if(shi==24) shi=0;</p><p>  while(!key1); </p&g

31、t;<p><b>  }</b></p><p><b>  }</b></p><p>  if(key2==0)</p><p><b>  {</b></p><p>  delayms(10);</p><p>  if(key2

32、==0)</p><p><b>  {</b></p><p>  shi--;if(shi<0) shi=23;</p><p>  shih=shi/10;shil=shi%10;</p><p>  if(shi==0) shi=24;</p><p>  while(!key2);

33、 </p><p><b>  }</b></p><p><b>  }</b></p><p>  if(key3==0)</p><p><b>  {</b></p><p>  delayms(10);</p><p>

34、  if(key3==0)</p><p><b>  {</b></p><p>  fen++;fenh=fen/10;fenl=fen%10;</p><p>  if(fen==60) fen=0;</p><p>  while(!key3);</p><p><b>  }&

35、lt;/b></p><p><b>  }</b></p><p>  if(key4==0)</p><p><b>  {</b></p><p>  delayms(10);</p><p>  if(key4==0)</p><p>&

36、lt;b>  {</b></p><p>  fen--;if(fen<0) fen=59;</p><p>  fenh=fen/10;fenl=fen%10;</p><p>  if(fen==0) fen=60;while(!key4);</p><p><b>  }</b></p

37、><p><b>  }</b></p><p>  if(key5==0)</p><p><b>  {</b></p><p>  delayms(10);</p><p>  if(key5==0)</p><p><b>  {<

38、/b></p><p>  miao++;miaoh=miaoh/10;miaol=miao%10;</p><p>  if(miao==60) miao=0;while(!key5);</p><p><b>  }</b></p><p><b>  }</b></p>&

39、lt;p>  if(key6==0)</p><p><b>  {</b></p><p>  delayms(10);</p><p>  if(key6==0)</p><p><b>  {</b></p><p>  miao--;if(miao<0)

40、miao=59;</p><p>  miaoh=miaoh/10;miaol=miao%10;</p><p>  if(miao==0) miao=60;while(!key6);</p><p><b>  }</b></p><p><b>  }</b></p><p&

41、gt;  if(key7==0)</p><p><b>  { </b></p><p>  delayms(10); </p><p>  if(key7==0)</p><p><b>  {</b></p><p>  while(key7==0);</p

42、><p>  if(flag==1)</p><p><b>  flag=0;</b></p><p><b>  else</b></p><p><b>  flag=1;</b></p><p><b>  }</b></

43、p><p><b>  }</b></p><p><b>  }</b></p><p>  void main()</p><p><b>  {</b></p><p>  TMOD=0x01;//工作方式0</p><p> 

44、 TH0=(65536-9174)/256;//裝初值,11.0592晶振定時1ms為9174</p><p>  TL0=(65536-9174)%256;//機器周期為12*(1/11059200)=1.09us</p><p>  //N=1ms/1.09us=9174</p><p><b>  EA=1;</b></p>

45、<p><b>  ET0=1;</b></p><p><b>  TR0=1;</b></p><p>  while(1) </p><p><b>  {</b></p><p>  keyscan();</p><p>  

46、if(flag==1)</p><p><b>  { </b></p><p>  dula=1;</p><p>  diaplay();</p><p><b>  dula=0;</b></p><p>  delayms(2);</p>&

47、lt;p><b>  wela=1;</b></p><p><b>  P0=0x00;</b></p><p><b>  wela=0;</b></p><p><b>  }</b></p><p><b>  else</b

48、></p><p>  diaplay(shih,shil,fenh,fenl,miaoh,miaol,ph,pl);</p><p><b>  }</b></p><p><b>  }</b></p><p>  void T0_time() interrupt 1</p>

49、<p><b>  {</b></p><p>  TH0=(65536-9174)/256;</p><p>  TL0=(65536-9174)%256;</p><p><b>  num1++;</b></p><p>  if(num1==1)//跑秒</p>

50、<p><b>  {</b></p><p>  num1=0;p++;</p><p><b>  ph=p/10;</b></p><p><b>  pl=p%10;</b></p><p>  if(p==100) p=0,miao++;</p>

51、<p>  if(miao==60)miao=0,fen++;</p><p>  miaoh=miao/10;</p><p>  miaol=miao%10;</p><p>  if(fen==60)fen=0,shi++;</p><p>  fenh=fen/10;</p><p>  f

52、enl=fen%10;</p><p>  if(shi==24)shi=0;</p><p>  shih=shi/10;</p><p>  shil=shi%10;</p><p><b>  }</b></p><p><b>  }</b></p>

53、<p><b>  四、心得體會</b></p><p>  首先要感謝張老師對程序的指導與調試,特別是學到了對按鍵消抖的處理方法,按照按鍵上升沿的特點對按鍵進行消抖,還有就是對程序整體設計思路的提高,讓主要的功能分成幾個部分來進行判斷,而不是全部都放在一些想要實現的子程序中根據自己的意愿來實現,要對程序整體的首先要考慮的成熟和完善。這次的課程設計,總體的來說對于一個程序的設計

54、的能力有了更大的提高,一個再簡單的程序,牽扯到的知識是方方面面的,所以對綜合能力也有一定的要求。以下是設計各個模塊時想到的考慮到的方面,分類進行描述。</p><p>  1、硬件配置:從開始的晚上向大四借到的51單片機開始,這個單片機板子是沒有用過的,于是要來了開發(fā)板電路圖,了解單片機的GPIO,然后結合電路圖開始構思,根據設計要求,所需開發(fā)板上的硬件有:51芯片、數碼管、驅動數碼管的74HC573的兩塊芯片&

55、lt;/p><p>  然后看開發(fā)板電路圖對GPIO進行配置,根據電路圖,首先用杜邦線將PO口的8位與573口想接,然后對兩片573的上拉使能端(即段選、位選)進行配置、截至單片機P2^0口和P2^1口</p><p><b>  2、設計思路:</b></p><p>  利用單片機的計數器,產生出相當準確的時間模值,可以通過累加進位的辦法產生,

56、跑秒級時間、秒、分、時</p><p><b>  顯示時間</b></p><p>  然后設計按鍵、可以對時間的時、分、秒,來調整時間</p><p>  其次,跑秒,與時間顯示設計在一起,當跑秒記到最大值然后向秒進位,并且設置停止鍵顯示當前時間,可實現跑秒的功能</p><p>  最后是如何顯示當前的時間,注意到

57、鎖存器的配置功能,硬件電路本身OE=0,當LE=1,Q=D時,顯示值為當前值,可實現動態(tài)顯示功能。當LE=0,Q=Q*時,當前的顯示值只與最后一次所存的數據有關,可以實現按鍵按下,靜態(tài)顯示的功能</p><p>  74HC573功能圖:</p><p>  3、軟件編寫、調試:</p><p>  軟件的編寫、調試需要keil和STC-ISP V31兩個軟件來實

58、現,一個程序的編寫,是對一個個功能逐個實現,各個擊破來編寫的,編寫程序的時候,需要編寫之后生成hex文件,查看自己編寫是所要達到顯示的狀態(tài),與單片機程序下載進去之后所顯示的狀態(tài),是否一致,若不一致,則應回過頭來,檢查硬件的配置管腳,也可用萬用表示波器來檢測的狀態(tài),反復調試反復驗證,會得到自己構思讓單片機按照自己所想,所顯示的結果。一個程序是不可能一次性編寫成功的,即使顯示功能完好,還有很大的不足可以提高,例如可以再對程序資源的使用進行優(yōu)

59、化,對程序的編寫進行注釋改寫,使程序更為易懂、熟練</p><p><b>  4、改進</b></p><p>  程序設計時欠考慮工作在方式0,仍需改進的使單片機工作在方式2</p><p>  附錄1:開發(fā)板硬件電路圖</p><p>  用杜邦線將P0口依次與數碼管J2口相接,J2兩個接口接至P2^0和P2^1構

溫馨提示

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

評論

0/150

提交評論