單片機(jī)課程設(shè)計(jì)---數(shù)字溫度計(jì)_第1頁
已閱讀1頁,還剩10頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、<p>  單片機(jī)原理及系統(tǒng)課程設(shè)計(jì)</p><p>  專 業(yè): 電氣工程及其自動(dòng)化 </p><p>  班 級(jí): 電氣 </p><p>  姓 名: </p><p>  學(xué) 號(hào): <

2、;/p><p>  指導(dǎo)教師: </p><p>  2012年 7月 1日</p><p><b>  1 引言</b></p><p>  本設(shè)計(jì)所介紹的數(shù)字溫度計(jì)與傳統(tǒng)的溫度計(jì)相比,具有讀數(shù)方便,測(cè)溫范圍廣,測(cè)溫準(zhǔn)確,其輸出溫度采用數(shù)字顯示,主要用于對(duì)測(cè)溫比較準(zhǔn)確的場(chǎng)所,該設(shè)計(jì)控

3、制器使用單片機(jī)AT89C51,測(cè)溫傳感器使用DS18B20,用4位共陽極LCD串口傳送數(shù)據(jù),實(shí)現(xiàn)溫度顯示,能準(zhǔn)確達(dá)到以上要求。</p><p><b>  2 設(shè)計(jì)方案及原理</b></p><p><b>  2.1 設(shè)計(jì)方案</b></p><p>  選用AT89C51型單片機(jī)作為主控制器件,DS18B20作為測(cè)溫傳

4、感器,通過4個(gè)共陽極LCD串口傳送數(shù)據(jù),實(shí)現(xiàn)溫度顯示。通過DS18B20直接讀取被測(cè)溫度值,進(jìn)行數(shù)據(jù)轉(zhuǎn)換,該器件的物理化學(xué)性能穩(wěn)定,線性度較好,在-30℃~150℃最大誤差小于正負(fù)0.5℃。該器件可直接向單片機(jī)傳輸數(shù)字信號(hào),便于單片機(jī)處理及控制。另外,該溫度計(jì)還能直接采用測(cè)溫器件測(cè)量溫度,從而簡化數(shù)據(jù)傳輸與處理過程。 </p><p><b>  2.2 設(shè)計(jì)原理</b></p>

5、<p>  溫度計(jì)電路設(shè)計(jì)總體設(shè)計(jì):控制器采用單片機(jī)AT89C51,溫度傳感采用DS18B20;用LCD實(shí)現(xiàn)溫度顯示。</p><p>  模擬溫度值經(jīng)過DS18B20處理后轉(zhuǎn)換為數(shù)字值,然后送到單片機(jī)中進(jìn)行數(shù)據(jù)處理,處理后的數(shù)據(jù)送到LCD中顯示。</p><p>  3 系統(tǒng)硬件軟件設(shè)計(jì)</p><p><b>  3.1 硬件設(shè)計(jì)<

6、/b></p><p>  3.1.1 主板電路</p><p>  包括AT89C51單片機(jī)、時(shí)鐘電路和復(fù)位電路、發(fā)光二極管、按鍵設(shè)置報(bào)警電路、液晶顯示模塊、上拉電阻、蜂鳴器、DS18B20溫度傳感器。DS18B20有4個(gè)獨(dú)立鍵按鍵,可以分別調(diào)整溫度計(jì)的上下限報(bào)警設(shè)置,當(dāng)被測(cè)溫度不在上下限范圍時(shí),蜂鳴器就會(huì)發(fā)出報(bào)警聲音,LCD顯示屏可以顯示測(cè)出的溫度值;按鍵復(fù)位電路是上電加手動(dòng)復(fù)位

7、,使用比較方便。具體連接電路如圖1所示。</p><p>  3.1.2 復(fù)位信號(hào)及外部復(fù)位電路</p><p>  單片機(jī)的端口是看門狗電路中喂狗信號(hào)的P1.6 MAX813輸入端即單片機(jī)每執(zhí)行一次程序就設(shè)置一次喂狗信號(hào),清零看門狗器件。若程序出現(xiàn)異常單片機(jī)引腳將出現(xiàn)兩個(gè)機(jī)器周RST期以上的高電平,使其復(fù)位。該復(fù)位信號(hào)高電平有效,其有效時(shí)間應(yīng)持續(xù)24個(gè)振蕩脈沖周期即兩個(gè)機(jī)器周期以上。若使

8、用頻率為12MHz的晶體振蕩器,則復(fù)位信號(hào)持續(xù)時(shí)間應(yīng)超過2us才完成復(fù)位操作。 </p><p>  圖1 具體電路連接圖</p><p>  3.1.3 溫度傳感器與單片機(jī)的連接</p><p>  溫度傳感器的單總線(1-Wire)與單片機(jī)的P2.0連接,P2.0是單片機(jī)的高位地址線A8。P2端口是一個(gè)帶內(nèi)部上拉電阻的8位雙向I/O,其輸出緩沖級(jí)可驅(qū)動(dòng)(吸收或輸

9、出電流)4個(gè)TTL邏輯門電路。</p><p>  3.1.4 溫度控制及超溫和超溫警報(bào)單元</p><p>  當(dāng)由于環(huán)境溫度變化太劇烈或由于加熱或降溫設(shè)備出現(xiàn)故障,或者溫度傳感頭出現(xiàn)故障導(dǎo)致在一段時(shí)間內(nèi)不能將環(huán)境溫度調(diào)整到規(guī)定的溫度限內(nèi)的時(shí)候,單片機(jī)通過三極管驅(qū)動(dòng)揚(yáng)聲器發(fā)出警笛聲。</p><p>  3.1.5 液晶顯示電路</p><p&

10、gt;  在液晶顯示的電路設(shè)計(jì)中選擇具有單向輸出數(shù)據(jù)功能的PO端口向液晶顯示模塊提供數(shù)據(jù),P2.5、P2.6、P2.7口作為液晶顯示模塊的端口,在PO口上需要外加上拉電阻,才可以是液晶顯示模塊正常顯示。</p><p><b>  3.2 軟件設(shè)計(jì)</b></p><p>  3.2.1 主程序 </p><p>  主程序的主要功能是負(fù)責(zé)溫度

11、的實(shí)時(shí)顯示、讀出并處理DS18B20測(cè)量的當(dāng)前溫度值,溫度測(cè)量每1s進(jìn)行一次。其程序流程見圖3所示。源程序見附錄1。</p><p><b>  圖3 主程序流程圖</b></p><p>  3.2.2 讀出溫度子程序</p><p>  讀出溫度子程序的主要功能是讀出RAM中的9字節(jié),在讀出時(shí)需進(jìn)行CRC校驗(yàn)。校驗(yàn)有錯(cuò)時(shí),不進(jìn)溫度數(shù)據(jù)的改寫

12、。其程序流程圖如圖4所示。</p><p><b>  圖4 讀溫度流程圖</b></p><p>  3.2.3 顯示數(shù)據(jù)子程序</p><p>  顯示數(shù)據(jù)子程序主要是對(duì)顯示緩沖器中的顯示數(shù)據(jù)進(jìn)行操作。當(dāng)最高顯示位為0時(shí),將符號(hào)顯示位移入下一位,程序流程圖如圖5所示。</p><p>  通過以上軟件硬件的設(shè)計(jì),可

13、在PROTEUS中畫出數(shù)字溫度計(jì)的仿真圖如圖6(見附錄2)所示。</p><p><b>  5 總結(jié)</b></p><p>  本設(shè)計(jì)利用89S52芯片控制溫度傳感器DS18B20,在輔之以部分外圍電路實(shí)現(xiàn)對(duì)環(huán)境溫度的測(cè)控。用PROTUES仿真時(shí)我發(fā)現(xiàn)溫度警報(bào)器不起作用,當(dāng)溫度超過30度或低于10度都不能報(bào)警。剛開始以為是程序問題,經(jīng)過檢查簡化了報(bào)警電路,才發(fā)現(xiàn)是

14、電路及喇叭的電壓不正確。由于DS18B20是基于帶隙結(jié)構(gòu)的數(shù)字溫度傳感器,PN結(jié)增量電壓正比于IC絕對(duì)溫度,他的測(cè)溫精度較高,但存在一定誤差,不過,其誤差在時(shí)間和外部環(huán)境變化的條件下,保持相當(dāng)高的穩(wěn)定性。他充分利用監(jiān)控計(jì)算機(jī)的處理能力,在監(jiān)控計(jì)算機(jī)上用線性插補(bǔ)的數(shù)學(xué)方法對(duì)其進(jìn)行誤差技術(shù)校正補(bǔ)償,能輕易地將其提高其精度。</p><p>  圖5 數(shù)據(jù)顯示流程圖</p><p><b&

15、gt;  參考文獻(xiàn)</b></p><p>  [1] 錢培怡,楊柏林.電子電路實(shí)驗(yàn)與課程設(shè)計(jì)[M].北京:地震出版社,2002.6.</p><p>  [2] 陳大欽,羅杰.電子電路實(shí)驗(yàn)設(shè)計(jì)及現(xiàn)代EDA技術(shù)[M].北京:高等教育出版社,2008.6</p><p>  [3] 陳明義.電子技術(shù)課程設(shè)計(jì)實(shí)用教程[M].長沙:中南大學(xué)出版社,2010.&

16、lt;/p><p><b>  附錄1 源程序</b></p><p>  //數(shù)字溫度計(jì)的設(shè)置:上電或按鍵復(fù)位后,顯示系統(tǒng)提示符ZB090303;當(dāng)K2(P1.0口)鍵按下后,顯示即時(shí)溫度;P0口為段控口,P2口為位控口,P1口為按鍵控制口,P3口控制流水燈</p><p>  #include<reg52.h> //包含單

17、片機(jī)寄存器的頭文件</p><p>  #include<intrins.h> //包含_nop_()函數(shù)定義的頭文件</p><p>  #define uchar unsigned char</p><p>  #define uint unsigned int</p><p>  Uchar duan[16]={0x

18、C0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90, 0x8c,0xce,0x86,0xAB,0xA1,0xff};</p><p>  uchar wei[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};</p><p>  char find_code[8]={3,0,3,0,9,0,8,2};<

19、/p><p>  /*******************************************************************</p><p>  函數(shù)功能:做好讀溫度的準(zhǔn)備</p><p>  ******************************************************************/ void R

20、eadyReadTemp(void)*</p><p>  { Init_DS18B20(); //將DS18B20初始化</p><p>  WriteOneChar(0xCC); // 跳過讀序號(hào)列號(hào)的操作</p><p>  WriteOneChar(0x44); // 啟動(dòng)溫度轉(zhuǎn)換 </p><p>  for

21、(time=0;time<100;time++)</p><p>  S ; //溫度轉(zhuǎn)換需要一點(diǎn)時(shí)間</p><p>  Init_D18B20(); //將DS18B20初始化</p><p>  WriteOneChar(0xCC); //跳過讀序號(hào)列號(hào)的操作</p><p>  Wri

22、teOneChar(0xBE); //讀取溫度寄存器,前兩個(gè)分別是溫度的低位和高位</p><p><b>  }</b></p><p>  /*******************************************************************</p><p><b>  延時(shí)函數(shù)</b

23、></p><p>  *******************************************************************/</p><p>  void display_delay(void)</p><p>  { unsigned int time1=100;</p><p>  w

24、hile(time1) time1-- ; </p><p><b>  }</b></p><p>  /*******************************************************************</p><p><b>  延時(shí)1ms函數(shù)</b></p><

25、;p>  *******************************************************************/</p><p>  void DelayX1ms(uint count) </p><p><b>  { uint j;</b></p><p>  while(count--!=

26、0) </p><p>  { for(j=0;j<80;j++);</p><p>  } </p><p><b>  }</b></p><p>  /*************************************************************

27、****</p><p><b>  顯示溫度程序</b></p><p>  *****************************************************************/</p><p>  void display(uchar gewei,uchar shiwei ,uchar baiwei,ucha

28、r shi,uchar bai,uchar qian,uchar wan)</p><p>  { P0=duan[wan]; //萬分位</p><p>  P2=wei[6]; </p><p>  display_delay();</p><p><b>  P2=0xff;</b>&

29、lt;/p><p>  P0=duan[qian]; //千分位</p><p>  P2=wei[5]; </p><p>  display_delay();</p><p><b>  P2=0xff;</b></p><p>  P0=duan[bai]; //

30、百分位</p><p>  P2=wei[4]; </p><p>  display_delay();</p><p><b>  P2=0xff;</b></p><p>  P0=duan[shi]; //十分位</p><p>  P2=wei[3]; </p&g

31、t;<p>  display_delay();</p><p><b>  P2=0xff;</b></p><p>  P0=duan[gewei]&0x7f; //個(gè)位</p><p>  P2=wei[2]; </p><p>  display_delay();</p>

32、<p><b>  P2=0xff;</b></p><p>  P0=duan[shiwei]; //十位</p><p>  P2=wei[1]; </p><p>  display_delay();</p><p><b>  P2=0xff;</b></p&g

33、t;<p>  P0=duan[baiwei]; //百位</p><p>  P2=wei[0]; </p><p>  display_delay();</p><p><b>  P2=0xff;</b></p><p>  P0=0xff; </p><p&g

34、t;<b>  } </b></p><p>  /*******************************************************************</p><p><b>  主函數(shù)</b></p><p>  ************************************

35、*******************************/</p><p>  void main(void)</p><p>  { uchar TL,TH,TD,TN;</p><p>  uchar gewei,shiwei,baiwei,shi,bai,qian,wan;</p><p>  unsigned int xiaos

36、hu;</p><p><b>  uchar m;</b></p><p><b>  DQ=1;</b></p><p><b>  m=key();</b></p><p><b>  while(1)</b></p><p>

37、;<b>  { disp();</b></p><p><b>  m=key();</b></p><p>  if(m==0x01)</p><p>  { while(1)</p><p>  { w:ReadyReadTemp(); </p><p>  TL=R

38、eadOneChar(); //先讀的是溫度值低位</p><p>  TH=ReadOneChar(); //接著讀的是溫度值高位</p><p>  TN=TH*16+TL/16; //實(shí)際溫度值=(TH*256+TL)/16,即:TH*16+TL/16</p><p>  TD=(TL&0x0f);</p><p&g

39、t;  xiaoshu=625*TD;</p><p>  gewei=TN%10;</p><p>  shiwei=(TN/10)%10;</p><p>  baiwei=TN/100;</p><p>  if(baiwei==0) baiwei=15; //滅</p><p>  if

40、(baiwei==15&&shiwei==0) shiwei=15;//滅</p><p>  shi=(xiaoshu/1000)%10;</p><p>  bai=(xiaoshu/100)%10; </p><p>  qian=(xiaoshu/10)%10;</p><p>  wan=xia

41、oshu%10; </p><p>  Display (gewei, shiwei, baiwei, shi,bai,qian,wan);</p><p>  if(TN>=20 )</p><p><b>  bz=0;</b></p><p>  else bz=1; </p>&l

42、t;p><b>  m=key();</b></p><p>  if(m==0x02)</p><p><b>  { for(;;)</b></p><p><b>  { disp();</b></p><p><b>  m=key();</b&g

43、t;</p><p>  if(m==0x01)</p><p><b>  goto w;</b></p><p><b>  } </b></p><p><b>  }</b></p><p><b>  }</b></

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論