版權(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 數(shù)字溫度計(jì)課程設(shè)計(jì)
- 數(shù)字溫度計(jì)課程設(shè)計(jì)
- 數(shù)字溫度計(jì)課程設(shè)計(jì)
- 數(shù)字溫度計(jì)課程設(shè)計(jì)
- 數(shù)字溫度計(jì)課程設(shè)計(jì)
- 課程設(shè)計(jì)-數(shù)字溫度計(jì)
- 課程設(shè)計(jì)---數(shù)字溫度計(jì)設(shè)計(jì)
- 數(shù)字溫度計(jì)課程設(shè)計(jì) (2)
- 數(shù)字溫度計(jì)課程設(shè)計(jì) (2)
- 數(shù)字溫度計(jì)課程設(shè)計(jì) (2)
- 數(shù)字溫度計(jì)的課程設(shè)計(jì)
- 數(shù)字溫度計(jì)課程設(shè)計(jì) (3)
- 數(shù)字溫度計(jì)課程設(shè)計(jì)報(bào)告
- 課程設(shè)計(jì)之?dāng)?shù)字溫度計(jì)
- 數(shù)字溫度計(jì)課程設(shè)計(jì)報(bào)告
- 數(shù)字溫度計(jì)的課程設(shè)計(jì)
- 數(shù)字溫度計(jì)課程設(shè)計(jì) (2)
- 數(shù)字溫度計(jì)課程設(shè)計(jì) (2)
- 數(shù)字溫度計(jì)課程設(shè)計(jì)---基于51單片機(jī)數(shù)字溫度計(jì)設(shè)計(jì)
- 數(shù)字溫度計(jì)課程設(shè)計(jì)---基于51單片機(jī)數(shù)字溫度計(jì)設(shè)計(jì)
評(píng)論
0/150
提交評(píng)論