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

下載本文檔

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

文檔簡介

1、<p>  單片機原理及系統(tǒng)課程設(shè)計</p><p>  專 業(yè): 自動化 </p><p>  班 級: </p><p>  姓 名: </p><p>  學(xué) 號: </p><p>  指導(dǎo)教師:

2、 </p><p>  2012 年 7月 1日</p><p><b>  1引言</b></p><p>  隨著單片機技術(shù)的飛速發(fā)展,在其推動下,現(xiàn)代的電子產(chǎn)品幾乎滲透到了社會的各個領(lǐng)域,有力地推動了社會生產(chǎn)力的發(fā)展和社會信息化程度的提高,同時也使現(xiàn)代電子產(chǎn)品性能進一步提高。</p><p>  時間就是金錢

3、、時間就是生命、時間就是勝利……,準(zhǔn)確的掌握時間和分配時間對人們來說至關(guān)重要,時鐘是我們生活中必不可少的工具。電子時鐘的設(shè)計方法有很多種,但是基于單片機并通過LCD顯示的電子時鐘具有編程靈活、精確度高、便于攜帶、顯示直觀等特點。在這里我們將已學(xué)過的比較零散的數(shù)字電路的知識有機的、系統(tǒng)的聯(lián)系起來用于實際,來培養(yǎng)我們的綜合分析和設(shè)計電路,寫程序、調(diào)試電路和基于proteus仿真的能力。</p><p>  利用AT8

4、9C51單片機對時鐘芯片進行讀寫操作并通過1602字符液晶顯示實時時鐘信息,這樣便構(gòu)成了一個單片機電子時鐘。</p><p><b>  2 設(shè)計方案及原理</b></p><p>  2.1實現(xiàn)時鐘計時的基本方法</p><p>  利用MCS-51系列單片機的可編程定時/計數(shù)器、中斷系統(tǒng)來實現(xiàn)時鐘計數(shù)。</p><p&g

5、t;  (1) 把定時器T/C0設(shè)為工作方式1,定時時間為50ms,則計數(shù)溢出20次即得時鐘計時最小單位秒;</p><p>  (2) 采用中斷方式進行溢出次數(shù)累計,計滿20次為秒計時(1秒);</p><p>  (3) 從秒到分和從分到時的計時是通過累加和數(shù)值比較實現(xiàn)。</p><p>  2.2電子時鐘的時間顯示</p><p>  

6、用1個1602字符液晶顯示時分秒。顯示方式為:XX:XX:XX,由左向右分別為:時、分、秒,初值為23:59:59。完成顯示一秒01一直加至59,再恢復(fù)為00;分加1,由00至01,一直加至59,再恢復(fù)為00;時加1,由00至01,一直加至24,再回復(fù)為00。</p><p>  2.3電子時鐘的時間調(diào)整</p><p>  電子時鐘設(shè)置4個按鍵通過程序控制來完成電子時鐘的時間調(diào)整。SET

7、time鍵按下進入校時狀態(tài),時鍵用來調(diào)整小時,分鍵用來調(diào)整分鐘,OK鍵按下退出校時狀態(tài)。 </p><p><b>  3 硬件設(shè)計</b></p><p>  用AT89C51的P0口接LCD液晶顯示器的8個雙向數(shù)據(jù)口,P2.0、P2.1、P2.2分別接LCD的3個控制端RS、RW、E ,P1.0~P1.3分別接電子時鐘的校時按鍵,RST引腳接手動復(fù)位電路。<

8、;/p><p>  硬件電路連接圖如圖1所示。</p><p>  圖1 電子時鐘硬件仿真圖</p><p><b>  4軟件設(shè)計</b></p><p>  4.1軟件設(shè)計流程圖</p><p>  在編程上,首先進行了初始化,在主程序開始定義了一組固定單元用來儲存計數(shù)的時:分:秒,在顯示初值之

9、后,進入主循環(huán)。在主程序中,對不同的按鍵進行掃描,實現(xiàn)計時,時間調(diào)整,復(fù)位清零等功能,系統(tǒng)總流程圖如圖2所示。</p><p>  圖2 系統(tǒng)總流程圖</p><p>  電子時鐘的計時是利用MCS-51系列單片機的可編程定時/計數(shù)器、中斷系統(tǒng)來實現(xiàn)時鐘計數(shù)的,把定時器T/C0設(shè)為工作方式1,定時時間為50ms,則計數(shù)溢出20次即得時鐘計時最小單位秒,從秒到分和從分到時的計時是通過累加和

10、數(shù)值比較實現(xiàn)。</p><p>  電子鐘的計時、校時流程圖如圖3、4所示。</p><p>  圖4 校時程序流程圖 </p><p>  圖3 計時程序流程</p><p><b>  4.2仿真結(jié)果</b></p><p>  電子時鐘主要的設(shè)計要求是能夠?qū)崿F(xiàn)時鐘的一般功能,以及包括

11、時間的調(diào)整功能,這個基于單片機的電子時鐘基本上實現(xiàn)了上述功能,能夠通過時間調(diào)整電路對時間進行調(diào)整以及復(fù)位。</p><p>  基于proteus的電子時鐘仿真電路如圖5所示。</p><p>  圖5 電子時鐘的仿真結(jié)果圖</p><p><b>  5總結(jié)</b></p><p>  本次課程設(shè)計經(jīng)過了三個階段的程

12、序設(shè)計,第一階段是了解數(shù)字鐘的工作方式及其原理,確定設(shè)計的方向與方法以及確定設(shè)計過程中需要的軟件及工具。第二階段是熟悉用keil軟件編寫C語言的方法,這一階段側(cè)重于對C語言的基本掌,在這一階段中因為對C語言不太熟悉,所以顯得相對笨拙,進展也會相對緩慢。第三階段是學(xué)校單片機AT89C51芯片的工作原理,并設(shè)計原理圖,在Proteus里畫好原理圖然后加載程序后進行仿真驗證??傮w上,本設(shè)計已經(jīng)達到了預(yù)期目標(biāo),在軟件上做了相關(guān)的功能仿真和時序仿

13、真,最終實現(xiàn)了簡易的電子時鐘的正確運行。</p><p>  在本次課程設(shè)計中,最初遇到了很多的棘手問題,比如如何實現(xiàn)定時器的計數(shù),如何在LCD液晶顯示器上顯示時分秒等。通過查閱大量資料和虛心請教他人慢慢解決掉了設(shè)計過程中遇到的這一系列的問題。但也受益匪淺,不僅對自己在大學(xué)三年時間里所學(xué)的知識進行回顧與復(fù)習(xí),對單片機知識也有更進一步的理解,并積累了一定寶貴的經(jīng)驗和培養(yǎng)了自己的動手能力和運用所學(xué)知識解決實際問題的能

14、力。通過這次課程設(shè)計,我們知道了理論和實際的距離,也知道了理論和實際想結(jié)合的重要性,也從中得知了很多書本上無法得知的知識。自己今后將會更加的把理論知識和實際應(yīng)用結(jié)合起來,提高自己的能力。</p><p><b>  6參考文獻</b></p><p>  [1] 李華,王思明,張金敏.單片機原理及應(yīng)用[M].蘭州大學(xué)出版社,2001.</p><p

15、>  [2] 譚浩強.C程序設(shè)計(第二版)[M].清華大學(xué)出版社,2003.</p><p>  [3] 及力.Protel 99 SE原理圖與PCB設(shè)計教程[M].北京:電子工業(yè)出社,2007.</p><p>  [4] 邢小杰.單片機電子時鐘設(shè)計[J].中國科技博覽,2009,3(12):15-18.</p><p><b>  附錄</

16、b></p><p>  #include<reg51.h></p><p>  #include<intrins.h></p><p>  sbit RW=P2^1;</p><p>  sbit RS=P2^0;</p><p>  sbit E=P2^2;</p>&l

17、t;p>  sbit K1=P1^0;</p><p>  sbit K2=P1^1;</p><p>  sbit K3=P1^2;</p><p>  sbit K4=P1^3;</p><p>  bit LK1=0,LK2=0,LK3=0,LK4=0;</p><p>  bit ReadRTC_Fla

18、g;</p><p>  unsigned char tmpdate[7]={59,59,23}; //秒分時 </p><p>  unsigned char l_tmpdisplay[20];</p><p>  unsigned int i;</p><p>  char code table[]={"0123456789:

19、"};</p><p>  /******************************************************************/</p><p>  /* 定時器0初始化 */</p><p>  /************

20、******************************************************/</p><p>  void InitTIMER0(void)</p><p><b>  {</b></p><p>  TMOD=0x01; //定時器設(shè)置16位</p><p>  TH0=(65535

21、-50000)/256; //初始化值</p><p>  TL0=(65535-50000)%256;</p><p><b>  ET0=1;</b></p><p><b>  TR0=1;</b></p><p><b>  EA=1;</b></p>

22、<p><b>  }</b></p><p><b>  // 延時子程序</b></p><p>  delay(int ms)</p><p>  { </p><p><b>  int k;</b><

23、/p><p>  while(ms--)</p><p><b>  {</b></p><p>  for(k = 0; k< 250; k++)</p><p><b>  {</b></p><p><b>  }</b></p>

24、<p><b>  }</b></p><p><b>  }</b></p><p><b>  /*寫命令*/</b></p><p>  void write_ord(char ord)</p><p><b>  {</b></p&

25、gt;<p><b>  RW=0;</b></p><p><b>  RS=0;</b></p><p><b>  P0=ord;</b></p><p><b>  delay(1);</b></p><p><b>  E

26、=1;</b></p><p><b>  delay(1);</b></p><p><b>  E=0;</b></p><p><b>  }</b></p><p><b>  /*寫數(shù)據(jù)*/</b></p><p&

27、gt;  void write_date(char date)</p><p><b>  {</b></p><p><b>  RW=0;</b></p><p><b>  RS=1;</b></p><p><b>  P0=date;</b>&l

28、t;/p><p><b>  delay(1);</b></p><p><b>  E=1;</b></p><p><b>  delay(1);</b></p><p><b>  E=0;</b></p><p><b&g

29、t;  }</b></p><p>  /*設(shè)定顯示位置*/</p><p>  lcd_pos(unsigned char pos)</p><p>  { </p><p>  write_ord(pos|0x80);</p><p><b>

30、  }</b></p><p>  /*顯示器初始化*/</p><p>  void init()</p><p><b>  {</b></p><p><b>  E=0;</b></p><p>  write_ord(0x38); //00111000&

31、lt;/p><p><b>  delay(1);</b></p><p>  write_ord(0x0c); //00001100</p><p><b>  delay(1);</b></p><p>  write_ord(0x06); //00000110</p><p&g

32、t;<b>  delay(1);</b></p><p>  write_ord(0x01); //00000001</p><p><b>  delay(1);</b></p><p><b>  }</b></p><p><b>  /*主函數(shù)*/</

33、b></p><p>  void SETtime()</p><p><b>  {</b></p><p>  if(LK1==1&&K1==0)</p><p><b>  TR0=0;</b></p><p><b>  LK1=K1;

34、</b></p><p><b>  }</b></p><p>  void OKtime()</p><p><b>  {</b></p><p>  if(LK4==1&&K4==0)</p><p><b>  TR0=1;&l

35、t;/b></p><p><b>  LK4=K4;</b></p><p><b>  }</b></p><p>  void shi()</p><p><b>  {</b></p><p>  if(LK2==1&&K2

36、==0&&TR0==0)</p><p>  tmpdate[2]++;</p><p><b>  LK2=K2;</b></p><p><b>  }</b></p><p>  void fen()</p><p><b>  {</b

37、></p><p>  if(LK3==1&&K3==0&&TR0==0)</p><p>  tmpdate[1]++;</p><p><b>  LK3=K3;</b></p><p><b>  }</b></p><p>  v

38、oid TimePP()</p><p><b>  {</b></p><p>  if(tmpdate[0]>=60) //秒</p><p><b>  {</b></p><p>  tmpdate[0]=0;</p><p>  tmpdate[1]

39、++;</p><p><b>  }</b></p><p>  if(tmpdate[1]>=60) //分</p><p><b>  {</b></p><p>  tmpdate[1]=0;</p><p>  tmpdate[2]++;</p&

40、gt;<p><b>  }</b></p><p>  if(tmpdate[2]>=24) //時</p><p><b>  {</b></p><p>  tmpdate[2]=0;</p><p>  tmpdate[5]++;</p><p

41、><b>  }</b></p><p><b>  }</b></p><p>  void TimeCH()</p><p><b>  {</b></p><p>  if(tmpdate[2]>=24)</p><p>  tmpda

42、te[2]=0;</p><p>  if(tmpdate[1]>=60)</p><p>  tmpdate[1]=0;</p><p>  l_tmpdisplay[7]=tmpdate[2]/10; //數(shù)據(jù)的轉(zhuǎn)換</p><p>  l_tmpdisplay[6]=tmpdate[2]%10;</p>&

43、lt;p>  l_tmpdisplay[5]=10;//加入"-"</p><p>  l_tmpdisplay[4]=tmpdate[1]/10;</p><p>  l_tmpdisplay[3]=tmpdate[1]%10;</p><p>  l_tmpdisplay[2]=10;</p><p>  

44、l_tmpdisplay[1]=tmpdate[0]/10;</p><p>  l_tmpdisplay[0]=tmpdate[0]%10;</p><p><b>  }</b></p><p>  void display(unsigned char add,char Data)</p><p><b>

45、  {</b></p><p>  lcd_pos(add); </p><p>  write_date(Data);</p><p><b>  }</b></p><p>  /**************************************/</p><p>  v

46、oid main()</p><p><b>  {</b></p><p><b>  init();</b></p><p>  InitTIMER0();</p><p><b>  while(1)</b></p><p><b>  

47、{</b></p><p>  SETtime();</p><p><b>  OKtime();</b></p><p><b>  shi();</b></p><p><b>  fen();</b></p><p>  if(Rea

48、dRTC_Flag)</p><p><b>  {</b></p><p>  ReadRTC_Flag=0;</p><p>  tmpdate[0]++;</p><p>  TimePP(); </p><p><b>  }</b></p><p

49、><b>  TimeCH();</b></p><p>  display(0x4d,table[l_tmpdisplay[0]]);</p><p>  display(0x4c,table[l_tmpdisplay[1]]);</p><p>  display(0x4b,table[l_tmpdisplay[2]]);</p

50、><p>  display(0x4a,table[l_tmpdisplay[3]]);</p><p>  display(0x49,table[l_tmpdisplay[4]]);</p><p>  display(0x48,table[l_tmpdisplay[5]]);</p><p>  display(0x47,table[l_tm

51、pdisplay[6]]);</p><p>  display(0x46,table[l_tmpdisplay[7]]);</p><p><b>  }</b></p><p><b>  }</b></p><p>  /************************************

52、******************************/</p><p>  /* 定時器中斷函數(shù) */</p><p>  /******************************************************************/</p>&l

53、t;p>  void tim(void) interrupt 1 using 1 //中斷,用于數(shù)碼管掃描</p><p><b>  {</b></p><p>  unsigned char i;</p><p>  TH0=(65535-50000)/256; //初始化值</p&

54、gt;<p>  TL0=(65535-50000)%256;</p><p><b>  i++;</b></p><p><b>  if(i==20)</b></p><p><b>  {</b></p><p><b>  i=0;</b

溫馨提示

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

評論

0/150

提交評論