版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p> 課 題: 基于51單片機(jī)數(shù)字溫度計(jì)設(shè)計(jì) </p><p> 專 業(yè): 電氣工程及其自動(dòng)化</p><p> 班 級(jí): </p><p><b> 學(xué) 號(hào):</b></p><p><b> 姓 名: </b>&
2、lt;/p><p> 指導(dǎo)教師: </p><p> 設(shè)計(jì)日期: 2013 年 6 月 10 日</p><p><b> 成 績(jī):</b></p><p><b> 目錄</b></p><p> 一. 設(shè)計(jì)目的作用---------------
3、----------------------------------1</p><p> 二. 設(shè)計(jì)要求-----------------------------------------------------1</p><p> 三. 設(shè)計(jì)的具體實(shí)現(xiàn)-----------------------------------------------1</p><p>
4、; 3.1、系統(tǒng)概述-----------------------------------------------1</p><p> 3.2、單元電路設(shè)計(jì)與分析-------------------------------------2</p><p> 3.2.1. STC89C52RC單片機(jī)的引腳圖---------------------2</p><p&
5、gt; 3.2.2. 51單片機(jī)的內(nèi)部結(jié)構(gòu):-------------------------2</p><p> 3.2.3. 單片機(jī)的晶振電路:----------------------------3</p><p> 3.2.4. 單片機(jī)的復(fù)位電路:----------------------------4</p><p> 3.2.5. 顯示器件(
6、二位一體共陽(yáng)極數(shù)碼管)--------------4</p><p> 3.2.6. 溫度傳感器DS18B20----------------------------6</p><p> 3.2.7. LED燈報(bào)警顯示--------------------------------8</p><p> 四. 總結(jié)------------------------
7、---------------------------------9</p><p> 五. 附錄--------------------------------------------------------10</p><p> 5.1、元器件明細(xì)表:-----------------------------------------10</p><p>
8、5.2、主控芯片程序:-----------------------------------------11</p><p> 5.3、基于51單片機(jī)的數(shù)字溫度計(jì)設(shè)計(jì)電路圖:------------------18</p><p> 六. 參考文獻(xiàn) ---------------------------------------------------19</p><
9、p> 基于51單片機(jī)數(shù)字溫度計(jì)設(shè)計(jì)報(bào)告</p><p><b> 一、設(shè)計(jì)目的作用</b></p><p> 1、掌握51單片機(jī)電路的設(shè)計(jì)原理、組裝與調(diào)試方法。</p><p> 2、掌握DS18B20溫度傳感器的工作原理及使用方法。</p><p><b> 二、設(shè)計(jì)要求</b>&
10、lt;/p><p> 利用所提供單片機(jī),根據(jù)要求完成相應(yīng)的設(shè)計(jì)、制作及調(diào)試,</p><p> ?。?).設(shè)計(jì)要有燈光和聲音的報(bào)警裝置。</p><p> (2).要求利用二位一體數(shù)碼管顯示。</p><p> ?。?).設(shè)計(jì)用proteus進(jìn)行仿真,修改。</p><p><b> 三、設(shè)計(jì)的具體實(shí)現(xiàn)&l
11、t;/b></p><p><b> 3.1、系統(tǒng)概述</b></p><p> 隨著時(shí)代的進(jìn)步和發(fā)展,單片機(jī)技術(shù)已經(jīng)普及到我們生活,工作,科研,各個(gè)領(lǐng)域,已經(jīng)成為一種比較成熟的技術(shù)。本設(shè)計(jì)是基于51單片機(jī)控制的數(shù)字溫度計(jì)。</p><p> 本溫度計(jì)屬于多功能溫度計(jì),可以設(shè)置雙上下限報(bào)警溫度,當(dāng)溫度低于或高于設(shè)置溫度范圍時(shí),可以進(jìn)
12、行不同情況的聲音報(bào)警和燈光顯示。在正常情況下LED燈和蜂鳴器都不工作,數(shù)碼管顯示當(dāng)前的溫度值,可以精確到0.1度。</p><p> 本系統(tǒng)采用STC89C52單片機(jī)作為主控芯片,DS18B20數(shù)字溫度傳感器作為溫度采集器件,運(yùn)用蜂鳴器作為報(bào)警器,LED燈作為閃爍指示燈,二位一體共陽(yáng)數(shù)碼管作為溫度顯示器件。</p><p> 3.2、 單元電路設(shè)計(jì)與分析</p>
13、<p> 3.2.1. STC89C52RC單片機(jī)的引腳圖:</p><p> 3.2.2. 51單片機(jī)的內(nèi)部結(jié)構(gòu):</p><p> ?。?)電源引腳VCC和GND:</p><p> VCC(40腳):電源端,+5伏</p><p> GND(20腳):接地端</p><p> ?。?)時(shí)鐘電
14、路引腳XTAL1和XTAL2</p><p> XTAL1(18腳)和XTAL2(19腳):接外部晶體和微調(diào)晶體。在89C52中,它們分別是震蕩電路反向放大器的輸入端和輸出端,震蕩電路的頻率就是晶體固有頻率。</p><p> ?。?)控制引腳信號(hào)RST,EA</p><p> RST/VpD(9腳):RST是復(fù)位信號(hào)輸入端,高電平有效。此引腳的第二功能是VpD
15、,即備用電源的輸入端。</p><p> EA/Vpp(31腳):外部程序存儲(chǔ)器地址輸入端/固化編程電壓輸入端。當(dāng)輸入信號(hào)EA引腳接高電平時(shí),CPU只訪問片內(nèi)EPROM/ROM并執(zhí)行內(nèi)部程序存儲(chǔ)器中的指令,但是當(dāng)PC超過0FFFH時(shí),將自動(dòng)轉(zhuǎn)去執(zhí)行片外程序存儲(chǔ)器中的內(nèi)容。當(dāng)輸入信號(hào)EA引腳接低電平時(shí),CPU只訪問外部EPROM/ROM并執(zhí)行外部程序存儲(chǔ)器中的指令,而不管是否具有片內(nèi)程序存儲(chǔ)器。此引腳的第二功能V
16、pp是對(duì)片內(nèi)EPROM固化編程時(shí),作為施加較高編程電壓的輸入端。</p><p> ?。?)輸入/輸出端口P0,P1,P2和P3</p><p> P0口(P0.0-P0.7,39-32腳):一個(gè)8為準(zhǔn)雙向I/O端口。當(dāng)P0口作為輸入口使用時(shí),應(yīng)首先向鎖存器(地址80H)寫入全1,此時(shí)P0口的全部引腳懸空,可作為高阻抗輸入。在CPU訪問片外存儲(chǔ)器時(shí),P0口分時(shí)提供低8位地址和8位數(shù)據(jù)的復(fù)
17、位總線。 P0口的地址/數(shù)據(jù)分時(shí)使用分兩種情況:一種是用作輸出地址/數(shù)據(jù)總線,另一種是由P0口輸入數(shù)據(jù)。而且P0口作I/O輸出時(shí),輸出級(jí)屬開漏電路,必須接上拉電阻,才有高電平輸出。</p><p> P1口、P2口(P1.0-P1.7,1-8腳;P2.0-p2.7,21-28腳):都是上拉電阻的8位準(zhǔn)雙向I/O端口。每一位可以驅(qū)動(dòng)4個(gè)LS型TTL負(fù)載。在訪問片外EPROM/ROM時(shí),P2口可以輸出高8位地址。&
18、lt;/p><p> P3口(P3.0-P3.7,10-17腳):P3口是一個(gè)帶內(nèi)部上拉電阻的8位準(zhǔn)雙向I/O端口。P3每一位都能驅(qū)動(dòng)4個(gè)LS型TTL負(fù)載。P3口的引腳還具有第二功能。</p><p> 3.2.3. 單片機(jī)的晶振電路:</p><p> 3.2.4. 單片機(jī)的復(fù)位電路:</p><p> 3.2.5. 顯示器件(二位一體
19、共陽(yáng)極數(shù)碼管)</p><p> 共陽(yáng)極數(shù)碼管的顯示原理: </p><p> 數(shù)碼管按段數(shù)分為七段數(shù)碼管和八段數(shù)碼管,八段數(shù)碼管比七段數(shù)碼管多一個(gè)發(fā)光二極管單元(多一個(gè)小數(shù)點(diǎn)顯示);按能顯示多少個(gè)“8”可分為1位、2位、4位等等數(shù)碼管;按發(fā)光二極管單元連接方式分為共陽(yáng)極數(shù)碼管和共陰極數(shù)碼管。共陽(yáng)數(shù)碼管是指將所有發(fā)光二極管的陽(yáng)極接到一起形成公共陽(yáng)極(COM)的數(shù)碼管。共陽(yáng)數(shù)碼管在應(yīng)用時(shí)
20、應(yīng)將公共極COM接到+5V,當(dāng)某一字段發(fā)光二極管的陰極為低電平時(shí),相應(yīng)字段就點(diǎn)亮。當(dāng)某一字段的陰極為高電平時(shí),相應(yīng)字段就不亮。</p><p><b> 等效電路:</b></p><p> 字形代碼與十六進(jìn)制數(shù)的對(duì)應(yīng)關(guān)系</p><p><b> 數(shù)碼管的驅(qū)動(dòng)方式</b></p><p>
21、 數(shù)碼管要正常顯示,就要用驅(qū)動(dòng)電路來驅(qū)動(dòng)數(shù)碼管的各個(gè)段碼,從而顯示出我們要的數(shù)字,因此根據(jù)數(shù)碼管的驅(qū)動(dòng)方式的不同,可以分為靜態(tài)式和動(dòng)態(tài)式兩類。本設(shè)計(jì)采用動(dòng)態(tài)顯示驅(qū)動(dòng)。</p><p><b> 動(dòng)態(tài)顯示驅(qū)動(dòng)原理:</b></p><p> 數(shù)碼管動(dòng)態(tài)顯示接口是單片機(jī)中應(yīng)用最為廣泛的一種顯示方式之一,動(dòng)態(tài)驅(qū)動(dòng)是將所有數(shù)碼管的8個(gè)顯示筆劃“a,b,c,d,e,f,g,
22、dp”的同名端連在一起,另外為每個(gè)數(shù)碼管的公共極COM增加位選通控制電路,位選通由各自獨(dú)立的I/O線控制,當(dāng)單片機(jī)輸出字形碼時(shí),所有數(shù)碼管都接收到相同的字形碼,但究竟是那個(gè)數(shù)碼管會(huì)顯示出字形,取決于單片機(jī)對(duì)位選通COM端電路的控制,所以我們只要將需要顯示的數(shù)碼管的選通控制打開,該位就顯示出字形,沒有選通的數(shù)碼管就不會(huì)亮。通過分時(shí)輪流控制各個(gè)數(shù)碼管的的COM端,就使各個(gè)數(shù)碼管輪流受控顯示,這就是動(dòng)態(tài)驅(qū)動(dòng)。</p><p
23、> 在輪流顯示過程中,每位數(shù)碼管的點(diǎn)亮?xí)r間為1~2ms,由于人的視覺暫留現(xiàn)象及發(fā)光二極管的余輝效應(yīng),盡管實(shí)際上各位數(shù)碼管并非同時(shí)點(diǎn)亮,但只要掃描的速度足夠快,給人的印象就是一組穩(wěn)定的顯示數(shù)據(jù),不會(huì)有閃爍感,動(dòng)態(tài)顯示的效果和靜態(tài)顯示是一樣的,能夠節(jié)省大量的I/O端口,而且功耗更低。</p><p> 3.2.6. 溫度傳感器DS18B20</p><p> 1-wire Bus(
24、單總線)數(shù)字溫度傳感器芯片DS18B20是美國(guó)Datlas半導(dǎo)體公司(現(xiàn)已并入MAXIM公司)于20世紀(jì)90年代新推出的一種串行總線技術(shù)。該技術(shù)只需要一根信號(hào)線(將計(jì)算機(jī)的地址線、數(shù)據(jù)線、控制線合為一根信號(hào)線)便可完成串行通信。單根信號(hào)線,既傳輸時(shí)鐘,又傳輸數(shù)據(jù),而且數(shù)據(jù)傳輸是雙向的,在信號(hào)線上可掛上許多測(cè)控對(duì)象,電源也由這根信號(hào)線供給,所以在單片機(jī)的低速(約100kbps以下的速率)測(cè)控系統(tǒng)中,使用單根總線技術(shù)可以簡(jiǎn)化線路結(jié)構(gòu),減少硬
25、件開銷。</p><p> DS18B20的測(cè)溫原理</p><p> 低溫度系數(shù)晶振的振蕩頻率受溫度影響很小,用于產(chǎn)生固定頻率的脈沖信號(hào)送給計(jì)數(shù)器1。高溫度系數(shù)晶振隨溫度變化其振蕩率明顯改變,所產(chǎn)生的信號(hào)作為計(jì)數(shù)器2的脈沖輸入。計(jì)數(shù)器1和溫度寄存器被預(yù)置在- 55℃所對(duì)應(yīng)的一個(gè)基數(shù)值。計(jì)數(shù)器1對(duì)低溫度系數(shù)晶振產(chǎn)生的脈沖信號(hào)進(jìn)行減法計(jì)數(shù),當(dāng)計(jì)數(shù)器1的預(yù)置值減到0時(shí),溫度寄存器的值將加1
26、,計(jì)數(shù)器1的預(yù)置將重新被裝入,計(jì)數(shù)器1重新開始對(duì)低溫度系數(shù)晶振產(chǎn)生的脈沖信號(hào)進(jìn)行計(jì)數(shù),如此循環(huán)直到計(jì)數(shù)器2計(jì)數(shù)到0時(shí),停止溫度寄存器值的累加,此時(shí)溫度寄存器中的數(shù)值即為所測(cè)溫度。圖中的斜率累加器用于補(bǔ)償和修正測(cè)溫過程中的非線性,其輸出用于修正計(jì)數(shù)器1的預(yù)置值。</p><p> 系統(tǒng)對(duì)DS18B20的操作協(xié)議為:</p><p> 初始化DS18B20→發(fā)ROM功能命令→發(fā)存儲(chǔ)器操作命
27、令→處理數(shù)據(jù)</p><p> 3.2.7. LED燈報(bào)警顯示</p><p> 當(dāng)溫度低于“第一下限”時(shí)D1閃爍;</p><p> 當(dāng)溫度低于“第二下限”時(shí)D1,D2同時(shí)閃爍;</p><p> 當(dāng)溫度高于“第一上限”時(shí)D3閃爍;</p><p> 當(dāng)溫度高于“第二上限”時(shí)D3,D4同時(shí)閃爍。</p
28、><p><b> 四、總結(jié)</b></p><p> 這次的課程設(shè)計(jì)是一波三折,從選擇課題開始就遇到了很多問題,也許有人會(huì)因?yàn)槔苤刂囟鵁o奈放棄。但我卻認(rèn)為這是一次挑戰(zhàn),是一次機(jī)遇。試想人生短短數(shù)十春秋,不讓自己活的富有些激情,讓生命的過程富有些色彩,那不是虛度年華了!</p><p> 2013年6月4日,我們拿到了此次設(shè)計(jì)所需的部分材料
29、,之所以說是部分是因?yàn)樯杏腥龢O管未能領(lǐng)到。而當(dāng)時(shí)由于我們并沒有對(duì)課題進(jìn)行了解,所以并不是很在意這個(gè)元件,后來由這個(gè)元件的缺失造成了我們對(duì)于系統(tǒng)設(shè)計(jì)很大的困擾。</p><p> 首先接到一個(gè)項(xiàng)目肯定是查閱資料,不得不說現(xiàn)在的網(wǎng)絡(luò)確實(shí)很強(qiáng)大,網(wǎng)上有許許多多的類似的設(shè)計(jì)。既然如此我們便可以參照已有的范本進(jìn)行差異化的改動(dòng)以滿足我們?cè)O(shè)計(jì)的需要。</p><p> 由于在此次的課程設(shè)計(jì)中要使用到
30、protues軟件進(jìn)行系統(tǒng)的仿真和調(diào)試,而之前我們并未學(xué)過。所以我花了半天的時(shí)間對(duì)這個(gè)軟件進(jìn)行了基本的學(xué)習(xí),并進(jìn)行了相關(guān)的一些練習(xí),正所謂“磨刀不誤砍材工” ,對(duì)軟件有較為熟練的使用讓我在后續(xù)的系統(tǒng)仿真中進(jìn)行的比較順利。</p><p> 而對(duì)于這次課程設(shè)計(jì)最為重要的部分就是主控芯片程序的編寫。在查閱了大量已有設(shè)計(jì)的程序后收獲卻也不大。對(duì)此我將整個(gè)系統(tǒng)拆分了看。首先是確定好各個(gè)元器件的引腳位置,其次對(duì)DS18B
31、20進(jìn)行初始化操作,并編寫其讀寫和數(shù)據(jù)轉(zhuǎn)化部分,最后是數(shù)碼管,蜂鳴器以及LED燈的配合顯示工作。在這里面由于DS18B20部分的相關(guān)程序有很多現(xiàn)成的。我就沒有在這個(gè)上面做過多的改動(dòng),而顯示這塊由于設(shè)計(jì)的要求,我進(jìn)行了重新的編寫,在這期間一個(gè)致命的錯(cuò)誤--管腳的分配不對(duì)讓我浪費(fèi)了太多的時(shí)間。但就是這樣的一個(gè)小問題卻反映出我在實(shí)際操作中的馬虎,也讓我認(rèn)識(shí)到自己的一些不足。不過好在這次的程序并不是很復(fù)雜。</p><p&g
32、t; 最后是焊接電路板并進(jìn)行最后的調(diào)試,正所謂理論不如實(shí)踐,在焊接的過程中我發(fā)現(xiàn)了太多的問題:</p><p> 數(shù)碼管的編碼問題。由于編碼是在網(wǎng)上找的,由于平時(shí)在網(wǎng)上下載東西都比較可靠,所以這次很相信的就用這個(gè)編碼焊接了,哪知這里就出了問題,網(wǎng)上的編碼完全不對(duì),最后是自己用萬(wàn)用表自己檢測(cè)。</p><p> DS18b20的管腳問題。同上面一樣也是由于過分的相信網(wǎng)上的信息,導(dǎo)致數(shù)碼
33、管顯示一直處于初始化即為85.0度。</p><p> 插座的焊接。由于事先利用萬(wàn)用表測(cè)了高低電位,但卻未能詳盡,就以為插座的最下腳和邊腳的電位是一樣的,又因?yàn)橄履_不好焊接我就將其折去,但通電后后腳和邊腳的電壓只有1.6V遠(yuǎn)遠(yuǎn)達(dá)不到單片機(jī)工作要求。到后來才發(fā)現(xiàn)下腳才是負(fù)極,后腳是正極,而邊角是接地端。</p><p> 蜂鳴器問題。由于本次課程設(shè)計(jì)給的是有源蜂鳴器內(nèi)部有振蕩器只需直接接
34、電源即可。焊接中也利用直流電源給5V外接在外接蜂鳴器兩端會(huì)響,但在焊接的電路上在蜂鳴器的兩端只有3.4V,根據(jù)蜂鳴器的工作電壓在3~5V即可,我在這一方面嘗試了很多次,都未成功,最后只能歸因于缺少了8050三極管。</p><p> 總的來說這次的課程設(shè)計(jì)開放程度很大,讓大家有充分的發(fā)揮空間,但這種方式也有缺陷,因?yàn)閷?duì)于一些本身沒有掌握好相關(guān)知識(shí)的同學(xué)做起來會(huì)比較吃力。所以我的想法是,老師可以給定一些步驟提示和
35、具體的要求,讓大家能夠按照給定的思路進(jìn)行設(shè)計(jì),同時(shí)也允許大家自由發(fā)揮。我想以這樣的方式來安排或許每個(gè)人都會(huì)更有收獲。</p><p><b> 五、附錄</b></p><p> 5.1、使用元器件明細(xì)表:</p><p> 5.2、主控芯片程序:</p><p> #include <reg52.h>
36、;</p><p> #include <stdio.h></p><p> #define uchar unsigned char</p><p> #define uint unsigned int</p><p> sbit ds=P2^2; </p><p> sbit s
37、eg5=P2^6; </p><p> sbit seg10=P2^7; </p><p> sbit seg=P2^5; </p><p> sbit beep=P2^3; </p><p> uint temp; </p><p> float f_temp; &
38、lt;/p><p> uint warn_l1=250;</p><p> uint warn_l2=200;</p><p> uint warn_h1=350;</p><p> uint warn_h2=400;</p><p> sbit led0=P1^0;</p><p>
39、sbit led1=P1^1;</p><p> sbit led2=P1^2;</p><p> sbit led3=P1^3;</p><p> sbit seg0=P3^0; </p><p> sbit seg1=P3^1; </p><p> sbit seg2=P3^2; </p>
40、<p> sbit seg3=P3^3; </p><p> sbit seg4=P3^4; </p><p> sbit seg6=P3^5; </p><p> sbit seg7=P3^6; </p><p> sbit seg8=P3^7; </p><p> uchar code tab
41、le[]={ 0xc0,0xf9,0xa4,0xb0, </p><p> 0x99,0x92,0x82,0xf8, </p><p> 0x80,0x90,0x40,0x79,</p><p> 0x24,0x30,0x19,0x12,</p><p> 0x02,0x78,0x00,0x10 }; </p>
42、<p> void delay(uint z)//延時(shí)函數(shù) </p><p><b> {</b></p><p><b> uint x,y;</b></p><p> for(x=z;x>0;x--)</p><p> for(y=123;y>0;y--);&l
43、t;/p><p><b> }</b></p><p> void dsreset(void) </p><p><b> {</b></p><p><b> uint i;</b></p><p><b> ds=0;</
44、b></p><p><b> i=103;</b></p><p> while(i>0)i--;</p><p><b> ds=1;</b></p><p><b> i=4;</b></p><p> while(i>
45、0)i--;</p><p><b> }</b></p><p> bit tempreadbit(void) </p><p><b> {</b></p><p><b> uint i;</b></p><p><b>
46、bit dat;</b></p><p> ds=0;i++; </p><p> ds=1;i++;i++;</p><p><b> dat=ds;</b></p><p> i=8;while(i>0)i--;</p><p> return (
47、dat);</p><p><b> }</b></p><p> uchar tempread(void) </p><p><b> {</b></p><p> uchar i,j,dat;</p><p><b> dat=0;</b&g
48、t;</p><p> for(i=1;i<=8;i++)</p><p><b> {</b></p><p> j=tempreadbit();</p><p> dat=(j<<7)|(dat>>1); </p><p><b> }&l
49、t;/b></p><p> return(dat);</p><p><b> }</b></p><p> void tempwritebyte(uchar dat) </p><p><b> {</b></p><p><b> uint
50、 i;</b></p><p><b> uchar j;</b></p><p> bit testb;</p><p> for(j=1;j<=8;j++)</p><p><b> {</b></p><p> testb=dat&0
51、x01;</p><p> dat=dat>>1;</p><p> if(testb) //寫 1</p><p><b> {</b></p><p><b> ds=0;</b></p><p><b> i++;i++;<
52、/b></p><p><b> ds=1;</b></p><p> i=8;while(i>0)i--;</p><p><b> }</b></p><p><b> else</b></p><p><b> {&
53、lt;/b></p><p> ds=0; //寫 0</p><p> i=8;while(i>0)i--;</p><p><b> ds=1;</b></p><p><b> i++;i++;</b></p><p><b>
54、 }</b></p><p><b> }</b></p><p><b> }</b></p><p> void tempchange(void) //DS18B20 開始獲取溫度并轉(zhuǎn)換</p><p><b> {</b></p>&
55、lt;p> dsreset();</p><p><b> delay(1);</b></p><p> tempwritebyte(0xcc); // 寫跳過讀ROM指令</p><p> tempwritebyte(0x44); // 寫溫度轉(zhuǎn)換指令</p><p><b> }<
56、/b></p><p> uint get_temp() //讀取寄存器中存儲(chǔ)的溫度數(shù)據(jù)</p><p><b> {</b></p><p> uchar a,b;</p><p> dsreset();</p><p><b> delay(1);&l
57、t;/b></p><p> tempwritebyte(0xcc);</p><p> tempwritebyte(0xbe);</p><p> a=tempread(); //讀低8位</p><p> b=tempread(); //讀高8位</p><p><
58、;b> temp=b;</b></p><p> temp<<=8; //兩個(gè)字節(jié)組合為1個(gè)字</p><p> temp=temp|a;</p><p> f_temp=temp*0.0625; //溫度在寄存器中為12位 分辨率位0.0625°</p><p>
59、; temp=f_temp*10+0.5; //乘以10表示小數(shù)點(diǎn)后面只取1位,加0.5是四舍五入</p><p> f_temp=f_temp+0.05; </p><p> return temp; //temp是整型</p><p><b> }</b></p><p> void
60、display(uchar num,uchar dat)</p><p><b> {</b></p><p> if(num==0)</p><p><b> {</b></p><p><b> seg5=0;</b></p><p><
61、;b> seg=0;</b></p><p><b> seg10=1;</b></p><p> P3=table[dat];</p><p><b> }</b></p><p> if(num==1)</p><p><b>
62、 {</b></p><p><b> seg10=0;</b></p><p><b> seg=0;</b></p><p><b> seg5=1;</b></p><p> P3=table[dat];</p><p>&l
63、t;b> }</b></p><p> if(num==2)</p><p><b> {</b></p><p><b> seg5=0;</b></p><p> seg10=0;</p><p><b> seg=1;<
64、;/b></p><p> P3=table[dat];</p><p><b> } </b></p><p><b> delay(5);</b></p><p><b> }</b></p><p> void dis_temp(u
65、int t)</p><p><b> {</b></p><p><b> uchar i;</b></p><p><b> i=t/100;</b></p><p> display(0,i);</p><p> i=t%100/10;&
66、lt;/p><p> display(1,i+10);</p><p> i=t%100%10;</p><p> display(2,i);</p><p><b> }</b></p><p> void warn(uint s,uchar led) </p><
67、p><b> {</b></p><p> uchar i;i=s;</p><p><b> beep=0;</b></p><p><b> P1=~led;</b></p><p> while(i--)</p><p><b
68、> {</b></p><p> dis_temp(get_temp());</p><p><b> } </b></p><p><b> beep=1;</b></p><p> P1=0X00; </p><p><b>
69、 i=s; </b></p><p> while(i--)</p><p><b> {</b></p><p> dis_temp(get_temp());</p><p><b> } </b></p><p><b> }</
70、b></p><p> void deal(uint t)</p><p><b> {</b></p><p><b> uchar i;</b></p><p> if((t>warn_l2)&&(t<=warn_l1)) </p><
71、;p><b> {</b></p><p> warn(40,0xfe); </p><p><b> }</b></p><p> else if(t<=warn_l2) </p><p><b> {</b>&
72、lt;/p><p> warn(10,0xfc);</p><p><b> }</b></p><p> else if((t<warn_h2)&&(t>=warn_h1)) </p><p><b> {</b></p><p> war
73、n(40,0xfb);</p><p><b> }</b></p><p> else if(t>=warn_h2) </p><p><b> {</b></p><p> warn(10,0xf3);</p><p>&
74、lt;b> }</b></p><p><b> else</b></p><p><b> {</b></p><p><b> i=40;</b></p><p> while(i--)</p><p><b>
75、 {</b></p><p> dis_temp(get_temp());</p><p><b> } </b></p><p><b> }</b></p><p><b> }</b></p><p> void init_
76、com(void)</p><p><b> {</b></p><p> TMOD = 0x20;</p><p> PCON = 0x00;</p><p> SCON = 0x50;</p><p> TH1 = 0xFd;</p><p> TL1 =
77、0xFd;</p><p><b> TR1 = 1;</b></p><p><b> }</b></p><p> void comm(char *parr) </p><p><b> {</b></p><p><b
78、> do</b></p><p><b> {</b></p><p> SBUF = *parr++; //發(fā)送數(shù)據(jù) </p><p> while(!TI);
79、 //等待發(fā)送完成標(biāo)志為1</p><p> TI =0; //標(biāo)志清零</p><p> }while(*parr); //保持循環(huán)直到字符為'\0'</p>
80、;<p><b> }</b></p><p> void main()</p><p><b> {</b></p><p> uchar buff[4],i;</p><p><b> seg5=0;</b></p><p>
81、<b> seg10=0;</b></p><p><b> seg=0;</b></p><p> init_com();</p><p><b> while(1)</b></p><p><b> { </b></p>
82、<p> tempchange();</p><p> for(i=10;i>0;i--)</p><p><b> {</b></p><p> dis_temp(get_temp());</p><p><b> }</b></p><p>
83、 deal(temp); </p><p> sprintf(buff,"%f",f_temp);</p><p> for(i=10;i>0;i--)</p><p><b> {</b></p><p> dis_temp(get_temp());</p><p&
84、gt;<b> }</b></p><p> comm(buff);</p><p> for(i=10;i>0;i--)</p><p><b> {</b></p><p> dis_temp(get_temp());</p><p><b>
85、 } </b></p><p><b> }</b></p><p><b> }</b></p><p> 5.3、基于51單片機(jī)的數(shù)字溫度計(jì)設(shè)計(jì)電路圖:</p><p><b> 六、參考文獻(xiàn)</b></p><p> 1
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 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ì)---基于51單片機(jī)數(shù)字溫度計(jì)設(shè)計(jì)
- 數(shù)字溫度計(jì)課程設(shè)計(jì)---基于51單片機(jī)數(shù)字溫度計(jì)設(shè)計(jì)
- 基于51單片機(jī)的數(shù)字溫度計(jì)課程設(shè)計(jì)
- 單片機(jī)課程設(shè)計(jì)--數(shù)字溫度計(jì)
- 單片機(jī)課程設(shè)計(jì)--數(shù)字溫度計(jì)
- 單片機(jī)課程設(shè)計(jì)-數(shù)字溫度計(jì)
- 單片機(jī)課程設(shè)計(jì)—數(shù)字溫度計(jì)
- 基于51單片機(jī)數(shù)字溫度計(jì)設(shè)計(jì)報(bào)告課程設(shè)計(jì)
- 單片機(jī)數(shù)字溫度計(jì)課程設(shè)計(jì)
- 單片機(jī)課程設(shè)計(jì)---數(shù)字溫度計(jì)
- 單片機(jī)課程設(shè)計(jì)-數(shù)字溫度計(jì)
- 單片機(jī)課程設(shè)計(jì)—數(shù)字溫度計(jì)
- 單片機(jī)課程設(shè)計(jì)——數(shù)字溫度計(jì)
- 單片機(jī)課程設(shè)計(jì)—數(shù)字溫度計(jì)
- 基于單片機(jī)數(shù)字溫度計(jì)課程設(shè)計(jì)
- 單片機(jī)課程設(shè)計(jì)-數(shù)字溫度計(jì)
- 數(shù)字溫度計(jì)--單片機(jī)課程設(shè)計(jì)
- 基于51單片機(jī)的溫度計(jì)課程設(shè)計(jì)
- 單片機(jī)課程設(shè)計(jì)--數(shù)字溫度計(jì)設(shè)計(jì)
- 51單片機(jī)課程設(shè)計(jì)數(shù)字溫度計(jì)報(bào)告
評(píng)論
0/150
提交評(píng)論