單片機課程設計--單片機控制的數(shù)字溫度計_第1頁
已閱讀1頁,還剩15頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、<p>  單片機原理及系統(tǒng)課程設計</p><p>  專 業(yè):電氣工程及其自動化</p><p>  班 級: 電氣1001班 </p><p>  姓 名: </p><p>  學 號: </p><p>  指導教師:

2、 </p><p>  2013 年 3 月 7 日</p><p> 評語:</p><p> 考勤(10)守紀(10)過程(40)設計報告(30)答辯(10)總成績(100)</p><p><b>  摘 要</b></p><p>  本文將介紹一種基于單片機控制的數(shù)字溫度計。

3、在硬件方面介紹單片機溫度控制系統(tǒng)的設計, 對硬件原理圖做簡潔的描述。系統(tǒng)程序主要包括主程序、讀出溫度子程序、溫度轉換命令子程序、計算溫度子程序、顯示數(shù)據刷新子程序。軟硬件分別調試完成以后,將程序下載入單片機中,電路板接上電源,電源指示燈亮,按下開關按鈕,數(shù)碼管顯示當前溫度。由于采用了智能溫度傳感器DS18B20,所以本文所介紹的數(shù)字溫度計與傳統(tǒng)的溫度計相比它的轉換速率極快,進行讀、寫操作非常簡便。它具有數(shù)字化輸出,可測量遠距離的點溫度。

4、系統(tǒng)具有微型化、微功耗、測量精度高、功能強大等特點,加之DS18B20內部的差錯檢驗,所以它的抗干擾能力強,性能可靠,結構簡單。</p><p>  關鍵詞:單片機,數(shù)字控制,溫度計,DS18B20</p><p><b>  Abstract</b></p><p>  This article introduces a microcompu

5、ter-based control of digital thermometers from the hardware description Temperature Control system design, hardware schematics and concise description. System program includes the main program, subroutine read temperatur

6、e, the temperature conversion command subroutine, subroutines calculate the temperature, display data refresh routines. Debugging of hardware and software were completed, the program downloaded into the MCU, the circuit

7、board connected to the p</p><p>  Key words: Single-chip microcomputer, digital control, thermometer, DS18B20</p><p><b>  1 引言</b></p><p><b>  1.1 目的設計</b>&l

8、t;/p><p>  通過本次設計,熟悉單片機AT89C51和傳感器DS18B20的應用,及單片機與外圍電路的接法,加深對單片機以及傳感器的認識,了解單片機在日常生活中的應用及其重要性。同時,通過查找資料,設計電路,使本次設計的數(shù)字溫度計具有結構簡單、成本低廉、精確度高、反應速度快、數(shù)字化顯示和不易損壞等特點。</p><p><b>  1.2 設計要求</b><

9、/p><p>  本設計主要是應用51系列單片機設計一個數(shù)字溫度計,該數(shù)字溫度計與傳統(tǒng)的溫度計相比,具有讀數(shù)方便,測溫范圍廣,測溫準確,其輸出溫度采用數(shù)字顯示,主要用于要求測溫比較準確的場所或科研實驗室使用,該設計控制器使用單片機AT89C51,測溫傳感器使用DS18B20,其主要功能有: </p><p>  (1) 數(shù)字溫度計測溫范圍:0~99℃;<

10、;/p><p>  (2) 可以實現(xiàn)四位溫度顯示,溫度值精確到小數(shù)點后一位;</p><p>  (3) 測溫誤差在正負0.5℃以內。</p><p><b>  1.3 設計方法</b></p><p>  采用智能溫度傳感器DS18B20作為檢測元件,測溫范圍為-55~125℃,最高分辨率可達0.0625℃,DS18B2

11、0可以直接讀出被測溫度值,進行轉換,就可以滿足設計要求。</p><p><b>  2 總體設計方案</b></p><p>  按照系統(tǒng)設計功能的要求,確定系統(tǒng)由3個模塊組成:主控制器、測溫電路、顯示電路。數(shù)字溫度計總體電路結構框圖如圖2-1所示。</p><p><b>  圖2-1 原理圖</b></p>

12、;<p><b>  3 硬件設計</b></p><p>  3.1 系統(tǒng)芯片的選擇</p><p>  AT89C51作為溫度測試系統(tǒng)設計的核心器件。該器件是INTEL公司生產的MCS一5l系列單片機中的基礎產品,采用了可靠的CMOS工藝制造技術,具有高性能的8位單片機,屬于標準的MCS—51的CMOS產品。不僅結合了HMOS的高速和高密度技術及CH

13、MOS的低功耗特征,而且繼承和擴展了MCS—48單片機的體系結構和指令系統(tǒng)。單片機小系統(tǒng)的電路圖如圖3-1所示。以AT89C51單片機為核心,選用12M的晶振,這是最常用的選擇,外接電容沒有特別的要求,但是外接電容的大小會影響振蕩器的頻率高低、振蕩器的穩(wěn)定性和起振的快速性,因此我們選用30pf的電容作為起振電容。復位電路為按鍵低電平復位,當按鍵按下,RET端為高電平,當高電平持續(xù)4us的時間就可以使單片機復位。這里尤其要注意的是晶振和電

14、容的位置,它們距離單片機引腳越短越好,因為太長可能無法使單片機起振。</p><p><b>  3.2 顯示模塊</b></p><p>  1602液晶屏顯示清晰且不會閃爍,在需要時還可以輸出字符等內容,由于液晶屏是數(shù)字式的,因此和單片機系統(tǒng)的接口簡單,操作方便。1602LCD液晶顯示屏的功耗主要消耗在其內部的電極和驅動IC 上,因而耗電量比其他顯示器要少得多,功

15、耗較低。由于其內部集成有顯示芯片,程序編寫簡單,適用于多方面的應用。如圖3-2所示。</p><p>  3.3 溫度檢測模塊</p><p>  DS18B20數(shù)字溫度傳感器是DALLAS公司生產的1-Wire,即單總線器件,具有線路簡單,體積小的特點。因此用它來組成一個測溫系統(tǒng),具有線路簡單,在一根通信線,可以掛很多這樣的數(shù)字溫度計,十分方便。它在實際應用中不需要外部任何元器件即可實現(xiàn)

16、測溫。如圖3-3所示。</p><p>  圖3-1 單片機小系統(tǒng)的電路圖</p><p><b>  圖3-2 顯示模塊</b></p><p>  圖3-3 DS18B20數(shù)字溫度傳感器</p><p><b>  4 軟件設計</b></p><p>  數(shù)字溫度計主要

17、是測溫電路模擬環(huán)境溫度,然后送于單片機,由單片機處理后送液晶顯示器顯示溫度。整體原理流程圖如圖4-1所示。DSl8820的主要數(shù)據元件有:64位激光Lasered ROM,溫度靈敏元件和非易失性溫度告警觸發(fā)器TH和TL。DSBl820可以從單總線獲取電源,當信號線為高電平時,將能量貯存在內部電容器中;當單信號線為低電平時,將該電源斷開,直到信號線變?yōu)楦唠娖街匦陆由霞纳?電容)電源為止。此外,還可外接5 V電源,給DSl8820供電。DS

18、l8820的供電方式靈活,利用外接電源還可增加系統(tǒng)的穩(wěn)定性和可靠性。圖4-2為讀取數(shù)據流程圖。</p><p>  5 系統(tǒng)仿真及其調試</p><p>  由于DS18B20與單片機采用串行數(shù)據傳送,因此,對DS18B20進行讀/寫編程時,必須嚴格的保證讀/寫時序,否則將無法讀取測量結果。本程序采用單片機C語言編寫,用Keil C編譯器編程調試。</p><p>

19、  軟件調試到數(shù)碼管能顯示溫度值,而且在有溫度變化時(例如改變傳感器的溫度值)顯示溫度能改變。用Proteus軟件連接電路圖,然后將程序導入Proteus中,最后開始仿真。結果如圖5-1所示。</p><p><b>  6 總結</b></p><p>  作為一名大三學生,我覺得做單片機課程設計是很有意義的,而且也是必要的。在做這次課程設計的過程中,我感觸最深的當

20、屬查閱大量的設計資料了。為了讓自己的設計更加完善,查閱這方面的實際資料是十分必要的,也是必不可少的。其次,在這次課程設計中,我們運用了以前學過的專業(yè)課知識,如:proteus仿真、匯編語言、模擬和數(shù)字電路知識等。雖然過去我從未獨立應用過他們,但在學習的過程中帶著問題去學我發(fā)現(xiàn)效率很高,這是我做這次課程設計的又一收獲。在這次的課程設計中,我真正的意識到,在以后的學習中,要理論聯(lián)系實際,把我們所學的理論知識用到實際當中,學習單片機更是如此,

21、程序只有在經常寫與讀的過程中才能提高,這就是這次課程設計的最大收獲。</p><p>  圖4-1 主程序流程圖</p><p>  圖4-2 溫度傳感器數(shù)據讀取流程圖</p><p>  圖5-1 仿真電路圖</p><p><b>  參考文獻</b></p><p>  [1] 余永全.單片

22、機在控制系統(tǒng)中的應用.北京:電子工業(yè)出版社,2003.</p><p>  [2] 李朝青.單片機原理及接口技術.北京:北京航空航天大學出版社,1994.</p><p>  [3] 李華.MCS-51系統(tǒng)單片機實用接口技術.北京:北京航空航天大學出版社,1993.</p><p><b>  附 錄</b></p><

23、p><b>  程序</b></p><p>  #include<reg52.h> //頭文件</p><p>  #define uchar unsigned char </p><p>  #define uint unsigned int</p><p>  sbit rs=P2^0;<

24、/p><p>  sbit lcden=P2^1; //液晶使能端</p><p>  sbit DATA = P3^7; //DS18B20接入口</p><p>  uchar FLAG_DIS=0;</p><p>  uchar bai_18b20,shi_18b20,ge_18b20,num; //定義變量</p>

25、<p>  bit flag_Negative_number ;//負數(shù)標志</p><p>  uchar code table[]={"tempreture:"} ; //提示語</p><p>  /*****一毫秒定時*****/</p><p>  void delay_ms(uint z)</p><p

26、><b>  {</b></p><p><b>  uint x,y;</b></p><p>  for(x=z;x>0;x--)</p><p>  for(y=110;y>0;y--);</p><p><b>  }</b></p>&

27、lt;p><b>  /*延時子函數(shù)*/</b></p><p>  void delay(uint num)</p><p><b>  {</b></p><p>  while(num--) ;</p><p><b>  }</b></p><

28、p><b>  /*液晶寫命令*/</b></p><p>  void write_lcd_com(uchar com)</p><p><b>  {</b></p><p><b>  rs=0;</b></p><p><b>  lcden=0;<

29、;/b></p><p><b>  P0=com;</b></p><p>  delay_ms(1);</p><p><b>  lcden=1;</b></p><p>  delay_ms(1);</p><p><b>  lcden=0;<

30、;/b></p><p><b>  }</b></p><p><b>  /*液晶寫數(shù)據*/</b></p><p>  void write_lcd_date(uchar date)</p><p><b>  {</b></p><p>&

31、lt;b>  rs=1;</b></p><p><b>  lcden=0;</b></p><p><b>  P0=date;</b></p><p>  delay_ms(1);</p><p><b>  lcden=1;</b></p>

32、<p>  delay_ms(1);</p><p><b>  lcden=0;</b></p><p><b>  }</b></p><p>  /*液晶初始化程序*/</p><p>  void lcd_init()</p><p><b>

33、;  {</b></p><p>  write_lcd_com(0x38);</p><p>  write_lcd_com(0x0c);</p><p>  write_lcd_com(0x06);</p><p>  write_lcd_com(0x01);</p><p><b>  }&

34、lt;/b></p><p>  /*************DS18b20溫度傳感器函數(shù)*********************/</p><p>  void Init_DS18B20(void) //傳感器初始化</p><p><b>  {</b></p><p>  uchar x=0;<

35、;/p><p>  DATA = 1; //DQ復位</p><p>  delay(10); //稍做延時</p><p>  DATA = 0; //單片機將DQ拉低</p><p>  delay(80); //精確延時 大于 480us //450</p><p>  DATA = 1;

36、 //拉高總線</p><p>  delay(20);</p><p>  x=DATA; //稍做延時后 如果x=0則初始化成功 x=1則初始化失敗</p><p>  delay(30);</p><p><b>  }</b></p><p>  /*溫度傳感器讀一個字節(jié)*/

37、</p><p>  ReadOneChar(void)</p><p><b>  {</b></p><p>  uchar i=0;</p><p>  uchar dat = 0;</p><p>  for (i=8;i>0;i--)</p><p><

38、;b>  {</b></p><p>  DATA = 0; // 給脈沖信號</p><p><b>  dat>>=1;</b></p><p>  DATA = 1; // 給脈沖信號</p><p><b>  if(DATA)</b></p>&

39、lt;p>  dat|=0x80;</p><p><b>  delay(8);</b></p><p><b>  }</b></p><p>  return(dat);</p><p><b>  }</b></p><p>  /*溫度傳

40、感器寫一個字節(jié)*/</p><p>  void WriteOneChar(uchar dat)</p><p><b>  {</b></p><p>  uchar i=0;</p><p>  for (i=8; i>0; i--)</p><p><b>  {</b

41、></p><p><b>  DATA = 0;</b></p><p>  DATA = dat&0x01;</p><p>  delay(10);</p><p><b>  DATA = 1;</b></p><p><b>  dat>

42、;>=1;</b></p><p><b>  }</b></p><p><b>  delay(8);</b></p><p><b>  }</b></p><p>  /*讀取溫度傳感器溫度*/</p><p>  int Re

43、adTemperature(void)</p><p><b>  {</b></p><p>  uchar a=0;</p><p>  uchar b=0;</p><p><b>  int t=0;</b></p><p>  float tt=0;</p&g

44、t;<p>  Init_DS18B20();</p><p>  WriteOneChar(0xCC); //跳過讀序號列號的操作</p><p>  WriteOneChar(0x44); //啟動溫度轉換</p><p>  Init_DS18B20();</p><p>  WriteOneChar(0xCC); //跳

45、過讀序號列號的操作</p><p>  WriteOneChar(0xBE); //讀取溫度寄存器等(共可讀9個寄存器)前兩個就是溫度</p><p>  a=ReadOneChar();//低位</p><p>  b=ReadOneChar();//高位</p><p><b>  t=b;</b></p>

46、;<p><b>  t<<=8;</b></p><p><b>  t=t|a;</b></p><p>  if(b&0x80) </p><p><b>  {</b></p><p><b>  t=~t+1;</b&

47、gt;</p><p>  flag_Negative_number = 1;</p><p><b>  }</b></p><p>  else { flag_Negative_number = 0; }</p><p>  tt=t*0.0625;</p><p>  t= tt*10+0.

48、5; </p><p>  return(t);</p><p><b>  }</b></p><p>  /*液晶顯示溫度*/</p><p>  void dis_D18B20(void)</p><p><b>  {</b></p><p>

49、  int temp;</p><p>  temp=ReadTemperature();//讀溫度</p><p>  bai_18b20=temp%1000/100;//顯示百位</p><p>  shi_18b20=temp%100/10;//顯示十位</p><p>  ge_18b20=temp%10;//顯示個分位</p

50、><p>  if(flag_Negative_number) //負數(shù)</p><p><b>  {</b></p><p>  if(bai_18b20==0) //十位為0,則不顯示十位</p><p><b>  {</b></p><p>  write_

51、lcd_com(0x80+0x40);</p><p>  write_lcd_date(0x2D);</p><p>  write_lcd_date(0x30+shi_18b20);</p><p>  write_lcd_date(0x30+ge_18b20);</p><p>  write_lcd_date(0xDF);</p

52、><p>  write_lcd_date(0x43);</p><p><b>  }</b></p><p><b>  else</b></p><p><b>  {</b></p><p>  write_lcd_com(0x80+0x40);&l

53、t;/p><p>  write_lcd_date(0x2D);</p><p>  write_lcd_date(0x30+bai_18b20);</p><p>  write_lcd_date(0x30+shi_18b20);</p><p>  write_lcd_date(0xDF);</p><p>  wri

54、te_lcd_date(0x43);</p><p><b>  }</b></p><p><b>  }</b></p><p>  else //正數(shù)</p><p><b>  {</b></p><p>  if(bai_18b20

55、==0) //十位為0,則不顯示十位</p><p><b>  {</b></p><p>  write_lcd_com(0x80+0x40);</p><p>  write_lcd_date(0x30+shi_18b20);</p><p>  write_lcd_date(0x2E);</p>

56、;<p>  write_lcd_date(0x30+ge_18b20);</p><p>  write_lcd_date(0xDF);</p><p>  write_lcd_date(0x43);</p><p><b>  }</b></p><p><b>  else</b>

57、;</p><p><b>  {</b></p><p>  write_lcd_com(0x80+0x40);</p><p>  write_lcd_date(0x30+bai_18b20);</p><p>  write_lcd_date(0x30+shi_18b20);</p><p>

58、;  write_lcd_date(0x2E);</p><p>  write_lcd_date(0x30+ge_18b20);</p><p>  write_lcd_date(0xDF);</p><p>  write_lcd_date(0x43);</p><p><b>  }</b></p>

59、<p><b>  }</b></p><p><b>  }</b></p><p>  void main()</p><p><b>  {</b></p><p>  lcd_init();</p><p>  TMOD=0x01;&l

60、t;/p><p>  TH0=(65536-50000)/256; </p><p>  TL0=(65536-50000)%256; </p><p><b>  TR0=1;</b></p><p><b>  ET0=1; </b></p><p>  EA=1;

61、//開總中斷</p><p>  write_lcd_com(0x80);</p><p>  for(num=0;num<11;num++)</p><p><b>  {</b></p><p>  write_lcd_date(table[num]);</p><p>  //de

62、lay_ms(10);</p><p><b>  }</b></p><p>  //dis_D18B20();</p><p><b>  while(1)</b></p><p><b>  {</b></p><p>  if(FLAG_DI

63、S==1)</p><p><b>  {</b></p><p>  FLAG_DIS=0;</p><p>  dis_D18B20(); //讀溫度并顯示</p><p><b>  }</b></p><p><b>  }</b></p&

64、gt;<p><b>  }</b></p><p>  timer0() interrupt 1 // </p><p><b>  {</b></p><p>  uchar count; </p><p>  TH0=(65536-50000)/256; </p>

65、<p>  TL0=(65536-50000)%256;</p><p><b>  count++;</b></p><p>  if(count==60)//每三秒鐘讀一次溫度傳感器溫度</p><p><b>  {</b></p><p>  FLAG_DIS=1;</p&g

溫馨提示

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

評論

0/150

提交評論