溫度測量及時鐘顯示的課程設(shè)計_第1頁
已閱讀1頁,還剩18頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、<p>  電子工藝課程設(shè)計報告</p><p>  題 目 溫度測量及時鐘顯示的設(shè)計 </p><p>  二O一二 年 五 月</p><p>  基于AT89S52單片機溫度測量及時鐘顯示設(shè)計</p><p><b>  摘要:</b></p><p>  本

2、設(shè)計主要是溫度測量及時鐘顯示的設(shè)計,由單片機AT89S52芯片和DS18B20芯片及1602液晶顯示為核心,輔以必要的電路來設(shè)計制作完成。 它是低功耗、高性能的CMOS型8位單片機。片內(nèi)帶有4KB的Flash存儲器,且允許在系統(tǒng)內(nèi)改寫或用編程器編程。另外, AT89S52的指令系統(tǒng)和引腳與51完全兼容,片內(nèi)有128B 的RAM、32條I/O口線、2個16位定時計數(shù)器、5個中斷源、一個全雙工串行口等。由于其功能的實現(xiàn)主要通過軟件編程來完成

3、,降低了硬件電路的復(fù)雜性,而且其成本也有所降低,所以在該設(shè)計中采用單片機利用AT89S52。并且AT89S52單片機結(jié)合1602液晶顯示器的設(shè)計,在顯示方面比數(shù)碼管更簡單,不用送段碼和位碼只需鍵入所要輸出的數(shù)字或單詞即可。</p><p>  關(guān)鍵字:AT89S52、DS18B20、數(shù)字鐘</p><p><b>  一、引言:</b></p><

4、p>  數(shù)字鐘是采用數(shù)字電路實現(xiàn)對時分秒數(shù)字顯示的計時裝置,廣泛用于個人家庭、辦公室等公共場所,已成為人們?nèi)粘I钪胁豢缮俚谋匦杵罚捎跀?shù)字集成電路的發(fā)展和石英晶體與振蕩器的廣泛應(yīng)用,使得數(shù)字鐘的精度遠遠超過老式鐘表,而且大大地擴展了鐘表原先的報時功能,這些的實現(xiàn)都是以鐘表數(shù)字化為基礎(chǔ)的。因此,研究數(shù)字鐘及擴大其應(yīng)用,有著非?,F(xiàn)實的意義。</p><p><b>  二、設(shè)計目的與要求</b

5、></p><p><b>  2.1設(shè)計目的</b></p><p>  ⑴.進一步掌握單片機的原理及其功能。學(xué)會利用單片機做一些簡單的電子 設(shè)計與制作。</p><p>  ⑵.熟悉DS18B230溫度傳感器的作用及其原理,會利用其進行溫度的測量。</p><p> ?、牵ㄟ^此次的電路焊接和調(diào)試提高自

6、己的動手及其分析問題的能力。</p><p><b>  2.2設(shè)計要求</b></p><p>  1.以MCS-51系列單片機為核心器件,組成一個電子時鐘系統(tǒng)。</p><p>  2.系統(tǒng)顯示器由4位LED數(shù)碼管組成,分別顯示時間值的小時和分,以24h(小時)計時方式。</p><p>  3.能夠使用按鍵開關(guān)隨時

7、對當前時間進行調(diào)整。</p><p>  2.3系統(tǒng)的主要功能</p><p>  通過DS18B20進行溫度的測量,再由一條I/0數(shù)據(jù)端口與單片機進行通信,最后將結(jié)果顯示在數(shù)碼管上,實現(xiàn)溫度檢測的功能,另外在單片機上編寫一個時鐘程序同時在顯示器上顯示出來,實現(xiàn)時鐘顯示的功能。</p><p><b>  小組分工情況</b></p>

8、;<p>  邢衛(wèi)國主要負責(zé)軟件部分,主要工作是編寫程序,畫電路圖。季琪源主要負責(zé)焊接電路與報告的撰寫,一起完成了本次課程設(shè)計的任務(wù)。</p><p>  三、設(shè)計方法步驟及設(shè)計原理</p><p><b>  3.1原理框圖</b></p><p>  為了實現(xiàn)LED顯示器的數(shù)字顯示,可以采用靜態(tài)顯示法和動態(tài)顯示法。由于靜態(tài)顯示

9、法需要數(shù)據(jù)鎖存器等硬件,接口復(fù)雜一些??紤]時鐘顯示只有4位,且系統(tǒng)沒有其他復(fù)雜的處理任務(wù),所以決定采用動態(tài)掃描法實現(xiàn)LED的顯示。單片機采用易購的AT89S52系列,這樣單片機可具有足夠的空余硬件資源實現(xiàn)其它的擴充功能。</p><p>  圖3—1總設(shè)計方框圖</p><p><b>  3.2原理說明</b></p><p>  采用AT8

10、9S52單片機,最小化應(yīng)用設(shè)計;采用共陰七段LED顯示器,P0口輸出段碼數(shù)據(jù),P1.0~P1.7口作列掃描輸出,P2.0,P2.1,P2.2,P2.3,P2.4,口接五個按鈕開關(guān),用以調(diào)時功能設(shè)置,P2.5口接溫度傳感器用于溫度的測量。為了提供共陰LED數(shù)碼管的驅(qū)動電壓,用9013三極管作電源驅(qū)動輸出。采用12MHz晶振,有利于提高通信波特率的準確性。為了提高驅(qū)動能力在P0口,P1口和數(shù)碼管之間要接上9013三極管,Proteus中不需

11、接也可以正常顯示,復(fù)位電路和晶振電路沒接不影響仿真。</p><p><b>  整體線路設(shè)計如下:</b></p><p>  圖3—2總設(shè)計原理圖</p><p>  3.3晶振及復(fù)位電路</p><p><b>  3.4 系統(tǒng)仿真</b></p><p>  點擊仿真

12、后默認顯示時間</p><p>  按下P2.3口上的開關(guān)后切換顯示溫度</p><p>  按下P2.4口上的開關(guān)后切換顯示時間</p><p>  四、軟件流程圖及程序設(shè)計</p><p><b>  (1)主程序</b></p><p>  本設(shè)計中,計時采用定時器T0中斷完成,其余狀態(tài)循環(huán)

13、調(diào)用顯示子程序,當端口開關(guān)按下時,轉(zhuǎn)入相應(yīng)功能程序。</p><p> ?。?)LED顯示子程序</p><p>  數(shù)碼管顯示的數(shù)據(jù)存放在內(nèi)存單元wei[0]- wei[7]中。其中 wei [0]- wei [1]存放時數(shù)據(jù),wei [2]- wei [3]存放分數(shù)據(jù),wei [4]- wei [5]存放秒數(shù)據(jù),每一地址單元內(nèi)均為十進制BCD碼。由于采用軟件動態(tài)掃描實現(xiàn)數(shù)據(jù)顯示功能,顯

14、示用十進制BCD碼數(shù)據(jù)的對應(yīng)碼段存放在ROM表(tab[11]中。顯示時,先取出wei [0]- wei [7]中的某一數(shù)據(jù),然后查得對應(yīng)的顯示用碼段,并從P0口輸出,P3口將對應(yīng)的數(shù)碼管選中供電,就能顯示該地址單元的數(shù)據(jù)值。</p><p>  (3)定時器T0中斷服務(wù)程序</p><p>  定時器T0用于時間計時。中斷進入后,時鐘計時累計中斷達1秒時,對秒計數(shù)單元進行加1操作。在計數(shù)

15、單元中采用十進制BCD碼計數(shù),滿60進位,T0中斷服務(wù)程序執(zhí)行。流程見下圖:</p><p><b>  圖4—1主程序流圖</b></p><p>  圖4—4 溫度轉(zhuǎn)換流程圖</p><p>  圖4—3 讀溫度流程圖</p><p>  四、系統(tǒng)調(diào)試及總結(jié)分析(附上實物照片)</p><p>

16、;  單片機應(yīng)用系統(tǒng)的調(diào)試包括硬件和軟件兩部分,但是他們并不能完全分開。一般的方法是排除明顯的硬件故障,再進行綜合調(diào)試,排除可能的軟/硬件故障。</p><p>  1.系統(tǒng)性能測試與功能說明</p><p>  走時:默認為走時狀態(tài),按24小時制分別顯示“時時.分分.秒秒”,時間會按實際時間以秒為最少單位變化。</p><p>  走時調(diào)整:按一下minute加一

17、分;對時進行調(diào)整,按一下hour加一小時,從而達到快速設(shè)定時間的目的。</p><p>  2.系統(tǒng)時鐘誤差分析</p><p>  時間是一個基本物理量,具有連續(xù)、自動流逝、不重復(fù)等特性。我國時間基準來自國家授時中心,人們?nèi)粘J褂玫臅r鐘就是以一定的精度與該基準保持同步的。結(jié)合時間概念和誤差理論,可以定義電子鐘的走時誤差S=S1-S2,S1表示程序?qū)嶋H運行計算所得的秒;S2表示客觀時間的標

18、準秒。S>0時表示電子鐘秒單元數(shù)值刷新滯后,即走時誤差為“慢”;反之,S<0表示秒單元數(shù)值的刷新超前,即走時誤差為“快”。</p><p>  本次設(shè)計的單片機電子鐘系統(tǒng)中,其誤差主要來源包括晶體頻率誤差,定時器溢出誤差,延遲誤差。晶體頻率產(chǎn)生震蕩,容易產(chǎn)生走時誤差;定時器溢出的時間誤差,本應(yīng)這一秒溢出,但卻在下一秒溢出,造成走時誤差;延遲時間過長或過短,都會造成與基準時間產(chǎn)生偏差,造成走時誤差。&l

19、t;/p><p>  3.軟件調(diào)試問題及解決</p><p>  軟件程序的調(diào)試一般可以將重點放在分模塊調(diào)試上,統(tǒng)調(diào)是最后一環(huán)。軟件調(diào)試可以采取離線調(diào)試和在線調(diào)試兩種方式。前者不需要硬件仿真器,可借助于軟件仿真器即可;后者一般需要仿真系統(tǒng)的支持。本次課題,Keil軟件來調(diào)試程序,通過各個模塊程序的單步或跟蹤調(diào)試,使程序逐漸趨于正確,最后統(tǒng)調(diào)程序。</p><p>  五

20、、注意事項與心得體會</p><p>  1.實習(xí)中的連線問題:</p><p>  使用了為了提供共陰LED數(shù)碼管的驅(qū)動電壓,用74LS244作電源驅(qū)動輸出。由P0口輸出驅(qū)動數(shù)碼管的段選擇,而P3口的輸出接上2803芯片驅(qū)動數(shù)碼管的位選擇。在連線時要注意芯片端口號和引腳號的區(qū)別,所以我參考了老師給我們的芯片資料,感覺非常有用,不但幫我們完成了線路圖的連接,而且對于我們以后的學(xué)習(xí)也是非常有

21、用的。對于數(shù)碼管的段端口號和位端口號的確定有一定的困難,開始連線時我沒有自己確定端口號,而是直接參考王老師連得電路圖,感覺非常困難,后來我想到數(shù)碼管就是由一個一個的二極管組成的,我為什么不用外用表自己來測量呢?這樣既可以完成實驗操作,而且還可以提高自己動手解決問題的能力。弄清原理后我很快確定好了數(shù)碼管各個端口號對應(yīng)的芯片引腳。P1.0,P1.1和P1.2是開關(guān)調(diào)節(jié)按鈕,具體功能下面敘述,連線比較簡單。對于這次連線總的來說還是比較簡單的,

22、可能一個看起來很復(fù)雜的電路圖,如果我們能夠弄清楚原理,那么就非常簡單。同樣對于我們學(xué)習(xí)也是這樣的,遇到困難不能退縮,如果那樣的話,那么也許我們永遠不能夠解決問題。</p><p><b>  2.程序的編寫過程</b></p><p>  我們在大一時學(xué)習(xí)了C語言,當時不知道它有什么具體的作用,無非不就是編寫一些簡單無聊的程序。通過這次單片機的實習(xí),我充分認識到C語言

23、的強大功能?,F(xiàn)在有點后悔當初沒有好好學(xué)習(xí)這門語言。上學(xué)期學(xué)習(xí)單片機基礎(chǔ)知識時我們主要是應(yīng)用匯編語言編寫程序,但是對于一些大型復(fù)雜的程序,可能匯編語言會很復(fù)雜。如何解決這個問題呢?實習(xí)老師向我們講解了C51語言的強大功能,讓我們到圖書館找一些資料學(xué)習(xí)一下。經(jīng)過兩個星期的系統(tǒng)學(xué)習(xí),我基本掌握了編程思想和一般的方法。</p><p><b>  3.心得體會</b></p><

24、p>  這是我又一次用單片機做成功的小制作硬件。在制作過程中,我對51單片機的了解進一步的加深,對KEIL軟件的使用更加靈活,對Proteus模擬軟件有了初步的了解。查閱相關(guān)電子畢業(yè)論文網(wǎng)站,對論文的書寫也有了流程框架。我學(xué)到了許多自己以前沒有接觸過的知識,真是受益匪淺。經(jīng)過一次次的使用Proteus也是我在學(xué)習(xí)單片機中不可缺少的系統(tǒng)仿真軟件工具,它是現(xiàn)在市場上用來軟件仿真最為重要的之一。在寫報告時Microsoft –word也

25、是不可缺少的辦公軟件,以前我對這個軟件很陌生,通過這次的報告的編寫,我對它的運用得到了進一步的認識。</p><p><b>  附錄:</b></p><p>  #include"reg52.h" </p><p>  unsigned char tempL=0,tempH=0; // 設(shè)置全局變量</p>

26、<p>  unsigned int temperature;</p><p>  unsigned char code tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf};</p><p>  unsigned char code tab1[]={0x40,0x79,0x24,0x30,0x19,0x

27、12,0x02,0x78,0x00,0x10};//帶小數(shù)點的數(shù)</p><p>  unsigned char wei[]={0x10,0x20,0x40,0x80,0x01,0x02,0x04,0x08};</p><p>  unsigned int dua[]={0,0,10,0,0,10,0,0};</p><p>  unsigned int dispb

28、uf[]={0,0,0};</p><p>  unsigned int hour=12;</p><p>  unsigned int minite=0;</p><p>  unsigned int second=0;</p><p>  unsigned int tcnt=0;</p><p>  sbit ke

29、y1=P2^0;</p><p>  sbit key2=P2^1;</p><p>  sbit key3=P2^2; </p><p>  sbit key4=P2^3; </p><p>  sbit key5=P2^4;</p><p>  sbit DQ=P2^5; //數(shù)

30、據(jù)傳輸線接單片機的相應(yīng)的引腳</p><p>  /******************************************************************/</p><p>  void delay(int x) //延時程序</p><p><b>  {</b></p><p>  w

31、hile(x--);</p><p><b>  }</b></p><p>  //**********************************************</p><p><b>  //初始化程序</b></p><p>  void Init_DS18B20(void)&

32、lt;/p><p><b>  {</b></p><p>  unsigned char x=0;</p><p>  DQ=1; //DQ先置高</p><p>  delay(8); //稍延時</p><p>  DQ=0;

33、 //發(fā)送復(fù)位脈沖</p><p>  delay(85); //延時(>480us)</p><p>  DQ=1; //拉高數(shù)據(jù)線</p><p>  delay(14); //等待(15-60us)</p><p>  x=DQ;

34、 //</p><p>  delay(20);</p><p><b>  }</b></p><p>  //**********************************************</p><p><b>  //讀一個字節(jié)</b></p><

35、p>  ReadOneChar(void)</p><p><b>  {</b></p><p>  unsigned char i=0;</p><p>  unsigned char dat=0;</p><p>  for(i=8;i>0;i--)</p><p><b&

36、gt;  {</b></p><p><b>  DQ=1;</b></p><p><b>  delay(1);</b></p><p><b>  DQ=0;</b></p><p><b>  dat>>=1;</b><

37、;/p><p><b>  DQ=1;</b></p><p><b>  if(DQ)</b></p><p>  dat|=0x80;</p><p><b>  delay(4);</b></p><p><b>  }</b>&

38、lt;/p><p>  return(dat);</p><p><b>  }</b></p><p>  //***********************************************</p><p><b>  //寫一個字節(jié)</b></p><p> 

39、 void WriteOneChar(unsigned char dat)</p><p><b>  {</b></p><p>  unsigned char i=0;</p><p>  for(i=8;i>0;i--)</p><p><b>  {</b></p>&l

40、t;p><b>  DQ=0;</b></p><p>  DQ=dat&0x01;</p><p><b>  delay(5);</b></p><p><b>  DQ=1;</b></p><p><b>  dat>>=1;<

41、/b></p><p><b>  }</b></p><p><b>  delay(4);</b></p><p><b>  }</b></p><p>  //******************************</p><p> 

42、 ReadTemperature(void)</p><p><b>  {</b></p><p>  Init_DS18B20();</p><p>  WriteOneChar(0xcc);</p><p>  WriteOneChar(0x44);</p><p>  delay(125)

43、;</p><p>  Init_DS18B20();</p><p>  WriteOneChar(0xcc);</p><p>  WriteOneChar(0xbe);</p><p>  tempL=ReadOneChar();</p><p>  tempH=ReadOneChar();</p>

44、<p>  temperature=(tempH*256)+tempL;</p><p>  return (temperature);</p><p>  }//*****************************************</p><p>  void Dispbuf(unsigned int temper)</p>

45、<p><b>  {</b></p><p>  dispbuf[2]=(temper>>4)/10;</p><p>  dispbuf[1]=(temper>>4)%10;</p><p>  if(temper&0x8)</p><p>  dispbuf[0]=0x5

46、5;</p><p>  else dispbuf[0]=0;</p><p><b>  }</b></p><p>  void display1()</p><p><b>  {</b></p><p><b>  int i;</b><

47、/p><p><b>  P0=0xff;</b></p><p>  for(i=0;i<3;i++)</p><p><b>  {</b></p><p>  ReadTemperature();</p><p>  Dispbuf(temperature);<

48、/p><p><b>  if(i==1)</b></p><p><b>  { </b></p><p>  P1=wei[i];</p><p>  P0=tab1[dispbuf[i]];</p><p>  delay(200);</p><p&g

49、t;<b>  }</b></p><p><b>  else</b></p><p><b>  {</b></p><p>  P1=wei[i];</p><p>  P0=tab[dispbuf[i]];</p><p>  delay(200

50、);</p><p><b>  }</b></p><p><b>  } </b></p><p><b>  }</b></p><p>  //時鐘顯示****************************************</p><p

51、>  void display()</p><p><b>  { </b></p><p><b>  int i; </b></p><p>  dua[0]=second%10; </p><p>  dua[1]=second/10; </p><p>  du

52、a[3]=minite%10; </p><p>  dua[4]=minite/10; </p><p>  dua[6]=hour%10; </p><p>  dua[7]=hour/10; </p><p>  P1=wei[i]; </p><p>  P0=tab[dua[i]];</p>

53、<p>  delay(2); </p><p><b>  i++; </b></p><p><b>  if(i==8)</b></p><p><b>  {</b></p><p><b>  i=0;</b></p>

54、<p><b>  } </b></p><p><b>  }</b></p><p>  void keyscan()</p><p><b>  {</b></p><p>  if(key1==0) </p><p><b&g

55、t;  { </b></p><p>  delay(10); </p><p>  if(key1==0) </p><p><b>  { </b></p><p>  second++; </p><p>  if(second==60) </p><p>

56、;<b>  { </b></p><p><b>  second=0;</b></p><p>  minite++; </p><p><b>  } </b></p><p>  while(key1==0)</p><p><b> 

57、 {</b></p><p>  display();</p><p><b>  } </b></p><p><b>  }</b></p><p><b>  } </b></p><p>  if(key2==0) </p>

58、;<p><b>  { </b></p><p>  delay(10); </p><p>  if(key2==0) </p><p><b>  { </b></p><p>  minite++; </p><p>  if(minite==60) &

59、lt;/p><p><b>  { </b></p><p><b>  minite=0;</b></p><p><b>  hour++; </b></p><p><b>  } </b></p><p>  while(key

60、2==0)</p><p><b>  {</b></p><p>  display();</p><p><b>  } </b></p><p><b>  } </b></p><p><b>  } </b></p&

61、gt;<p>  if(key3==0) </p><p><b>  { </b></p><p>  delay(10); </p><p>  if(key3==0) </p><p><b>  { </b></p><p><b>  hou

62、r++; </b></p><p>  if(hour==24) </p><p><b>  { </b></p><p><b>  hour=0; </b></p><p><b>  } </b></p><p>  while(k

63、ey3==0)</p><p><b>  {</b></p><p>  display();</p><p><b>  } </b></p><p><b>  } </b></p><p><b>  }</b></p

64、><p><b>  }</b></p><p>  /******************************************************************/</p><p>  /* 主函數(shù) */<

65、/p><p>  /******************************************************************/</p><p>  void main() </p><p><b>  { </b></p><p>  TMOD=0x02; </p><p

66、>  TH0=0x06; </p><p>  TL0=0x06; </p><p><b>  TR0=1; </b></p><p><b>  ET0=1; </b></p><p>  EA=1; //中斷允許</p><p><b>  while

67、(1)</b></p><p><b>  {</b></p><p>  if(key4==0)</p><p><b>  {</b></p><p>  while(key5==1)</p><p><b>  {</b></p&

68、gt;<p>  display1();</p><p><b>  }</b></p><p><b>  }</b></p><p>  if(key5==0)</p><p><b>  {</b></p><p>  while(k

69、ey4==1)</p><p><b>  {</b></p><p>  keyscan();</p><p>  display();</p><p><b>  }</b></p><p><b>  }</b></p><p&

70、gt;  keyscan();</p><p>  display(); </p><p><b>  }</b></p><p><b>  }</b></p><p>  void t0() interrupt 2 </p><p><b>  {

71、 </b></p><p><b>  tcnt++; </b></p><p>  if(tcnt==4000) </p><p><b>  { </b></p><p><b>  tcnt=0; </b></p><p>  seco

72、nd++; </p><p>  if(second==60) </p><p><b>  { </b></p><p>  second=0; </p><p>  minite++; </p><p>  if(minite==60) </p><p><b&g

73、t;  { </b></p><p>  minite=0; </p><p><b>  hour++; </b></p><p>  if(hour==24) </p><p><b>  { </b></p><p><b>  hour=0; &

74、lt;/b></p><p><b>  } </b></p><p><b>  } </b></p><p><b>  } </b></p><p><b>  }</b></p><p><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)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論