完整的word格式的畢業(yè)設(shè)計論文從這里下載:
基于單片機(jī)的數(shù)字溫度計.doc
(903.07 KB, 下載次數(shù): 352)
下面是內(nèi)容預(yù)覽:
摘要:隨著科技的發(fā)展,溫度是經(jīng)常遇到的測量參數(shù)。本文介紹了設(shè)計溫度計的基本方法與測量原理,其組成部分有:AT89C52單片機(jī)、溫度傳感器DS18B20、按鍵掃描電路、顯示電路以及報警電路。它可以實時地測量溫度和設(shè)置溫度上下限,完成對被測對象溫度的自動控制。通過測試表明,該設(shè)計對溫度的控制有方便實用、操作簡單的特點,大大提高了被控對象的各種技術(shù)指標(biāo)。
關(guān)鍵詞: AT89C52; DS18B20;報警電路
The Design of Digital Thermometer Based on Single Chip Microcomputer
Abstract: With the development of science and technology, parameters of temperature usually need to measure. This paper introduces design of basic method and measuring principle of the thermometer, its components include AT89C52 single chip computer, temperature sensor DS18B20, button scanning circuit, display circuit and alarm circuit. It can measure temperature in time and set the scope of temperature, and finish to measure temperature automatically. According to our test, the design are convenient and practical, simple operation, and greatly improving all kinds of technical indicators of controlled object.
Key words:AT89C52; DS18B20; Alarm circuit
目錄
由于單片機(jī)具有集成度高,通用性好,功能強(qiáng),尤其體積小,重量輕,耗能低等顯著的優(yōu)勢,因此在日常生活和工業(yè)生產(chǎn)中得到了廣泛應(yīng)用。本課題就是單片機(jī)作為核心器件進(jìn)行設(shè)計的。
1.2課題研究的目的和意義測量溫度的基本方法是使用溫度計直接讀取溫度,如我們大家經(jīng)常使用的體溫計。隨著工業(yè)生產(chǎn)的需要,人們對溫度的測量有了的更高的要求。在迅速發(fā)展的科學(xué)技術(shù)中,前沿技術(shù)是傳感器技術(shù),特別是溫度傳感技術(shù),已經(jīng)滲透到我們生活的各個方面,溫度測量在工業(yè)生產(chǎn)中占有不可或缺的地位,此外在農(nóng)業(yè)生產(chǎn)中也離不開溫度的測量。綜上所述,測量溫度具有舉重若輕的作用。
單片機(jī)在各個領(lǐng)域的應(yīng)用廣泛,而把它作為數(shù)字溫度計的核心部件只是具體應(yīng)用的一個實例。目前,隨著在惡劣的工作環(huán)境下的對測溫技術(shù)的要求,單片機(jī)的發(fā)展越來越受到人們的重視。
1.3國內(nèi)外測溫技術(shù)及單片機(jī)現(xiàn)狀不可否認(rèn),跟發(fā)達(dá)國家相比,我國測溫技術(shù)仍然處于較低水平。一般的測溫技術(shù)只能對較平穩(wěn)的環(huán)境溫度進(jìn)行測量,如果用于惡劣的工作環(huán)境,我國的某些技術(shù)還達(dá)不到要求。但是,隨著我國成為世界第二大經(jīng)濟(jì)體,經(jīng)濟(jì)實力直線上升,我國電子企業(yè)也在蓬勃發(fā)展。
眾所周知,單片機(jī)是集成在一塊芯片上的計算機(jī)系統(tǒng),它擁有計算機(jī)系統(tǒng)的主要部件和功能,如 CPU、并行I/O端口、定時與中斷系統(tǒng)、A/D與D/A轉(zhuǎn)換系統(tǒng)、總線系統(tǒng)。隨著科學(xué)技術(shù)的發(fā)展,現(xiàn)在大部分單片機(jī)功能也更加強(qiáng)大。單片機(jī)還可以連接各種各樣的外圍電路,如定時器、復(fù)位電路、時鐘電路、傳感器等等,我們應(yīng)用單片機(jī)可以對各種各樣的數(shù)據(jù)進(jìn)行采集。如連接溫度傳感器DS18B20等芯片,就可以對被測對象進(jìn)行溫度的測量與檢測。
2系統(tǒng)總體方案設(shè)計2.1系統(tǒng)的設(shè)計指標(biāo)本課題設(shè)計的數(shù)字溫度計要求能夠及時準(zhǔn)確地對被測對象進(jìn)行溫度測量,并將其測得的溫度值顯示在LED數(shù)碼管上,然后與設(shè)定的溫度范圍比較,如果超過溫度限制,則通過蜂鳴器報警,同時報警指示燈閃爍,直到溫度回到規(guī)定的范圍為止。另外,還能夠通過按鍵自己設(shè)置溫度范圍。綜上所述,系統(tǒng)設(shè)計的要求如下:
1.開機(jī)啟動,檢測各元件是否正常工作。
2.正負(fù)溫度辨別(正溫度紅燈亮,負(fù)溫度綠燈亮)。
3.溫度測量的基本范圍是-30℃~125℃。
4.軟件預(yù)設(shè)上限溫度32℃,下限溫度10℃。
5.超過溫度上下限即實現(xiàn)報警功能,報警燈閃爍,蜂鳴器震動并發(fā)聲警示,并在負(fù)溫度時蜂鳴器震動較急促。
6.支持手動按鍵設(shè)置溫度上下限。
2.2系統(tǒng)的實現(xiàn)原理本系統(tǒng)使用溫度傳感器,并與單片機(jī)連接組成溫度測量系統(tǒng),從而完成測量溫度。溫度傳感器對溫度的變化十分敏感,它能夠把測得的溫度及時準(zhǔn)確的轉(zhuǎn)化為一串的電路信號,這時我們可以通過顯示系統(tǒng)將其測得的溫度值顯示出來,供人們讀取和記錄。比如,溫度傳感器DS18B20是一種集成度很高的溫度測量器件,它能夠根據(jù)當(dāng)前溫度環(huán)境的變化產(chǎn)生出一串?dāng)?shù)字信號。顯然,不同的溫度環(huán)境將會有不同的數(shù)字信號,通過該信號能夠準(zhǔn)確的得到當(dāng)前環(huán)境的溫度值,從而完成溫度的測量。
2.3系統(tǒng)的實現(xiàn)方案分析我們同樣利用溫度傳感器DS18B20作為測量器件,由于DS18B20的集成度很高,因此該器件需要的外圍電路非常簡單。并且DS18B20體積小,節(jié)省電路板。此外,DS18B20是高封裝的溫度傳感器,能夠直接和單片機(jī)通信。測溫范圍-55℃~+125℃,固有測溫分辨率0.5℃?垢蓴_能力很強(qiáng)。單片機(jī)作為主要組成器件,但這里采用LED 7位數(shù)碼管進(jìn)行溫度值的顯示,顯示溫度值清晰直觀,易于分辨。并且LED數(shù)碼管占用空間小,經(jīng)濟(jì)實惠。
3 系統(tǒng)硬件設(shè)計3.1 系統(tǒng)總體結(jié)構(gòu)本方案設(shè)計的系統(tǒng)模塊由單片機(jī)系統(tǒng)、溫度傳感器模塊、數(shù)碼管顯示模塊和電源模塊組成,其總體結(jié)構(gòu)如圖1。
該系統(tǒng)是以AT89C52 單片機(jī)為核心,在開始運行它向主機(jī)先發(fā)送初始化命令使DS18B20啟動,再發(fā)送溫度轉(zhuǎn)換命令使數(shù)字溫度傳感器DS18B20 把測得的模擬溫度信號轉(zhuǎn)換為數(shù)字信號供單片機(jī)運算。同時,顯示器上顯示出當(dāng)前環(huán)境的溫度,當(dāng)溫度超出設(shè)定的溫度上下限范圍時,蜂鳴器就會發(fā)出警報。
3.2 AT89C52簡介單片機(jī)經(jīng)過幾十年的蓬勃發(fā)展,目前已經(jīng)是自動控制理論的中流砥柱。對于專業(yè)人員來說,掌握單片機(jī)原理及其應(yīng)用已經(jīng)成為必不可少的一項技能,是專業(yè)人員必備的能力和素質(zhì)之一。單片機(jī)的應(yīng)用十分廣泛,在控制領(lǐng)域、家用電器、食品儲存等方面,都扮演著一個非常重要的角色。
ATMEL公司采用國際先進(jìn)的技術(shù)手段生產(chǎn)的AT89C52單片機(jī)與一般的單片機(jī)有所不同,它不僅是一種8位微控制器,具有低功耗和高性能的特點,還擁有非易失性Flash程序存儲器。它的主要接口與引腳的特點如下。
其引腳圖如圖2所示:
P0口:P0口與其他端口不同,它的輸出級無上拉電阻。作為通用輸出I/O口使用時,輸出級是開漏電路,故用其輸出去驅(qū)動NMOS輸入時外接上拉電阻,上拉電阻一般在10KΩ左右即可。這時每一位輸出可以驅(qū)動4個LS型負(fù)載。用作輸入時,應(yīng)先向端口鎖存器寫1。把P0口用作地址/數(shù)據(jù)總線時,無需外接上拉電阻。作總線輸入時,不需先向端口寫1。P0口作總線時,每一位輸出可以驅(qū)動8個LS型TTL負(fù)載。
P1~P3口:P1~P3口接有上拉負(fù)載電阻,它們的每一位輸出可以驅(qū)動4個LS型TTL負(fù)載。用作輸出口時,任何TTL或NMOS電路都能以正常的方式驅(qū)動89C51系列單片機(jī)的P1~P3口。由于它們的輸出級接有上拉電阻,因此,在使用時無需外接上拉電阻。由于單片機(jī)的端口輸出電流一般為幾毫安,當(dāng)用作輸出口去驅(qū)動一個晶體管的基極時,應(yīng)在基極和端口之間串聯(lián)一個電阻,以限制高電平時的輸出電流。
P3口用作第二功能:當(dāng)使用P3口的第二功能時,8個引腳有不同的意義。當(dāng)某位用作第二功能輸入時,該位的鎖存器輸出端被內(nèi)部硬件自動置1,并且W在端口不作第二功能輸出時保持為1,則與非門3輸出低,所以FET截止,該位引腳為高位輸入。因此讀引腳信號無效,三臺緩沖器無效,這樣,從引腳輸入的第二個能信號,經(jīng)緩沖器后被直接送給CPU處理。當(dāng)P3口的某一引腳用作第二功能時,該引腳不能用作通用I/O端口。
P3口各個引腳的第二功能見下表1。
端口引腳 | 第二功能 |
P3.0 | RXD(串行輸入口) |
P3.1 | TXD(串行輸出口) |
P3.2 | INT0(外中斷0) |
P3.3 | INT1(外中斷1) |
P3.4 | T0(定時/計時器0外部輸入) |
P3.5 | T1(定時/計時器1外部輸入) |
P3.6 | WR(外部數(shù)據(jù)存儲器寫選通) |
P3.7 | RD(外部數(shù)據(jù)存儲器讀選通) |
表1 P3口的第二功能圖
RST: RST是復(fù)位信號輸入端,高電平有效。當(dāng)單片機(jī)正常工作時,該引腳出現(xiàn)兩個機(jī)器周期的高電平就會使單片機(jī)復(fù)位;在上電時,由于振蕩器需要一定的起振時間,該引腳的高電平必須保持10ms以上才能保證有效復(fù)位。
ALE: ALE是地址鎖存器信號,每個機(jī)器周期輸出兩個正脈沖。在訪問片外存儲器時,下降沿用于控制外接的地址鎖存器鎖存從P0口輸出的低8位地址。在沒有接外部存儲器時,可以將該引腳的輸出作為時鐘信號使用,因此它可對外輸出時鐘或用于定時目的。
PROG:為片內(nèi)程序存儲器的編程脈沖輸入端,低電平有效。
PSEN:片外程序存儲器讀選通信號輸出端,每個機(jī)器周期輸出兩個負(fù)脈沖,低電平有效。在訪問片外數(shù)據(jù)存儲器時,該信號不出現(xiàn)。
EA/VPP:EA為片外程序存儲器選擇輸入端,該引腳低電平時,使用外部程序存儲器,為高電平時,使用片內(nèi)程序存儲器;VPP為片內(nèi)程序存儲器編程電壓輸入端。
XTAL1:該引腳接外部晶振和微調(diào)電容的一端,與單片機(jī)內(nèi)振蕩電路一起,產(chǎn)生由外部晶振決定的振蕩頻率。在使用外部時鐘時,該引腳輸入外部時鐘脈沖。
XTAL2:該引腳接外部晶振和微調(diào)電容的另一端,XTAL2接內(nèi)部反向放大器的輸出端,因此在使用外部時鐘時,該引腳接地。
3.3 DS18B20簡介溫度傳感器是各種傳感器中最常用的一種,早期使用的是模擬溫度傳感器,如熱敏電阻,隨著環(huán)境溫度的變化,它的阻值也按照一定的函數(shù)關(guān)系發(fā)生線性變化,通過采集電阻兩端的電壓,再根據(jù)某個函數(shù)關(guān)系式就可以計算出當(dāng)前環(huán)境溫度。
DS18B20是美國DALLAS半導(dǎo)體公司推出的第一片支持“一線總線”接口的溫度傳感器,它具有微型化、低功耗、高性能、抗干擾能力強(qiáng)、易配置微處理器等優(yōu)點,可直接將溫度轉(zhuǎn)化成串行數(shù)字信號供處理器處理。
3.3.1溫度傳感器DS18B20引腳介紹溫度傳感器DS18B20有兩種封裝:三腳TO-92直插式和八腳SOIC貼片式,其中三腳TO-92直插式是使用的最多、最普遍的封裝。封裝引腳如圖3所示。
下表2列出了溫度傳感器DS18B20的引腳定義
引腳 | 定義 |
GND | 電源負(fù)極 |
DQ | 信號輸入輸出 |
VDD | 電源正極 |
NC | 空 |
引腳功能說明:
GND :接地信號
DQ :數(shù)據(jù)輸入/輸出引腳。開漏單總線接口引腳。當(dāng)被用在寄生電源下,可以向器件提供電源。
VDD :可選VDD引腳,電源電壓范圍3V~5.5V。當(dāng)工作于寄生電源時,此引腳必須接地。
3.3.2 DS18B20內(nèi)部結(jié)構(gòu)與特點DS18B20的內(nèi)部結(jié)構(gòu)主要包括:寄生電源,溫度傳感器,64位ROM和單總線接口,存放中間數(shù)據(jù)的高速暫存器RAM,用于存儲用戶設(shè)定溫度上下限值的TH和TL觸發(fā)器,存儲與控制邏輯,8位循環(huán)冗余校驗碼(CRC)發(fā)生器等7部分組成。
DS18B20中的溫度傳感器可完成對溫度的測量,以12位轉(zhuǎn)化為例:用16位符號擴(kuò)展的二進(jìn)制補(bǔ)碼讀數(shù)形式提供,以0.0625℃/LSB形式表達(dá),其中S為符號位,12位轉(zhuǎn)化后得到的12位數(shù)據(jù),存儲在DS18B20的兩個8比特的RAM中。DS18B20溫度值格式如二進(jìn)制表2.2所示,其中,前5位是符號位,如果測得的溫度大于0,這5位為0,只要將測得的數(shù)值乘以0.0625即可得到實際溫度;如果溫度小于0,這5位為1,測到的數(shù)值需要取反加1再乘于 0.0625即可得到實際溫度。
圖4 DS18B20溫度值格式表
1、配置寄存器
DS18B20配置寄存器各字節(jié)意義如表3下:
表3 DS18B20寄存器中各位內(nèi)容
BIT7 | BIT6 | BIT5 | BIT4 | BIT3 | BIT2 | BIT1 | BIT0 |
TM | R1 | RO | 1 | 1 | 1 | 1 | 1 |
低五位一直都是"1",其中TM是測試模式位,用于設(shè)置溫度傳感器DS18B20是在工作模式還是在測試模式。溫度傳感器DS18B20默認(rèn)該位被設(shè)置為0,我們不要去修改。其中,R1和R0作用主要是設(shè)置分辨率,具體設(shè)置如表4所示:(DS18B20默認(rèn)設(shè)置為12位)。
表4 溫度分辨率設(shè)置表
RR1 | RRO | 分辨率 | 溫度最大轉(zhuǎn)換時間 |
00 | 00 | 99位 | 93.75ms |
00 | 11 | 110位 | 187.5ms |
11 | 00 | 111位 | 375ms |
11 | 11 | 112位 | 750ms |
2、高速暫存存儲器
該存儲器一共有9個字節(jié)組成。當(dāng)溫度轉(zhuǎn)換命令發(fā)出后,經(jīng)溫度傳感器的轉(zhuǎn)換所得的溫度值以二進(jìn)制補(bǔ)碼形式存放在該存儲器的前兩個字節(jié)。單片機(jī)可通過單線接口讀到該數(shù)據(jù)。讀取時低位在前,高位在后。對應(yīng)的溫度計算:當(dāng)符號位S=0時,直接將二進(jìn)制位轉(zhuǎn)換為十進(jìn)制;當(dāng)S=1時,先將補(bǔ)碼變?yōu)樵a,再計算十進(jìn)制值。其中第9個字節(jié)是冗余檢驗字節(jié)。
溫度傳感器DS18B20暫存寄存器分布如表5所示。
表5 DS18B20暫存寄存器分布
寄存器內(nèi)容 | 字節(jié)地址 |
溫度值低位(LS Byte) | 0 |
溫度值高位(MS Byte) | 1 |
高溫限值(TH) | 2 |
低溫限值(TL) | 3 |
配置寄存器 | 4 |
保留 | 5 |
保留 | 6 |
保留 | 7 |
CRC校驗值 | 8 |
由于DS18B20采用的是1-Wire總線協(xié)議方式,即在一根數(shù)據(jù)線實現(xiàn)數(shù)據(jù)的雙向傳輸,而對AT89S51單片機(jī)來說,硬件上并不支持單總線協(xié)議,因此,我們必須采用軟件的方法來模擬單總線的協(xié)議時序來完成對DS18B20芯片中的數(shù)據(jù)處理。
DS18B20有嚴(yán)格的通信協(xié)議來保證各位數(shù)據(jù)傳輸?shù)恼_性。該協(xié)議定義了幾種信號的時序:初始化時序、讀時序、寫時序。所有時序都是將主機(jī)作為主設(shè)備,單總線器件作為從屬設(shè)備。而每一次命令和數(shù)據(jù)的傳輸都是從主機(jī)主動啟動寫時序開始,
DS18B20的一線工作協(xié)議流程是:初始化→ROM操作指令→存儲器操作指令→數(shù)據(jù)傳輸,其工作時序包括初始化時序、寫時序和讀時序。
它們的工作時序如圖5 (a)(b)(c)所示。
圖5 (a)初始化時序
DS18B20的初始化過程:
1. 先將數(shù)據(jù)線置高電平“1”。
2. 延時,盡可能短一點。
3. 數(shù)據(jù)線拉到低電平“0”。
4. 延時750微秒(該時間的時間范圍可以從480到960微秒)。
5.數(shù)據(jù)線拉到高電平“1”。
6. 延時等待。
7. 若CPU讀到了數(shù)據(jù)線上的低電平“0”后,還要做延時,其延時的時間從發(fā)出的高電平算起(第(5)步的時間算起)最少要480微秒。
8.將數(shù)據(jù)線再次拉高到高電平“1”后結(jié)束。
圖5 (b)寫時序
DS18B20的寫操作過程:
1. 數(shù)據(jù)線先置低電平“0”。
2. 延時確定的時間為15微秒。
3. 按從低位到高位的順序發(fā)送字節(jié),一次只發(fā)送一位。
4. 延時時間為45微秒。
5. 將數(shù)據(jù)線拉到高電平。
6. 重復(fù)上(1)到(6)的操作直到所有的字節(jié)全部發(fā)送完為止。
7. 最后將數(shù)據(jù)線拉高。
圖5 (c)讀時序
DS18B20的讀操作過程:
1. 將數(shù)據(jù)線拉高“1”。
2. 延時2微秒。
3. 將數(shù)據(jù)線拉低“0”。
4. 延時15微秒。
5. 將數(shù)據(jù)線拉高“1”。
6. 延時15微秒。
7. 讀數(shù)據(jù)線的狀態(tài)得到1個狀態(tài)位,并進(jìn)行數(shù)據(jù)處理。
8. 延時30微秒。
3.4系統(tǒng)硬件設(shè)計3.4.1 復(fù)位電路模塊本系統(tǒng)采用按鍵復(fù)位電路,按鍵未按下時,它利用電容來實現(xiàn)復(fù)位,在接電瞬間,RST引腳的電位與電源VCC相同,隨著充電電流的減少,RST的電位逐漸下降。此時只要保證RST為高電平的時間大于兩個機(jī)器周期,便可以正常復(fù)位;按鍵按下時,此時電源VCC經(jīng)兩個電阻分壓,在RST引腳產(chǎn)生一個復(fù)位高電平,從而實現(xiàn)復(fù)位。
復(fù)位電路如圖6所示。
圖6 復(fù)位電路
3.4.2 時鐘電路設(shè)模塊
時鐘電路作用:單片機(jī)外部必須接上振蕩器,提供的高頻脈沖經(jīng)過分頻處理后,成為單片機(jī)內(nèi)部時鐘信號,作為片內(nèi)各部件協(xié)調(diào)工作的控制信號。如果沒有時鐘信號,觸發(fā)器的狀態(tài)就不能改變,單片機(jī)內(nèi)部的所有電路在完成一個任務(wù)后將最終達(dá)到一個穩(wěn)定狀態(tài)而不能再繼續(xù)進(jìn)行其它任何工作了。
時鐘電路如圖7所示:
圖7 時鐘電路
3.4.3 報警電路模塊當(dāng)被測環(huán)境溫度超過溫度上下限時,我們需要進(jìn)行報警處理,這里用到的是蜂鳴器。
蜂鳴器工作電流一般為10mA,而單片機(jī)的I/O口只能承受幾毫安的電流,因此需要加三極管進(jìn)行驅(qū)動,單片機(jī)的I/O口中的P1.4接三極管的基極,當(dāng)P1.4為低電平時,三極管導(dǎo)通,5V的電壓加載到蜂鳴器兩端,于是蜂鳴器鳴叫;當(dāng)P1.4高電平時,三極管截止,蜂鳴器不鳴叫。
報警電路如下圖8所示:
圖8 報警電路
3.4.4顯示電路模塊顯示系統(tǒng)是單片機(jī)控制系統(tǒng)的重要組成部分,單片機(jī)應(yīng)用系常采用7段LED數(shù)碼管作為顯示器,這種顯示器具有耗電低、線路簡單、價格低廉等優(yōu)點。
LED數(shù)碼管顯示器可以分為共陰極和共陽極兩種結(jié)構(gòu)。
(1)共陰極結(jié)構(gòu):如果所有的發(fā)光二極管的陰極接在一起,稱為共陰極結(jié)構(gòu);
(2)共陽極結(jié)構(gòu):如果所有的發(fā)光二極管的陽極接在一起,稱為共陽極結(jié)構(gòu)。
七段LED顯示器是由7個LED按—定的圖形排列組成,如圖9所示,七段LED顯示器的各個二極管分別稱為a、b、c、d、e、f、g段,有些七段顯示器增加一個dp段表示小數(shù)點,也稱為八段LED顯示器。
圖9 典型七段LED器件
將數(shù)碼管的引腳和單片機(jī)的數(shù)據(jù)輸出口相連,控制輸出的數(shù)據(jù)可以使數(shù)碼管顯示不同的數(shù)字和字符,通常稱控制發(fā)光二極管的8位字節(jié)數(shù)據(jù)為段選碼。7段LED段選碼如表6所示。
表6 7段LED段選碼
顯示字符 | 共陰極段選碼 | 共陽極段選碼 | 顯示字符 | 共陰極段選碼 | 共陽極段選碼 |
0 | 3FH | C0H | C | 3EH | C6H |
1 | 06H | F9H | D | 5EH | AH |
2 | 5BH | A4H | E | 79H | 86H |
3 | 4FH | B0H | F | 71H | 8EH |
5 | 6DH | 92H | U | 3EH | C1H |
6 | 7DH | 82H | R | 31H | CEH |
7 | 07H | F8H | Y | 6EH | 91H |
8 | 7FH | 80H | 8. | FFH | 00H |
9 | 6FH | 90H | “滅” | 00H | FFH |
A | 77H | 88H | B | 7CH | 83H |
本設(shè)計采用四位共陰極動態(tài)顯示方式,可以直接讀取溫度值,顯示溫度可以精確到1℃。
圖10為顯示電路的連接圖。
圖10 顯示電路
3.4.5按鍵電路模塊該電路采用彈性按鍵。按鍵電路的作用是手動設(shè)置溫度的上下限。按下K4,進(jìn)行上下限報警切換,通過K1和K2調(diào)節(jié)溫度上下限,最后,按下K3確認(rèn)。
具體的按鍵電路圖如下圖11所示:
圖11 按鍵電路
3.4.6溫度檢測電路模塊該電路中溫度傳感器采用Dallas公司生產(chǎn)的數(shù)字溫度傳感器DS18B20。該芯片硬件接口簡單,使用方便,且節(jié)省大量的導(dǎo)線,具有很好的通用性。該系統(tǒng)中將單片機(jī)的P1.1引腳與DS18B20的數(shù)據(jù)線連接。
具體的溫度檢測電路圖如下圖12所示:
圖12 溫度檢測電路
4系統(tǒng)軟件設(shè)計 4.1系統(tǒng)主程序設(shè)計主程序是系統(tǒng)的監(jiān)控程序,在程序運行的過程中必須先經(jīng)過初始化,包括開機(jī)啟動子程序,中斷程序,報警函數(shù),按鍵掃描子程序以及控制端口的初始化工作。系統(tǒng)在初始化完成后就進(jìn)入溫度測量程序,實時的測量當(dāng)前的溫度并通過顯示電路在LCD上顯示。程序中以中斷的方式來重新設(shè)定溫度的上下限,根據(jù)硬件設(shè)計完成對溫度的控制,系統(tǒng)軟件設(shè)計的總體流程圖如下圖13。
void main()
{
TCON=0x01; //定時器T0工作在01模式下
TMOD=0X01;
TH0=0XD8; //裝入初值
TL0=0XF0;
EA=1; //開總中斷
ET0=1; //開T0中斷
TR0=1; //T0開始運行計數(shù)
EX0=1; //開外部中斷0
for(n=0;n<500;n++) //顯示啟動LOGo"- - - -"
{bell=1;warn=1;logo();}
Red=0;
while(1)
{
key();
ss=ReadTemperature();
Show();
alarm(); //報警函數(shù)
if(Flag==1)
{bell=!bell;
warn=!warn;} //蜂鳴器滴滴響
else {bell=1;
warn=1;}
}
}
4.2 DS18B20初始化子程序DS18B20的初始化相當(dāng)于DS18B20數(shù)據(jù)頭的作用,DS18B20檢測到初始化電平,準(zhǔn)備開始接收或發(fā)送數(shù)據(jù)。初始化子程序流程圖如下圖14所示。
圖14 DS18B20初始化程序流程圖
Init_DS18B20(void) //傳感器初始化
{
uchar x=0;
DATA = 1; //DQ復(fù)位
delay(10); //稍做延時
DATA = 0; //單片機(jī)將DQ拉低
delay(80); //精確延時 大于 480us
DATA = 1; //拉高總線
delay(20);
x=DATA; //稍做延時后 如果x=0則初始化成功 x=1則初始化失敗
delay(30);
}
4.3 DS18B20讀取溫度子程序讀出溫度子程序的主要功能是讀出RAM中的9字節(jié),在讀出時需進(jìn)行CRC校驗,校驗有錯時不進(jìn)行溫度數(shù)據(jù)的改寫。
DSBl820可以從單總線獲取電源,當(dāng)信號線為高電平時,將能量貯存在內(nèi)部電容器中;當(dāng)單信號線為低電平時,將該電源斷開,直到信號線變?yōu)楦唠娖街匦陆由霞纳?電容)電源為止。DSl8820的供電方式靈活,利用外接電源還可增加系統(tǒng)的穩(wěn)定性和可靠性。圖15為讀取數(shù)據(jù)流程圖。
圖15 DS18B20讀取溫度子程序流程圖
讀取溫度子程序如下:
int ReadTemperature(void) //讀取溫度
{
uchar a=0;
uchar b=0;
int t=0;
float tt=0;
Init_DS18B20();
WriteOneChar(0xCC); // 跳過讀序號列號的操作
WriteOneChar(0x44); // 啟動溫度轉(zhuǎn)換
Init_DS18B20();
WriteOneChar(0xCC); //跳過讀序號列號的操作
WriteOneChar(0xBE); //讀取溫度寄存器等(共可讀9個寄存器) 前兩個就是溫度
a=ReadOneChar(); //低位
b=ReadOneChar(); //高位
t=b;
t<<=8;
t=t|a;
tt=t*0.0625;
t= tt*10+0.5;
return(t);
}
4.4 顯示數(shù)據(jù)處理子程序讀出溫度數(shù)據(jù)后,LOW的低四位為溫度的小數(shù)部分,LOW的高四位和HIGH的低四位為溫度的整數(shù)部分,HIGH的高四位全部為1表示負(fù)數(shù),全為0表示正數(shù)。所以先將數(shù)據(jù)提取出來,分為三個部分:小數(shù)部分、整數(shù)部分和符號部分。小數(shù)部分進(jìn)行四舍五入處理:大于0.5℃的話,向個位進(jìn)1;小于0.5℃的時候,舍去不要。當(dāng)數(shù)據(jù)是個負(fù)數(shù)的時候,顯示之前要進(jìn)行數(shù)據(jù)轉(zhuǎn)換,將其整數(shù)部分取反加一。還因為DS18B20最低溫度只能為-55℃,所以可以將整數(shù)部分的最高位換成一個“-”,表示為負(fù)數(shù)。
圖16為溫度數(shù)據(jù)處理程序的流程圖:
圖16 顯示數(shù)據(jù)處理子程序
void display()
{
buf[1]=temp/1000; //顯示百位
buf[2]=temp/100%10; //顯示十位
buf[3]=temp%100/10; //顯示個位
buf[0]=temp%10; //小數(shù)位
for(j=0;j<3;j++)
{
P2=0xff; // 初始燈為滅的
P0=0x00;
P2=0xfd; //顯示小數(shù)點
P0=0x80; //顯示小數(shù)點
delay(300);
P2=0xff; // 初始燈為滅的
P0=0x00;
P2=0xf7; //片選LCD1
P0=table[buf[1]];
delay(300);
P2=0xff;
P0=0x00;
P2=0xfb; //片選LCD2
P0=table[buf[2]];
delay(300);
P2=0xff;
P0=0x00;
P2=0Xfd; //片選LCD3
P0=table[buf[3]];
delay(300);
P2=0xff;
P0=0x00;
P2=0Xfe;
P0=table[buf[0]]; //片選LCD4
delay(300);
P2=0xff;
}
}
4.5按鍵掃描子程序該系統(tǒng)支持手動設(shè)置溫度上下限,而按鍵掃描的主要功能就是手動設(shè)置溫度的上下限。系統(tǒng)默認(rèn)的溫度上下限是10℃~32℃。當(dāng)被測溫度值處于0℃~125℃時,若被測溫度沒有超過上下限,則蜂鳴器不鳴叫,否則蜂鳴器鳴叫;當(dāng)被測溫度值處于0℃以下時,蜂鳴器鳴叫較急促。
為了防止抖動,按鍵電路中都要消抖的措施,本設(shè)計中是采用的軟件消抖,在單片機(jī)檢測到某個鍵按下后,延時10ms再監(jiān)測,如果仍然按下,才確定按下了該鍵。
按鍵K4、K1、K2、K3分別與單片機(jī)的P2.4-P2.7引腳連接。默認(rèn)狀態(tài)設(shè)置溫度上限,若按下按鍵K4,也就是使P2.4為低電平時,進(jìn)入溫度下限的設(shè)置,再按一次進(jìn)入溫度上限的設(shè)置;在每個溫度上下限設(shè)置里面,按下K1一次增加1℃溫度值,按下按鍵K一次減小1℃溫度值,最后按K3確定。
按鍵掃描子程序的流程圖如下圖17所示:
圖17 按鍵掃描子程序
按鍵掃描子程序如下:
void key() //按鍵掃描子程序
{ if(k1!=1)
{
delay(20);
if(k1!=1)
{
while(k1!=1)
{ key_to1();
for(n=0;n<8;n++)
Show();
}
}
}
if(k2!=1)
{
delay(20);
if(k2!=1)
{
while(k2!=1)
{ key_to2();
for(n=0;n<8;n++)
Show();
}
}
}
if(k3!=1)
{ TR0=1; //復(fù)位,開定時
temp=ReadTemperature();
}
if(k4!=1)
{ delay(20);
if(k4!=1)
{ while(k4!=1);
set=!set;
if(set==0)
{ Red=0;Green=1;}
else { Green=0;Red=1;}
}
}
}
5 系統(tǒng)軟硬件調(diào)試本次設(shè)計采用Keil uVision2來編寫C語言程序,通過它的編譯器進(jìn)行編譯、連接,最后將生成的機(jī)器碼下載到單片機(jī)上。
Keil C51編譯器是目前最流行的開發(fā)MCS-51系列單片機(jī)的軟件,它具有C編輯器、宏匯編、鏈接器、庫管理和一個功能強(qiáng)大的仿真調(diào)試等在內(nèi)的功能,并通過一個集成開發(fā)環(huán)境將這些部份組合在一起。
打開Proteus ISIS,在Proteus ISIS編輯窗口中單擊元件列表之上的“P”按鈕 ,添加元件及放置元件。
把剛才產(chǎn)生的可執(zhí)行hex文件下載到單片機(jī)中,單擊運行按鈕,電路瞬間導(dǎo)通,程序首先進(jìn)入Logo函數(shù)進(jìn)行開機(jī)檢測。此時單片機(jī)給正負(fù)溫度指示燈和報警指示燈高電平,給溫度上限指示燈低電平,使它們正常發(fā)光,給共陰極數(shù)碼管相應(yīng)的位高電平,使其動態(tài)顯示溫度為85℃。由于85℃不在默認(rèn)溫度上下限10℃~32℃之間,所以此時正溫度指示燈亮,報警指示燈閃爍,蜂鳴器也開始鳴叫。大約200ms后,開機(jī)檢測結(jié)束,溫度回到當(dāng)前環(huán)境溫度5℃,由于默認(rèn)的溫度上下限是10℃~32℃,所以
正溫度指示燈亮,報警指示燈閃爍,蜂鳴器鳴叫。
我們再次調(diào)節(jié)環(huán)境溫度,使環(huán)境溫度處于15℃,由于此時溫度不在溫度上下限10℃~32℃之間,因此單片機(jī)給正溫度指示燈高電平,給報警指示燈低電平,所以正溫度指示燈高電平亮,報警指示燈熄滅,蜂鳴器也不鳴叫。
當(dāng)環(huán)境溫度處于12℃時,當(dāng)溫度在溫度上下限15℃~40℃之間時,報警電路開始工作,報警指示燈閃爍,蜂鳴器鳴叫。
仿真電路如圖23所示。
結(jié)果分析:
本文介紹并設(shè)計的數(shù)字溫度計的基本測量范圍是-30℃~125℃,并且具有自動報警功能和默認(rèn)溫度上下限(10℃~32℃),還可以手動設(shè)置溫度上下限,用4位一體數(shù)碼管顯示設(shè)置溫度的上下限和當(dāng)前環(huán)境的溫度。由于所采用的是DS18B20溫度傳感器,它的可測量范圍是-55℃~125℃,測量溫度在-10℃~85℃之間時的可分辨溫度是0.5℃,我們將小數(shù)位始終顯示為0,也即顯示的溫度精度是1℃。如果當(dāng)前環(huán)境溫度在默認(rèn)的溫度上下限之間,主函數(shù)不會調(diào)用報警子程序,報警電路不會工作,蜂鳴器也不鳴叫;如果當(dāng)前環(huán)境溫度在默認(rèn)的溫度上下限之外,主函數(shù)就會調(diào)用報警子程序,此時單片機(jī)送給報警指示燈蜂鳴器高電平,報警指示燈閃爍,蜂鳴器鳴叫,直到環(huán)境溫度回到默認(rèn)的溫度上下限之間。當(dāng)然,由于本設(shè)計支持手動設(shè)置溫度上下限,我們也可以手動設(shè)置溫度上下限。
由仿真結(jié)果及設(shè)計要求完成的指標(biāo)可知,該設(shè)計基本符合設(shè)計要求。
總結(jié)
畢業(yè)設(shè)計完成了,在這個過程中使我覺得不論從理論知識還是從實際設(shè)計中都學(xué)到了不少知識。在寫論文開始的初期,由于對溫度傳感器的較陌生,我對于論文的結(jié)構(gòu)以及文獻(xiàn)選取等方面都有很多問題,通過對溫度計原理的認(rèn)識,最后確定了設(shè)計溫度計的功能以及各類功能模塊的器件選擇。認(rèn)識到很多知識以前都沒有接觸過,所以制定了一個大致的計劃,希望能夠很好的完成論文。在接下來的畢業(yè)設(shè)計中,主要是深入對前期溫度設(shè)計方案的認(rèn)識。在這期間,很多知識都是第一次接觸,通過查找了很多知識,認(rèn)真閱讀,但困難最大的還是硬件的設(shè)計和程序編寫方面,第一次設(shè)計起來覺得相當(dāng)吃力,剛開始不知道從何下手。后來,通過老師的指導(dǎo)和同學(xué)的幫助,克服了種種困難完成了設(shè)計。在作畢業(yè)設(shè)計的過程中,還認(rèn)識到理論對實踐有很大的指導(dǎo)作用,只有在正確的理論指導(dǎo)下,才能設(shè)計出合乎實際需要的系統(tǒng)電路。
這次畢業(yè)設(shè)計是對大學(xué)所學(xué)知識的一次實際應(yīng)用,同時對自學(xué)能力提出了很高的要求,所以理論不能聯(lián)系實際,就是嚴(yán)重的錯誤,我們不能只為了考試而學(xué)習(xí)。并且在學(xué)習(xí)的過程中更要廣闊的汲取各方面的知識,才能更好的為以后的工作打好基礎(chǔ)。
歡迎光臨 (http://www.torrancerestoration.com/bbs/) | Powered by Discuz! X3.1 |