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

下載本文檔

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

文檔簡(jiǎn)介

1、<p>  計(jì)算機(jī)控制技術(shù)綜合應(yīng)用設(shè)計(jì)</p><p>  題目 數(shù)字溫度計(jì) </p><p>  二級(jí)學(xué)院 電子信息與自動(dòng)化學(xué)院 </p><p>  專 業(yè) 電氣工程及其自動(dòng)化 </p><

2、;p>  班 級(jí) 電氣三班 </p><p><b>  目錄</b></p><p><b>  1、緒論1</b></p><p>  2、設(shè)計(jì)的準(zhǔn)備工作1</p><p><b>  3、原件介紹1<

3、;/b></p><p>  3.1、 STC89C52的功能特性1</p><p>  3.2、 DS18B20的特點(diǎn)3</p><p>  4、設(shè)計(jì)步驟及原理4</p><p><b>  4.1方案框圖4</b></p><p>  4.2、程序設(shè)計(jì)4</p>

4、<p>  4.2.1程序流程圖4</p><p>  4.2.2定義變量5</p><p>  4.2.3 主程序6</p><p>  4.2.4 初始化DS18B20. ... ... ... ... ... ... ... ... ... ... 7</p><p>  4.2.5 DS18B20讀寫(xiě)字節(jié)... .

5、.. ... ... ... ... ... ... ... ... 8</p><p>  4.2.6 讀取溫度... ... ... ... ... ... ... ... ... ... ... ...8</p><p>  4.2.7 數(shù)碼管顯示9</p><p>  4.3、電路硬件設(shè)計(jì)及Proteus軟件仿真9</p><p&g

6、t;  4.3.1、時(shí)鐘電路與復(fù)位電路9</p><p>  4.3.2 數(shù)碼管顯示10</p><p>  4.3.3 鍵位控制11</p><p>  4.3.4 總仿真圖11</p><p>  5、設(shè)計(jì)結(jié)果及分析12</p><p>  6、總結(jié)及心得體會(huì)12</p><p>

7、;<b>  7、附錄13</b></p><p>  (1)、元器件清單13</p><p>  (2)、源程序:13</p><p><b>  1、緒論</b></p><p>  隨著人們生活水平的不斷提高,單片機(jī)控制無(wú)疑是人們追求的目標(biāo)之一,它所給人帶來(lái)的方便也是不可否定的,其中數(shù)字

8、溫度計(jì)就是一個(gè)典型的例子,但人們對(duì)它的要求越來(lái)越高,要為現(xiàn)代人工作、科研、生活提供更好的更方便的設(shè)施就需要從單片機(jī)技術(shù)入手,一切向著數(shù)字化控制,智能化控制方向發(fā)展。</p><p>  本次課程設(shè)計(jì),就是用單片機(jī)實(shí)現(xiàn)溫度控制,傳統(tǒng)的溫度檢測(cè)大多以熱敏電阻為溫度傳感器,但熱敏電阻的可靠性差,測(cè)量溫度準(zhǔn)確率低,而且必須經(jīng)過(guò)專門(mén)的接口電路轉(zhuǎn)換成數(shù)字信號(hào)才能由單片機(jī)進(jìn)行處理。本次采用DS18B20數(shù)字溫度傳感器來(lái)實(shí)現(xiàn)基于

9、51單片機(jī)的數(shù)字溫度計(jì)的設(shè)計(jì)。</p><p>  本次課程設(shè)計(jì)的具體要求:</p><p>  a)、使用溫度傳感器(模擬或數(shù)字式)測(cè)量環(huán)境溫度</p><p>  b)、測(cè)量結(jié)果顯示到LED數(shù)碼管上</p><p>  c)、系統(tǒng)工作滿足一般的溫度檢測(cè)要求</p><p><b>  擴(kuò)展要求:</

10、b></p><p>  *、可設(shè)定溫度報(bào)警閾值</p><p>  *、可存儲(chǔ)、查看最高溫度和最低溫度</p><p><b>  2、設(shè)計(jì)的準(zhǔn)備工作</b></p><p>  由于本設(shè)計(jì)是測(cè)溫電路,功能不是太復(fù)雜,STC89C52單片機(jī)完全可以滿足要求,而測(cè)溫部分采用可以使用熱敏電阻之類的器件利用其感溫效應(yīng),

11、在將隨被測(cè)溫度變化的電壓或電流采集過(guò)來(lái),進(jìn)行A/D轉(zhuǎn)換后,就可以用單片機(jī)進(jìn)行數(shù)據(jù)的處理,在顯示電路上,就可以將被測(cè)溫度顯示出來(lái),但是這種設(shè)計(jì)需要用到A/D轉(zhuǎn)換電路,感溫電路比較麻煩。進(jìn)而考慮到用溫度傳感器,在單片機(jī)電路設(shè)計(jì)中,大多都是使用傳感器,所以這是非常容易想到的,所以可以采用一只溫度傳感器DS18B20,此傳感器,可以很容易直接讀取被測(cè)溫度值,進(jìn)行轉(zhuǎn)換,就可以滿足設(shè)計(jì)要求。在顯示部分設(shè)計(jì)要求中要求溫度顯示在數(shù)碼管上,我們考慮到傳感

12、器的測(cè)溫范圍大致為—55℃~125℃,精度也可精確到小數(shù),所以決定采用四位共陽(yáng)極數(shù)碼管。</p><p>  軟件方面,編程用C語(yǔ)言,我們決定采用常用的keil軟件來(lái)進(jìn)行程序的編寫(xiě)與編譯,并生成.hex文件。再用proteus仿真軟件畫(huà)出電路圖,進(jìn)行仿真,其中proteus軟件是目前最好的仿真單片機(jī)及外圍器件的工具。雖然目前國(guó)內(nèi)推廣剛起步,但已受到單片機(jī)愛(ài)好者、從事單片機(jī)教學(xué)的教師、致力于單片機(jī)開(kāi)發(fā)應(yīng)用的科技工作

13、者的青睞。</p><p>  除此之外,就是準(zhǔn)備焊接實(shí)物的工具,焊鐵、導(dǎo)線等等。</p><p><b>  3、原件介紹</b></p><p>  3.1、 STC89C52的功能特性</p><p>  STC89C52是一種低功耗、高性能CMOS8位微控制器,具有 8K 在系統(tǒng)可編程Flash 存儲(chǔ)器。在單芯片

14、上,擁有靈巧的8 位CPU 和在系統(tǒng)可編程Flash,使得STC89C52為眾多嵌入式控制應(yīng)用系統(tǒng)提供高靈活、超有效的解決方案。 具有以下標(biāo)準(zhǔn)功能: 8K字節(jié)Flash,512字節(jié)RAM, 32 位I/O 口線,看門(mén)狗定時(shí)器,內(nèi)置4KB EEPROM,MAX810復(fù)位電路,三個(gè)16 位 定時(shí)器/計(jì)數(shù)器,一個(gè)6向量2級(jí)中斷結(jié)構(gòu),全雙工串行口。另外 STC89X52 可降至0Hz 靜態(tài)邏輯操作,支持2種軟件可選擇節(jié)電模式??臻e模式下,CPU

15、 停止工作,允許RAM、定時(shí)器/計(jì)數(shù)器、串口、中斷繼續(xù)工作。掉電保護(hù)方式下,RAM內(nèi)容被保存,振蕩器被凍結(jié),單片機(jī)一切工作停止,直到下一個(gè)中斷或硬件復(fù)位為止。最高運(yùn)作頻率35Mhz,6T/12T可選。 </p><p>  3.2、 DS18B20的特點(diǎn)</p><p>  本設(shè)計(jì)的測(cè)溫系統(tǒng)采用芯片DS18B20,DS18B20是DALLAS公司的最新單線數(shù)字溫度傳感器,它的體積更小,適用

16、電壓更寬,更經(jīng)濟(jì)。</p><p><b>  實(shí)現(xiàn)方法簡(jiǎn)介</b></p><p>  DS18B20采用外接電源方式工作,一線測(cè)溫一線與STC89C51連接,測(cè)出的數(shù)據(jù)放在寄存器中,將數(shù)據(jù)經(jīng)過(guò)BCD碼轉(zhuǎn)換后送到LED顯示。</p><p>  DS18B20溫度傳感器是美國(guó)DALLAS半導(dǎo)體公司最新推出的一種改進(jìn)型智能溫度傳感器,與傳統(tǒng)的熱

17、敏電阻等測(cè)溫元件相比,它能直接讀出被測(cè)溫度,并且可根據(jù)實(shí)際要求通過(guò)簡(jiǎn)單的編程實(shí)現(xiàn)9~12位的數(shù)字值讀數(shù)方式。DS18B20的性能特點(diǎn)如下:</p><p>  ●獨(dú)特的單線接口僅需要一個(gè)端口引腳進(jìn)行通信;</p><p>  ●多個(gè)DS18B20可以并聯(lián)在惟一的三線上,實(shí)現(xiàn)多點(diǎn)組網(wǎng)功能;</p><p><b>  ●無(wú)須外部器件;</b>&l

18、t;/p><p>  ●可通過(guò)數(shù)據(jù)線供電,電壓范圍為3.0~5.5V;</p><p><b>  ●零待機(jī)功耗;</b></p><p>  ●溫度以9或12位數(shù)字;</p><p>  ●用戶可定義報(bào)警設(shè)置;</p><p>  ●報(bào)警搜索命令識(shí)別并標(biāo)志超過(guò)程序限定溫度(溫度報(bào)警條件)的器件;&l

19、t;/p><p>  ●負(fù)電壓特性,電源極性接反時(shí),溫度計(jì)不會(huì)因發(fā)熱而燒毀,但不能正常工作; </p><p>  圖1.DS18B20的原理圖</p><p>  圖2.DS18B20的內(nèi)部結(jié)構(gòu)</p><p><b>  4、設(shè)計(jì)步驟及原理</b></p><p><b>  4.1方案

20、框圖</b></p><p>  基于STC89C52單片機(jī)的數(shù)字溫度計(jì)設(shè)計(jì)由STC89C52單片機(jī)控制器、電源、顯示電路、溫度傳感器、復(fù)位電路和時(shí)鐘電路組成,系統(tǒng)框圖如圖1所示。電源給整個(gè)電路供電,顯示電路顯示溫度值,時(shí)鐘電路為STC89C52提供時(shí)鐘頻率。傳感器采用美國(guó)DALLAS半導(dǎo)體公司生產(chǎn)的一種智能溫度傳感器DS18B20,其測(cè)溫范圍為-55~125℃,最高分辨率可達(dá)0.0625℃,完全符合

21、設(shè)計(jì)要求。</p><p><b>  圖3.系統(tǒng)框圖</b></p><p><b>  4.2、程序設(shè)計(jì)</b></p><p>  4.2.1程序流程圖</p><p>  主程序的主要功能是負(fù)責(zé)溫度的實(shí)時(shí)顯示、讀出并處理DS18B20測(cè)量的當(dāng)前溫度值,溫度測(cè)試每1S進(jìn)行一次。這樣可以在1S之

22、內(nèi)測(cè)量一次被測(cè)溫度,其程序流程圖如下圖所示。</p><p>  讀出溫度子程序的主要功能是讀出RAM中的9字節(jié),其程序流程圖下圖所示。</p><p><b>  圖4.程序流程圖</b></p><p>  溫度轉(zhuǎn)換命令子程序主要是發(fā)溫度轉(zhuǎn)換開(kāi)始命令,采用12位分辨率轉(zhuǎn)換時(shí)間約為750ms。程序設(shè)計(jì)中采用1s顯示程序延時(shí)等待轉(zhuǎn)換的完成。計(jì)算

23、溫度子程序?qū)AM中讀取值進(jìn)行BCD碼地轉(zhuǎn)換運(yùn)算,并進(jìn)行溫度值正負(fù)的判定,顯示數(shù)據(jù)刷新子程序主要是對(duì)顯示緩沖器中的顯示數(shù)據(jù)進(jìn)行刷新操作,當(dāng)最高顯示位為0時(shí)將符號(hào)顯示位移入下一位</p><p><b>  4.2.2定義變量</b></p><p>  sbit DATA = P1^1; //DS18B20接入口</p><p>  ucha

24、r code table[]={0xc0,0xf9,0xa4,0xB0,0x99, 0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xc6,0xc1,0x86,0x8e};//共陽(yáng)極字型碼</p><p>  int temp; //溫度值</p><p>  int ss;//中間的一個(gè)變量</p><p><b>  i

25、nt dd;</b></p><p><b>  int j;</b></p><p>  uchar data b;//定時(shí)器中斷次數(shù)</p><p>  uchar data buf[4];//字型顯示中間變量</p><p>  int alarmH=300; //默認(rèn)報(bào)警值</p>

26、<p>  int alarmL=100;</p><p>  //定義開(kāi)關(guān)的接入口</p><p>  sbit k1=P2^5;//+</p><p>  sbit k2=P2^6;//-</p><p>  sbit k3=P2^7;//確認(rèn)</p><p>  sbit k4=P2^4; //

27、切換</p><p>  sbit bell=P1^0; //蜂鳴器</p><p>  sbit HLight=P1^2; //正溫指示燈</p><p>  sbit LLight=P1^3; //負(fù)溫度指示燈</p><p>  sbit Red=P1^6; //溫度上限設(shè)置指示燈</p><p> 

28、 sbit Green=P1^7; //溫度下限設(shè)置指示燈</p><p>  bit set=0;//初始化</p><p>  bit Flag=0;//設(shè)置標(biāo)志</p><p><b>  int n;</b></p><p><b>  //函數(shù)的聲明區(qū)</b></p>

29、<p>  void key_to1();</p><p>  void key_to2();</p><p>  void delay(uint); </p><p>  void key();</p><p>  void Show();</p><p><b>  4.2.3 主程序</

30、b></p><p>  void Show() //顯示函數(shù),分別表示溫度正負(fù)值</p><p>  { if(temp>=0)</p><p>  {display();}</p><p>  if(temp<0)</p><p>  {display00();}</p>

31、<p><b>  }</b></p><p>  void main()</p><p><b>  {</b></p><p>  TCON=0x01; //定時(shí)器T0工作在01模式下</p><p>  TMOD=0X01;</p><p>  TH0=

32、0XD8;//裝入初值</p><p><b>  TL0=0XF0;</b></p><p>  EA=1; //開(kāi)總中斷</p><p>  ET0=1; //開(kāi)T0中斷</p><p>  TR0=1; //T0開(kāi)始運(yùn)行計(jì)數(shù)</p><p>  EX0=1; //開(kāi)外部中斷0</p&

33、gt;<p>  for(n=0;n<500;n++)//顯示啟動(dòng)LOGo"- - - -"</p><p>  {bell=1;warn=1;logo();}</p><p><b>  Red=0;</b></p><p><b>  while(1)</b></p>

34、<p><b>  {</b></p><p><b>  key(); </b></p><p>  ss=ReadTemperature();</p><p><b>  Show();</b></p><p>  alarm(); //報(bào)警函數(shù)</

35、p><p>  if(Flag==1)</p><p>  {bell=!bell;</p><p>  4.2.4初始化DS18B20</p><p>  Init_DS18B20(void) //傳感器初始化</p><p><b>  {</b></p><p>

36、  uchar x=0;</p><p>  DATA = 1; //DQ復(fù)位</p><p>  delay(10); //稍做延時(shí)</p><p>  DATA = 0; //單片機(jī)將DQ拉低</p><p>  delay(80); //精確延時(shí) 大于 480us //450</p><p>

37、  DATA = 1; //拉高總線</p><p>  delay(20);</p><p>  x=DATA; //稍做延時(shí)后 如果x=0則初始化成功 x=1則初始化失敗</p><p>  delay(30);</p><p><b>  }</b></p><p>  4.

38、2.5 DS18B20讀寫(xiě)字節(jié)</p><p>  ReadOneChar(void) //讀一個(gè)字節(jié)</p><p><b>  {</b></p><p>  uchar i=0;</p><p>  uchar dat = 0;</p><p>  for (i=8;i>0;i--

39、)</p><p><b>  {</b></p><p>  DATA = 0; // 給脈沖信號(hào)</p><p><b>  dat>>=1;</b></p><p>  DATA = 1; // 給脈沖信號(hào)</p><p><b>  if(DAT

40、A)</b></p><p>  dat|=0x80;</p><p><b>  delay(8);</b></p><p><b>  }</b></p><p>  return(dat);</p><p><b>  }</b><

41、;/p><p>  WriteOneChar(unsigned char dat)//寫(xiě)一個(gè)字節(jié)</p><p><b>  {</b></p><p>  uchar i=0;</p><p>  for (i=8; i>0; i--)</p><p><b>  {</b&

42、gt;</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>

43、>=1;</b></p><p><b>  }</b></p><p><b>  delay(8);</b></p><p><b>  }</b></p><p>  4.2.6 讀取溫度</p><p>  int ReadTe

44、mperature(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;</

45、p><p>  Init_DS18B20();</p><p>  WriteOneChar(0xCC); // 跳過(guò)讀序號(hào)列號(hào)的操作</p><p>  WriteOneChar(0x44); // 啟動(dòng)溫度轉(zhuǎn)換</p><p>  Init_DS18B20();</p><p>  WriteOneChar(0xCC)

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

47、;/p><p><b>  t<<=8;</b></p><p><b>  t=t|a;</b></p><p>  tt=t*0.0625;</p><p>  t= tt*10+0.5; </p><p>  return(t);</p><

48、p><b>  }</b></p><p>  4.2.7 數(shù)碼管顯示</p><p><b>  P0=0xff;</b></p><p>  P2=0xf2; //顯示小數(shù)點(diǎn)</p><p>  P0=0x7f; //顯示小數(shù)點(diǎn)</p><p>  delay(30

49、0);</p><p>  P2=0xf0; // 初始燈為滅的</p><p><b>  P0=0xff;</b></p><p>  P2=0xf8; //片選LCD1</p><p>  P0=table[buf[1]];</p><

50、;p>  delay(300);</p><p><b>  P2=0xf0;</b></p><p><b>  P0=0xff;</b></p><p>  P2=0xf4; //片選LCD2</p><p>  P0=table[buf[2]];</p

51、><p>  delay(300);</p><p><b>  P2=0xf0;</b></p><p><b>  P0=0xff;</b></p><p>  P2=0Xf2; //片選LCD3</p><p>  P0=table[buf

52、[3]];</p><p>  delay(300);</p><p><b>  P2=0xf0;</b></p><p><b>  P0=0xff;</b></p><p><b>  P2=0Xf1;</b></p><p>  P0=table

53、[buf[0]]; //片選LCD4</p><p>  delay(300);</p><p><b>  P2=0xf0;</b></p><p><b>  }</b></p><p>  4.3、電路硬件設(shè)計(jì)及Proteus軟件仿真</p><p>  4.3

54、.1、時(shí)鐘電路與復(fù)位電路</p><p>  8k字節(jié)Flash,256字節(jié)RAM, 32 位I/O 口線,看門(mén)狗定時(shí)器,2 個(gè)數(shù)據(jù)指針,三個(gè)16 位 定時(shí)器/計(jì)數(shù)器,一個(gè)6向量2級(jí)中斷結(jié)構(gòu),全雙工串行口, 片內(nèi)晶振及時(shí)鐘電路。另外,AT89S52 可降至0Hz 靜態(tài)邏 輯操作,支持2種軟件可選擇節(jié)電模式。空閑模式下,CPU 停止工作,允許RAM、定時(shí)器/計(jì)數(shù)器、串口、中斷繼續(xù)工 作。掉電保護(hù)方式下,RAM內(nèi)容被

55、保存,振蕩器被凍結(jié),單片機(jī)一切工作停止,直到下一個(gè)中斷或硬件復(fù)位為止。8 位微控制器 8K 字節(jié)在系統(tǒng)可編程 Flash AT89S52</p><p>  圖5.時(shí)鐘電路與復(fù)位電路</p><p>  4.3.2數(shù)碼管顯示</p><p>  圖6.數(shù)碼顯示部分仿真圖</p><p>  其中P0.0~P0.7分別控制數(shù)碼管的管段、小數(shù)點(diǎn)。

56、P2.0~P2.3分別控制片選位,丄拉電阻為4.7KΩ,上拉就是將不確定的信號(hào)通過(guò)一個(gè)電阻鉗位在高電平,電阻同時(shí)起限流作用,上拉電阻是用來(lái)解決總線驅(qū)動(dòng)能力不足時(shí)提供電流的問(wèn)題的。一般說(shuō)法是上拉增大電流,下拉電阻是用來(lái)吸收電流。數(shù)碼管為4位共陽(yáng)極數(shù)碼管。</p><p><b>  4.3.3鍵位控制</b></p><p>  圖7.鍵位控制部分仿真圖</p&g

57、t;<p>  如圖,P1.6、P1.7及P2.4~P2.7管腳為設(shè)置溫度閾值,發(fā)光二極管D5、D6為設(shè)置時(shí)的指示燈,D1、D2分別為超過(guò)超過(guò)最高設(shè)定溫度時(shí)的報(bào)警燈和低于最低設(shè)置溫度時(shí)的報(bào)警燈。</p><p>  4.3.4、總仿真圖</p><p>  圖8.總仿真圖 </p><p><b>  5、設(shè)計(jì)結(jié)果及分析<

58、/b></p><p>  系統(tǒng)的性能調(diào)試以(1、主程序)為主。硬件調(diào)試比較簡(jiǎn)單,首先檢查電路的焊接是否正確,然后用萬(wàn)用表測(cè)試。軟件調(diào)試可以先編寫(xiě)顯示程序并進(jìn)行硬件的正確性檢驗(yàn),然后分別進(jìn)行主程序、從程序的編寫(xiě)和調(diào)試,由于DS18B20與單片機(jī)采用串行數(shù)據(jù)傳送,因此對(duì)DS18B20進(jìn)行編程時(shí)必須嚴(yán)格地保證讀寫(xiě)時(shí)序,否則將無(wú)法讀取測(cè)量結(jié)果。</p><p>  性能測(cè)試可用制作的溫度計(jì)

59、和已有的成品溫度計(jì)來(lái)同時(shí)測(cè)量比較,由于DS18B20精度較高,所以誤差指標(biāo)可以限制在0.1°C以內(nèi),另外,-55°C至+125°C的測(cè)溫范圍使得該溫度計(jì)完全適用于一般的應(yīng)用場(chǎng)合,其低電壓供電的特性可做成電池供電的手持電子溫度計(jì)。</p><p><b>  6、總結(jié)及心得體會(huì)</b></p><p>  兩個(gè)星期的課程設(shè)計(jì),從了解各個(gè)芯片

60、的性能特點(diǎn)到合理設(shè)計(jì)硬件電路,從從數(shù)字溫度計(jì)設(shè)計(jì)方案框圖到編寫(xiě)相應(yīng)的程序,從proteus仿真到模塊焊接,再到系統(tǒng)性能調(diào)試。每一步都深深地體會(huì)到其中的不容易。</p><p>  開(kāi)始設(shè)計(jì)方案時(shí),必須熟悉原件的特點(diǎn),引腳的含義,這都靠自己翻閱書(shū)籍和上網(wǎng)查找。為后面的總體設(shè)計(jì)打好基礎(chǔ)。編寫(xiě)程序必須與Proteus相結(jié)合,才能保證程序的準(zhǔn)確性。模塊焊接就是考驗(yàn)?zāi)愕膭?dòng)手能力。這過(guò)程中,需要耐心,耐心,再耐心,細(xì)心,細(xì)心

61、,再細(xì)心。最后的性能調(diào)試,不斷發(fā)現(xiàn)問(wèn)題,然后解決問(wèn)題。</p><p>  這次課程設(shè)計(jì)很好地全方位地培養(yǎng)了我們的能力,我們的專業(yè)知識(shí),動(dòng)手能力,獨(dú)立工作能力與創(chuàng)造力,書(shū)寫(xiě)技術(shù)報(bào)告和編制技術(shù)資料的能力。在專業(yè)知識(shí)與研究方法方面為日后的畢業(yè)設(shè)計(jì)乃至畢業(yè)后的工作奠定良好的基礎(chǔ)</p><p>  根據(jù)設(shè)計(jì),基于單片機(jī)的數(shù)字溫度計(jì)由單片機(jī)控制器,電源,顯示電路,溫度傳感器,復(fù)位電路和時(shí)鐘電路組成

62、。制作簡(jiǎn)單,測(cè)溫范圍在10度到32度。根據(jù)情況,加入設(shè)置溫度上限和下限的功能以及溫度報(bào)警器,誤差范圍控制在0.1℃。這樣會(huì)使這個(gè)設(shè)計(jì)應(yīng)用更廣,性價(jià)比更高。</p><p>  針對(duì)編寫(xiě)好的程序進(jìn)行軟件調(diào)試,在proteus軟件中模擬,電路溫度測(cè)試正常。證明系統(tǒng)程序編寫(xiě)正確。</p><p>  根據(jù)設(shè)計(jì)的電路圖焊接實(shí)物。針對(duì)個(gè)各種芯片的引腳特點(diǎn)檢查硬件焊接是否正確。</p>

63、<p>  性能調(diào)試過(guò)程中出現(xiàn)的問(wèn)題及解決方案</p><p> ?。?)LED數(shù)碼管只顯示初始溫度85℃。檢查DS18B20溫度傳感器。發(fā)現(xiàn)焊接電路沒(méi)有問(wèn)題,重新焊接。溫度顯示仍然是85℃,最后發(fā)現(xiàn)是傳感器燒壞,更換后顯示正常。</p><p> ?。?)LED數(shù)碼管顯示不全亮度不夠。檢查L(zhǎng)ED數(shù)碼管焊接電路。</p><p> ?。?)在proteus

64、模擬的電路圖,在實(shí)際焊接時(shí),并不可行。必須查找芯片對(duì)應(yīng)的引腳功能。</p><p><b>  參考文獻(xiàn)</b></p><p>  [1] 倪曉軍.單片機(jī)原理與接口技術(shù)教程.北京:清華大學(xué)出版社,2009</p><p>  [2] 林立 張俊亮 《單片機(jī)原理及應(yīng)用》 北京:電子工業(yè)出版社,2009</p><p

65、>  [3]  李廣弟.單片機(jī)基礎(chǔ). 北京:北京航空航天大學(xué)出版社,1994</p><p><b>  7、附錄</b></p><p><b>  (1)、元器件清單</b></p><p>  表1 基于AT89S52單片機(jī)的數(shù)字溫度計(jì)元件清單</p><p><b> ?。?

66、)、源程序:</b></p><p>  #include<reg52.h></p><p>  #include <intrins.h></p><p>  #define uchar unsigned char </p><p>  #define uint unsigned int<

67、;/p><p>  sbit DATA = P1^1; //DS18B20接入口</p><p>  uchar code table[]={0xc0,0xf9,0xa4,0xB0,0x99, 0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xc6,0xc1,0x86,0x8e};//共陰極字型碼</p><p>  int temp; /

68、/溫度值</p><p>  int ss;//中間的一個(gè)變量</p><p><b>  int dd;</b></p><p><b>  int j;</b></p><p>  uchar data b;//定時(shí)器中斷次數(shù)</p><p>  uchar data

69、 buf[4];//字型顯示中間變量</p><p>  int alarmH=300; //默認(rèn)報(bào)警值</p><p>  int alarmL=100;</p><p>  //定義開(kāi)關(guān)的接入口</p><p>  sbit k1=P2^5;//+</p><p>  sbit k2=P2^6;//-<

70、;/p><p>  sbit k3=P2^7;//確認(rèn)</p><p>  sbit k4=P2^4; //切換</p><p>  sbit bell=P1^0; //蜂鳴器</p><p>  sbit HLight=P1^2; //正溫指示燈</p><p>  sbit LLight=P1^3; //負(fù)溫

71、度指示燈</p><p>  sbit warn=P1^4; //報(bào)警指示燈</p><p>  sbit Red=P1^6; //溫度上限設(shè)置指示燈</p><p>  sbit Green=P1^7; //溫度下限設(shè)置指示燈</p><p>  bit set=0;//初始化</p><p>  bi

72、t Flag=0;//設(shè)置標(biāo)志</p><p><b>  int n;</b></p><p><b>  //函數(shù)的聲明區(qū)</b></p><p>  void key_to1();</p><p>  void key_to2();</p><p>  void de

73、lay(uint); </p><p>  void key();</p><p>  void Show();</p><p><b>  //函數(shù)的定義區(qū)</b></p><p><b>  /*延時(shí)子函數(shù)*/</b></p><p>  void delay(uint

74、num)</p><p><b>  {</b></p><p>  while(num--) ;</p><p><b>  }</b></p><p>  //DS18b20溫度傳感器所需函數(shù),分為初始化,讀寫(xiě)字節(jié),讀取溫度4個(gè)函數(shù)</p><p>  Init_DS18

75、B20(void) //傳感器初始化</p><p><b>  {</b></p><p>  uchar x=0;</p><p>  DATA = 1; //DQ復(fù)位</p><p>  delay(10); //稍做延時(shí)</p><p>  DATA = 0; //單

76、片機(jī)將DQ拉低</p><p>  delay(80); //精確延時(shí) 大于 480us //450</p><p>  DATA = 1; //拉高總線</p><p>  delay(20);</p><p>  x=DATA; //稍做延時(shí)后 如果x=0則初始化成功 x=1則初始化失敗</p><

77、;p>  delay(30);</p><p><b>  }</b></p><p>  ReadOneChar(void) //讀一個(gè)字節(jié)</p><p><b>  {</b></p><p>  uchar i=0;</p><p>  uchar dat =

78、 0;</p><p>  for (i=8;i>0;i--)</p><p><b>  {</b></p><p>  DATA = 0; // 給脈沖信號(hào)</p><p><b>  dat>>=1;</b></p><p>  DATA = 1; /

79、/ 給脈沖信號(hào)</p><p><b>  if(DATA)</b></p><p>  dat|=0x80;</p><p><b>  delay(8);</b></p><p><b>  }</b></p><p>  return(dat);&

80、lt;/p><p><b>  }</b></p><p>  WriteOneChar(unsigned char dat)//寫(xiě)一個(gè)字節(jié)</p><p><b>  {</b></p><p>  uchar i=0;</p><p>  for (i=8; i>0;

81、 i--)</p><p><b>  {</b></p><p><b>  DATA = 0;</b></p><p>  DATA = dat&0x01;</p><p>  delay(10);</p><p><b>  DATA = 1;<

82、/b></p><p><b>  dat>>=1;</b></p><p><b>  }</b></p><p><b>  delay(8);</b></p><p><b>  }</b></p><p>

83、  int ReadTemperature(void) //讀取溫度</p><p><b>  {</b></p><p>  uchar a=0;</p><p>  uchar b=0;</p><p><b>  int t=0;</b></p><p>  floa

84、t tt=0;</p><p>  Init_DS18B20();</p><p>  WriteOneChar(0xCC); // 跳過(guò)讀序號(hào)列號(hào)的操作</p><p>  WriteOneChar(0x44); // 啟動(dòng)溫度轉(zhuǎn)換</p><p>  Init_DS18B20();</p><p>  WriteO

85、neChar(0xCC); //跳過(guò)讀序號(hào)列號(hào)的操作</p><p>  WriteOneChar(0xBE); //讀取溫度寄存器等(共可讀9個(gè)寄存器) 前兩個(gè)就是溫度</p><p>  a=ReadOneChar();//低位</p><p>  b=ReadOneChar();//高位</p><p><b>  t=b;&

86、lt;/b></p><p><b>  t<<=8;</b></p><p><b>  t=t|a;</b></p><p>  tt=t*0.0625;</p><p>  t= tt*10+0.5; </p><p>  return(t);<

87、/p><p><b>  }</b></p><p>  void display00() //*********顯示負(fù)值子函數(shù)</p><p><b>  {</b></p><p>  dd=-(temp-1);</p><p>  buf[1]=dd/100;&

88、lt;/p><p>  buf[2]=dd/100;</p><p>  buf[3]=dd%100/10;</p><p>  buf[0]=dd%10;</p><p><b>  //動(dòng)態(tài)顯示</b></p><p>  for(j=0;j<5;j++)</p><p&

89、gt;<b>  {</b></p><p>  P2=0xf0; // 初始燈為滅的</p><p><b>  P0=0xff;</b></p><p>  P2=0xf2; //顯示小數(shù)點(diǎn)</p><p>  P0=0x7f; //顯示小數(shù)點(diǎn)</p>

90、<p>  delay(300);</p><p>  P2=0xf0; // 初始燈為滅的</p><p><b>  P0=0xff;</b></p><p>  P2=0xf8; //片選LCD1</p><p><b>  P0=0

91、xbf;</b></p><p>  delay(300);</p><p><b>  P2=0xf0;</b></p><p><b>  P0=0xff;</b></p><p>  P2=0xf4; //片選LCD2</p><p

92、>  P0=table[buf[2]];</p><p>  delay(300);</p><p><b>  P2=0xf0;</b></p><p><b>  P0=0xff;</b></p><p>  P2=0Xf2; //片選LCD3</p><p>

93、;  P0=table[buf[3]];</p><p>  delay(300);</p><p><b>  P2=0xf0;</b></p><p><b>  P0=0xff;</b></p><p><b>  P2=0Xf1;</b></p><

94、p>  P0=table[buf[0]]; //片選LCD4</p><p>  delay(300);</p><p><b>  P2=0xf0;</b></p><p><b>  }</b></p><p><b>  }</b></p>&

95、lt;p><b>  //顯示正值子函數(shù)</b></p><p>  void display()</p><p><b>  {</b></p><p>  buf[1]=temp/1000;//顯示百位</p><p>  buf[2]=temp/100%10;//顯示十位</

96、p><p>  buf[3]=temp%100/10;//顯示個(gè)位</p><p>  buf[0]=temp%10; //小數(shù)位</p><p>  for(j=0;j<3;j++) </p><p><b>  {</b></p><p>  P2=0xf0; /

97、/ 初始燈為滅的</p><p><b>  P0=0xff;</b></p><p>  P2=0xf2; //顯示小數(shù)點(diǎn)</p><p>  P0=0x7f; //顯示小數(shù)點(diǎn)</p><p>  delay(300);</p><p>  P2=0xf0; //

98、 初始燈為滅的</p><p><b>  P0=0xff;</b></p><p>  P2=0xf8; //片選LCD1</p><p>  P0=table[buf[1]];</p><p>  delay(300);</p><p><b>  P2

99、=0xf0;</b></p><p><b>  P0=0xff;</b></p><p>  P2=0xf4; //片選LCD2</p><p>  P0=table[buf[2]];</p><p>  delay(300);</p><p><

100、b>  P2=0xf0;</b></p><p><b>  P0=0xff;</b></p><p>  P2=0Xf2; //片選LCD3</p><p>  P0=table[buf[3]];</p><p>  delay(300);</p><p><b&g

101、t;  P2=0xf0;</b></p><p><b>  P0=0xff;</b></p><p><b>  P2=0Xf1;</b></p><p>  P0=table[buf[0]]; //片選LCD4</p><p>  delay(300);</p>

102、<p><b>  P2=0xf0;</b></p><p><b>  }</b></p><p>  if (temp>alarmH )</p><p>  {HLight=1;LLight=0;}</p><p>  else if(temp<alarmL

103、)</p><p>  {HLight=0;LLight=1;}</p><p><b>  else</b></p><p>  {HLight=0;LLight=0;}</p><p><b>  }</b></p><p>  void key()//按鍵掃描子

104、程序</p><p>  { if(k1!=1)</p><p><b>  {</b></p><p>  delay(20);</p><p><b>  if(k1!=1)</b></p><p><b>  {</b></p>

105、<p>  while(k1!=1)</p><p>  { key_to1();</p><p>  for(n=0;n<8;n++)</p><p><b>  Show();</b></p><p><b>  }</b></p><p><b&g

106、t;  }</b></p><p><b>  }</b></p><p><b>  if(k2!=1)</b></p><p><b>  {</b></p><p>  delay(20);</p><p><b>  if(

107、k2!=1)</b></p><p><b>  {</b></p><p>  while(k2!=1)</p><p>  { key_to2(); </p><p>  for(n=0;n<8;n++)</p><p><b>  Show();</b>

108、;</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  } </b></p><p><b>  if(k3!=1)</b></p><p>  {TR0=1; //復(fù)位,

109、開(kāi)定時(shí)</p><p>  temp=ReadTemperature();</p><p><b>  }</b></p><p><b>  if(k4!=1)</b></p><p>  { delay(20);</p><p><b>  if(k4!=1)

110、</b></p><p>  { while(k4!=1);</p><p><b>  set=!set;</b></p><p>  if(set==0)</p><p>  { Red=0;Green=1;}</p><p>  else { Green=0;Red=1;}&l

111、t;/p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  void key_to1()</p><p><b>  {</b></p>&

112、lt;p>  TR0=0; //關(guān)定時(shí)器</p><p><b>  temp+=10;</b></p><p>  if(temp>=1100)</p><p>  {temp=-550;}</p><p>  if(set==0)</p><p>  {alarmH=

113、temp;}</p><p>  else {alarmL=temp;}</p><p><b>  }</b></p><p>  void key_to2()</p><p><b>  {</b></p><p><b>  TR0=0;</b>

114、</p><p><b>  //關(guān)定時(shí)器</b></p><p><b>  temp-=10;</b></p><p>  if(temp<=-550)</p><p>  {temp=1100;}</p><p>  if(set==0)</p>&

115、lt;p>  { alarmH=temp;}</p><p>  else { alarmL=temp;}</p><p><b>  }</b></p><p>  void alarm(void)</p><p><b>  {</b></p><p>  if(t

116、emp>alarmH||temp<alarmL) </p><p>  { //bell=1;</p><p>  //delay(50);</p><p><b>  //bell=0;</b></p><p><b>  Flag=1;</b></p><p&

117、gt;  }else {Flag=0;}</p><p><b>  }</b></p><p>  logo()//開(kāi)機(jī)的Logo </p><p>  { P0=0x40;</p><p><b>  P2=0xf7;</b></p><p>  delay(50)

118、;</p><p><b>  P2=0xfb;</b></p><p>  delay(50);</p><p><b>  P2=0Xfd;</b></p><p>  delay(50);</p><p><b>  P2=0Xfe;</b><

119、;/p><p>  delay(50);</p><p>  P1 = 0xff; //關(guān)閉顯示</p><p><b>  }</b></p><p>  void Show() //顯示函數(shù),分別表示溫度正負(fù)值</p><p>  { if(temp>=0)<

120、/p><p>  {display();}</p><p>  if(temp<0)</p><p>  {display00();}</p><p><b>  }</b></p><p>  void main()</p><p><b>  {<

121、/b></p><p>  TCON=0x01; //定時(shí)器T0工作在01模式下</p><p>  TMOD=0X01;</p><p>  TH0=0XD8;//裝入初值</p><p><b>  TL0=0XF0;</b></p><p>  EA=1; //開(kāi)總中斷</p

122、><p>  ET0=1; //開(kāi)T0中斷</p><p>  TR0=1; //T0開(kāi)始運(yùn)行計(jì)數(shù)</p><p>  EX0=1; //開(kāi)外部中斷0</p><p>  for(n=0;n<500;n++)//顯示啟動(dòng)LOGo"- - - -"</p><p>  {bell=1;warn=1;

123、logo();}</p><p><b>  Red=0;</b></p><p><b>  while(1)</b></p><p><b>  {</b></p><p><b>  key(); </b></p><p> 

124、 ss=ReadTemperature();</p><p><b>  Show();</b></p><p>  alarm(); //報(bào)警函數(shù)</p><p>  if(Flag==1)</p><p>  {bell=!bell;</p><p>  warn=!warn;} //蜂

125、鳴器滴滴響</p><p>  else {bell=1;</p><p><b>  warn=1;}</b></p><p><b>  } </b></p><p><b>  }</b></p><p>  void time0(void)

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫(kù)僅提供信息存儲(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)論