單片機課程設計---電子秒表設計_第1頁
已閱讀1頁,還剩10頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、<p>  單片機原理及系統(tǒng)課程設計</p><p><b>  摘 要</b></p><p>  本設計是一個基于單片機的電子秒表設計。設計采用AT89C51單片機和四位一體的LED數(shù)碼管,通過單片機內(nèi)部定時器/計數(shù)器定時的原理來達到秒表的計時功能。設計中秒表的開始,暫停功能是通過控制單片機內(nèi)部定時器的打開與關閉來實現(xiàn)的。最后采用proteus仿真軟件

2、將軟件與硬件相結合來模擬實現(xiàn)秒表的各項功能。</p><p>  關鍵詞:單片機;秒表;功能</p><p><b>  Abstract</b></p><p>  This design is a microcontroller-based electronic stopwatch design. Design using AT89C51

3、microcontroller and four-in-one LED digital tube, through the microcontroller internal timer / counter timing principle to achieve a stopwatch timing function. Design of the stopwatch to start, pause function is achieved

4、 by opening and closing of the control microcontroller internal timer. Finally, proteus simulation software to software and hardware combination to simulate the various functions of the stopw</p><p>  Keywor

5、d :SCM ,Stopwatch, functions</p><p>  基于單片機的秒表設計</p><p><b>  1 引言</b></p><p>  隨著現(xiàn)代科技的發(fā)展,自動化理念已經(jīng)深入到了人們生活的各個領域。本課程設計是在學習先修課程《單片機原理與系統(tǒng)設計》之后,為加強對學生系統(tǒng)設計和應用能力的培養(yǎng)而開設的綜合設計訓練環(huán)節(jié)。

6、本設計是一個基于單片機的電子秒表設計,要求實現(xiàn)開始,暫停與復位功能。精確度為0.1s,最大計時時間為999.9s。設計結合了軟件和硬件的一些相關知識。通過軟件編寫,硬件調試及仿真來實現(xiàn)。提高了大家的動手能力,做到了學以致用。</p><p><b>  2 設計方案及原理</b></p><p><b>  2.1 設計方案</b></p&

7、gt;<p>  本設計通過單片機內(nèi)部定時計數(shù)的原理來實現(xiàn)電子秒表的功能。首先將計數(shù)初值設定為19664,當計數(shù)溢出后便會產(chǎn)生一個中斷,繼而執(zhí)行中斷程序,當中斷次數(shù)達到兩次則表示0.1秒時間到,以此類推便可擴展到1秒,10秒等。三個按鍵功能用軟件查詢即可實現(xiàn),通過對定時器的打開和關閉來實現(xiàn)秒表的開始和暫停,在設計中我用一個鍵來控制開始和暫停,方法是每次掃描到該按鍵按下后便對TR位取反。用另一個按鍵來控制秒表的清零功能,方法

8、是當檢測到該按鍵被按下后便使num=0,從而使數(shù)碼管顯示為零。</p><p><b>  2.2 系統(tǒng)框圖</b></p><p>  系統(tǒng)框圖如圖1所示。</p><p><b>  圖1 系統(tǒng)結構框圖</b></p><p><b>  2.3 系統(tǒng)原理</b></

9、p><p>  該系統(tǒng)在工作時從頭開始執(zhí)行程序,首先掃描是否有鍵按下,如果沒有掃描到按鍵信號,則系統(tǒng)一直執(zhí)行循環(huán)函數(shù);當掃描到有按鍵信號輸入后單片機便開始執(zhí)行按鍵子程序,然后依次由P0口和P2口送出相應的段選信號和位選信號,從而點亮數(shù)碼管,顯示當前的計數(shù)值。</p><p><b>  3 硬件設計</b></p><p><b>  3

10、.1 芯片選擇</b></p><p>  在本設計中我采用了AT89C51單片機。</p><p>  3.2 硬件連接方法</p><p>  由于該設計要求數(shù)碼管顯示,所以我選用P0口作為段選端,但是P0口內(nèi)部沒有上拉電阻,因此不能輸出正常的高低電平,所以外接了一個九腳10K的排阻,排阻的公共端接單片機Vcc。用P2.4~P2.7分別接數(shù)碼管的1,

11、2,3,4四個位選端。用P3.4,P3.5口分別接兩個開關,開關另一端接低電平(地),當按下后便會有一個低電平輸入。用XTAL1與XTAL2外接一個11.0592MHZ的晶振電路,為單片機工作提供時鐘脈沖。在RST口外接一個復位電路,實現(xiàn)單片機的復位功能。</p><p>  硬件原理連接圖如圖2所示。</p><p><b>  3.3 硬件原理圖</b></

12、p><p>  硬件連接圖如圖2所示。</p><p>  圖2 硬件連接原理圖</p><p>  由圖可知這個系統(tǒng)由單片機最小系統(tǒng),四位一體數(shù)碼管,排阻以及限流電阻等元件組成。其中單片機外部晶振為單片機提供11.0592MHZ的時鐘脈沖。單片機的P0口為數(shù)碼管提供段選信號,P2.4~P2.7口為數(shù)碼管提供位選信號。兩個按鈕一端分別接單片機的P3.4與P3.5口,另一

13、端接地,按下時為單片機輸入低電平。</p><p><b>  4 軟件設計</b></p><p><b>  4.1 程序流程圖</b></p><p>  在本設計中程序部分是由主程序和子程序構成的,主程序流程圖如圖3所示。子程序流程圖如圖4所示。</p><p>  圖3 主程序流程圖

14、 圖4 顯示子程序流程圖</p><p><b>  4.2 程序結構</b></p><p>  本設計在軟件方面我用C語言編程,程序共分為了三大模塊:按鍵模塊,顯示模塊與計數(shù)模塊。其中按鍵模塊與顯示模塊是用軟件查詢的方式來完成的,計數(shù)模塊是用中斷的方式來完成的。按鍵模塊是一用個keyscan()函數(shù)來實現(xiàn)的,其中用了兩個按鍵ke

15、y1與key2,key1用來給秒表清零,key2用來控制秒表的開始和暫停功能。顯示模塊式用一個display()函數(shù)來實現(xiàn)的,在程序開頭定義了一個code table[]數(shù)組,內(nèi)部元素為0到9的共陰極數(shù)碼管代碼,通過查詢數(shù)組的方式來點亮數(shù)碼管。計數(shù)模塊是用一個中斷服務程序來完成的,用單片機內(nèi)部的定時器/計數(shù)器來計數(shù),設定一個合適的初值即可實現(xiàn)計數(shù)功能。</p><p><b>  5 仿真調試</

16、b></p><p><b>  5.1 問題分析</b></p><p>  在仿真過程中遇到了很多問題,這些問題主要集中在軟件方面。首先是數(shù)碼管的顯示錯誤,經(jīng)測試發(fā)現(xiàn)數(shù)碼管的顯示代碼輸入有誤。然后在擴展的小數(shù)點不會一直顯示,后來將燒亮小數(shù)點的程序放入循環(huán)中問題就解決了。</p><p><b>  5.2 仿真結果</

17、b></p><p>  設計完成后我在proteus中進行了仿真,仿真結果如圖4所示。</p><p><b>  圖4 仿真結果</b></p><p><b>  6 實物調試</b></p><p><b>  6.1 問題分析</b></p>&l

18、t;p>  由于電路板是自己焊接的,所以在剛開始調試的時候出現(xiàn)了很多問題。首先是數(shù)碼管B段始終不亮,因此我猜測是線路接觸不良,然后我用萬用表將連接B段的每一條線路都測了一遍,最后發(fā)現(xiàn)是控制數(shù)碼管B段的單片機接口與限流電阻未接觸而導致的,經(jīng)過重新焊過以后問題就解決了。然后還有一個問題是數(shù)碼管的E段與F段總是顯示混亂,后經(jīng)過萬用表測試發(fā)現(xiàn)是這兩段在焊接是發(fā)生了短路。</p><p><b>  6.2

19、 調試結果</b></p><p>  仿真成功后通過仿真結果焊接了一個實物,實物調試結果如圖5所示。</p><p><b>  圖5 實物調試</b></p><p><b>  7 總結</b></p><p>  本設計結合了軟件和硬件的一些相關知識。在硬件方面,用到了一個單片機

20、最小系統(tǒng)板,一個四位一體的七段LED數(shù)碼管,一個九腳10K的排阻,八個460歐姆的電阻。其中數(shù)碼管用來作為顯示工具;九腳10K的排阻作為P0口的上拉電阻;八個460歐姆的電阻作為限流電阻,以防通過數(shù)碼管電流過大而被被燒壞。</p><p>  在軟件方面我用C語言編程,程序共分為了三大模塊:按鍵模塊,顯示模塊與計數(shù)模塊。其中按鍵模塊與顯示模塊是用軟件查詢的方式來完成的,計數(shù)模塊是用中斷的方式來完成的。按鍵模塊是一

21、用個keyscan()函數(shù)來實現(xiàn)的,其中用了兩個按鍵key1與key2,key1用來給秒表清零,key2用來控制秒表的開始和暫停功能。顯示模塊式用一個display()函數(shù)來實現(xiàn)的,在程序開頭定義了一個code table[]數(shù)組,內(nèi)部元素為0到9的共陰極數(shù)碼管代碼,通過查詢數(shù)組的方式來點亮數(shù)碼管。計數(shù)模塊是用一個中斷服務程序來完成的,用單片機內(nèi)部的定時器/計數(shù)器來計數(shù),設定一個合適的初值即可實現(xiàn)計數(shù)功能。</p><

22、;p><b>  參考文獻</b></p><p>  [1] 王思明,張金敏,茍軍年等.單片機原理及應用系統(tǒng)設計[M].北京:科學出版社,2012.</p><p>  [2] 郭天祥.51單片機C語言教程[M].北京:電子工業(yè)出版社,2009.</p><p><b>  附錄A 源程序</b></p>

23、;<p>  #include<reg52.h> //52系列單片機頭文件</p><p>  #define uchar unsigned char //宏定義</p><p>  #define uint unsigned int</p><p>  sbit N0=P

24、2^4;</p><p>  sbit N1=P2^5; //申明U1鎖存器的鎖存端</p><p>  sbit N2=P2^6;</p><p>  sbit N3=P2^7;</p><p>  sbit key1=P3^4;</p><p>  sbit key2

25、=P3^5;</p><p>  uchar code table[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};</p><p>  void delayms(uint); //聲明延時函數(shù)</p><p>  void display(uchar,uchar,uc

26、har,uchar); //聲明顯示函數(shù) </p><p>  void keyscan(); //聲明按鍵函數(shù)</p><p>  uint num,num3;</p><p>  uchar num1,num2,qian,bai,shi,ge; //變量聲明<

27、/p><p>  void main() //主函數(shù)入口</p><p><b>  {</b></p><p>  TMOD=0x11; //設置T0,T1定時器</p><p>  TH1=(65536-45872)/256;&

28、lt;/p><p>  TL1=(65536-45872)%256;</p><p>  EA=1; //開總中斷 </p><p>  ET1=1; //開啟定時器T1中斷</p><p><b> 

29、 TR1=0;</b></p><p>  while(1) //程序停在這里等待中斷的發(fā)生,這個大循環(huán)也是實現(xiàn)數(shù)據(jù)顯示的主體循環(huán)</p><p><b>  {</b></p><p>  keyscan();</p><p>  qian=num3/100

30、0;</p><p>  bai=(num3-qian*1000)/100;</p><p>  shi=(num3-1000*qian-100*bai)/10;</p><p><b>  ge=num1;</b></p><p><b>  P0=0x80;</b></p><

31、;p><b>  N2=0;</b></p><p>  delayms(5);</p><p><b>  N2=1;</b></p><p><b>  P0=0x00;</b></p><p>  display(qian,bai,shi,ge);</p>

32、;<p><b>  }</b></p><p><b>  }</b></p><p>  void display(uchar qian,uchar bai,uchar shi,uchar ge) //數(shù)碼管顯示子函數(shù)</p><p><b>  {</b></p>

33、<p>  P0=table[qian];</p><p><b>  N0=0;</b></p><p>  delayms(5);</p><p><b>  N0=1;</b></p><p><b>  P0=0x00;</b></p><

34、;p>  P0=table[bai];</p><p><b>  N1=0;</b></p><p>  delayms(5);</p><p><b>  N1=1;</b></p><p><b>  P0=0x00;</b></p><p>

35、;  P0=table[shi];</p><p><b>  N2=0;</b></p><p>  delayms(5);</p><p><b>  N2=1;</b></p><p><b>  P0=0x00;</b></p><p>  P0

36、=table[ge];</p><p><b>  N3=0;</b></p><p>  delayms(5);</p><p><b>  N3=1;</b></p><p><b>  P0=0x00;</b></p><p><b> 

37、 }</b></p><p>  void delayms(uint xms) //延時子函數(shù)</p><p><b>  {</b></p><p><b>  uint i,j;</b></p><p>  for(i=xms;i>0;i--)

38、//i=xms即延時約xms毫秒</p><p>  for(j=110;j>0;j--);</p><p><b>  }</b></p><p>  void T1_time()interrupt 3 //定時器T1,中斷序號為3</p><p><b>  {</b></p

39、><p>  TH1=(65536-45872)/256; //重裝初值</p><p>  TL1=(65536-45872)%256; </p><p><b>  num2++;</b></p><p>  if(num2==2) //如果到了2次,說明0.1秒的時間到</p&g

40、t;<p><b>  {</b></p><p>  num2=0; //然后把num2清零重新再計2次</p><p><b>  num1++;</b></p><p>  if(num1==10)</p><p><b>  num1=0;&

41、lt;/b></p><p><b>  num++;</b></p><p>  if(num==1000)</p><p><b>  num=0;</b></p><p><b>  num3++;</b></p><p>  if(num3

42、==10000)</p><p><b>  num3=0;</b></p><p><b>  } </b></p><p><b>  }</b></p><p>  void keyscan() //按鍵子函數(shù)</p>&

43、lt;p><b>  {</b></p><p>  if(key1==0) //清零</p><p><b>  {</b></p><p>  delayms(5); //延時去抖</p><p>  if(key1==

44、0) </p><p><b>  {</b></p><p>  while(!key1) //等待按下</p><p><b>  { </b></p><p>  TR1=1; //定時器TR1打開</p><p><b>  

45、num3=0;</b></p><p>  num1=0; //送數(shù)據(jù)num=0</p><p>  TR1=0; //定時器TR1關閉</p><p><b>  }</b></p><p><b>  }</b></p><p>&l

46、t;b>  }</b></p><p>  if(key2==0) //暫停和開始</p><p><b>  {</b></p><p>  delayms(5);</p><p>  if(key2==0)</p><p><b&

47、gt;  {</b></p><p>  while(!key2);</p><p>  TR1=~TR1; //每次按下,TR1的狀態(tài)時相反的</p><p><b>  }</b></p><p><b>  }</b></p><p><b>

溫馨提示

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

評論

0/150

提交評論