1引言1.1課題背景 毋庸置疑,隨著科學(xué)技術(shù)的發(fā)展和人們生活的需要,近年來單片機(jī)的應(yīng)用領(lǐng)域越來越寬廣。一般的度測量不僅設(shè)計(jì)復(fù)雜,而且精確度非常差,而應(yīng)用單片機(jī)使這個(gè)問題得到了很好的解決。在現(xiàn)代社會(huì),溫度是一個(gè)至關(guān)重要的數(shù)據(jù),而幾十年前的測量方法科技含量太低,顯然不能滿足現(xiàn)代社會(huì)對(duì)溫度高精確度測量的要求。這些年來專家們研究了幾種測溫技術(shù),這些測溫技術(shù)不但很好的提高了測量精度,而且使產(chǎn)品的質(zhì)量更上一層樓。 由于單片機(jī)具有集成度高,通用性好,功能強(qiáng),尤其體積小,重量輕,耗能低等顯著的優(yōu)勢,因此在日常生活和工業(yè)生產(chǎn)中得到了廣泛應(yīng)用。本課題就是單片機(jī)作為核心器件進(jìn)行設(shè)計(jì)的。
1.2課題研究的目的和意義 測量溫度的基本方法是使用溫度計(jì)直接讀取溫度,如我們大家經(jīng)常使用的體溫計(jì)。隨著工業(yè)生產(chǎn)的需要,人們對(duì)溫度的測量有了的更高的要求。在迅速發(fā)展的科學(xué)技術(shù)中,前沿技術(shù)是傳感器技術(shù),特別是溫度傳感技術(shù),已經(jīng)滲透到我們生活的各個(gè)方面,溫度測量在工業(yè)生產(chǎn)中占有不可或缺的地位,此外在農(nóng)業(yè)生產(chǎn)中也離不開溫度的測量。綜上所述,測量溫度具有舉重若輕的作用。
單片機(jī)在各個(gè)領(lǐng)域的應(yīng)用廣泛,而把它作為數(shù)字溫度計(jì)的核心部件只是具體應(yīng)用的一個(gè)實(shí)例。目前,隨著在惡劣的工作環(huán)境下的對(duì)測溫技術(shù)的要求,單片機(jī)的發(fā)展越來越受到人們的重視。
1.3國內(nèi)外測溫技術(shù)及單片機(jī)現(xiàn)狀不可否認(rèn),跟發(fā)達(dá)國家相比,我國測溫技術(shù)仍然處于較低水平。一般的測溫技術(shù)只能對(duì)較平穩(wěn)的環(huán)境溫度進(jìn)行測量,如果用于惡劣的工作環(huán)境,我國的某些技術(shù)還達(dá)不到要求。但是,隨著我國成為世界第二大經(jīng)濟(jì)體,經(jīng)濟(jì)實(shí)力直線上升,我國電子企業(yè)也在蓬勃發(fā)展。
眾所周知,單片機(jī)是集成在一塊芯片上的計(jì)算機(jī)系統(tǒng),它擁有計(jì)算機(jī)系統(tǒng)的主要部件和功能,如 CPU、并行I/O端口、定時(shí)與中斷系統(tǒng)、A/D與D/A轉(zhuǎn)換系統(tǒng)、總線系統(tǒng)。隨著科學(xué)技術(shù)的發(fā)展,現(xiàn)在大部分單片機(jī)功能也更加強(qiáng)大。單片機(jī)還可以連接各種各樣的外圍電路,如定時(shí)器、復(fù)位電路、時(shí)鐘電路、傳感器等等,我們應(yīng)用單片機(jī)可以對(duì)各種各樣的數(shù)據(jù)進(jìn)行采集。如連接溫度傳感器DS18B20等芯片,就可以對(duì)被測對(duì)象進(jìn)行溫度的測量與檢測。
2系統(tǒng)總體方案設(shè)計(jì)2.1系統(tǒng)的設(shè)計(jì)指標(biāo) 本課題設(shè)計(jì)的數(shù)字溫度計(jì)要求能夠及時(shí)準(zhǔn)確地對(duì)被測對(duì)象進(jìn)行溫度測量,并將其測得的溫度值顯示在LED數(shù)碼管上,然后與設(shè)定的溫度范圍比較,如果超過溫度限制,則通過蜂鳴器報(bào)警,同時(shí)報(bào)警指示燈閃爍,直到溫度回到規(guī)定的范圍為止。另外,還能夠通過按鍵自己設(shè)置溫度范圍。綜上所述,系統(tǒng)設(shè)計(jì)的要求如下:
1.開機(jī)啟動(dòng),檢測各元件是否正常工作。
2.正負(fù)溫度辨別(正溫度紅燈亮,負(fù)溫度綠燈亮)。
3.溫度測量的基本范圍是-30℃~125℃。
4.軟件預(yù)設(shè)上限溫度32℃,下限溫度10℃。
5.超過溫度上下限即實(shí)現(xiàn)報(bào)警功能,報(bào)警燈閃爍,蜂鳴器震動(dòng)并發(fā)聲警示,并在負(fù)溫度時(shí)蜂鳴器震動(dòng)較急促。
6.支持手動(dòng)按鍵設(shè)置溫度上下限。
2.2系統(tǒng)的實(shí)現(xiàn)原理本系統(tǒng)使用溫度傳感器,并與單片機(jī)連接組成溫度測量系統(tǒng),從而完成測量溫度。溫度傳感器對(duì)溫度的變化十分敏感,它能夠把測得的溫度及時(shí)準(zhǔn)確的轉(zhuǎn)化為一串的電路信號(hào),這時(shí)我們可以通過顯示系統(tǒng)將其測得的溫度值顯示出來,供人們讀取和記錄。比如,溫度傳感器DS18B20是一種集成度很高的溫度測量器件,它能夠根據(jù)當(dāng)前溫度環(huán)境的變化產(chǎn)生出一串?dāng)?shù)字信號(hào)。顯然,不同的溫度環(huán)境將會(huì)有不同的數(shù)字信號(hào),通過該信號(hào)能夠準(zhǔn)確的得到當(dāng)前環(huán)境的溫度值,從而完成溫度的測量。
2.3系統(tǒng)的實(shí)現(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ì)實(shí)惠。
3 系統(tǒng)硬件設(shè)計(jì)3.1 系統(tǒng)總體結(jié)構(gòu)本方案設(shè)計(jì)的系統(tǒng)模塊由單片機(jī)系統(tǒng)、溫度傳感器模塊、數(shù)碼管顯示模塊和電源模塊組成,其總體結(jié)構(gòu)如圖1。
1.002.jpg (11.94 KB, 下載次數(shù): 160)
下載附件
2016-5-7 03:58 上傳
圖1 系統(tǒng)結(jié)構(gòu)圖
該系統(tǒng)是以AT89C52 單片機(jī)為核心,在開始運(yùn)行它向主機(jī)先發(fā)送初始化命令使DS18B20啟動(dòng),再發(fā)送溫度轉(zhuǎn)換命令使數(shù)字溫度傳感器DS18B20 把測得的模擬溫度信號(hào)轉(zhuǎn)換為數(shù)字信號(hào)供單片機(jī)運(yùn)算。同時(shí),顯示器上顯示出當(dāng)前環(huán)境的溫度,當(dāng)溫度超出設(shè)定的溫度上下限范圍時(shí),蜂鳴器就會(huì)發(fā)出警報(bào)。
3.2 AT89C52簡介單片機(jī)經(jīng)過幾十年的蓬勃發(fā)展,目前已經(jīng)是自動(dòng)控制理論的中流砥柱。對(duì)于專業(yè)人員來說,掌握單片機(jī)原理及其應(yīng)用已經(jīng)成為必不可少的一項(xiàng)技能,是專業(yè)人員必備的能力和素質(zhì)之一。單片機(jī)的應(yīng)用十分廣泛,在控制領(lǐng)域、家用電器、食品儲(chǔ)存等方面,都扮演著一個(gè)非常重要的角色。
ATMEL公司采用國際先進(jìn)的技術(shù)手段生產(chǎn)的AT89C52單片機(jī)與一般的單片機(jī)有所不同,它不僅是一種8位微控制器,具有低功耗和高性能的特點(diǎn),還擁有非易失性Flash程序存儲(chǔ)器。它的主要接口與引腳的特點(diǎn)如下。
其引腳圖如圖2所示:
P0口:P0口與其他端口不同,它的輸出級(jí)無上拉電阻。作為通用輸出I/O口使用時(shí),輸出級(jí)是開漏電路,故用其輸出去驅(qū)動(dòng)NMOS輸入時(shí)外接上拉電阻,上拉電阻一般在10KΩ左右即可。這時(shí)每一位輸出可以驅(qū)動(dòng)4個(gè)LS型負(fù)載。用作輸入時(shí),應(yīng)先向端口鎖存器寫1。把P0口用作地址/數(shù)據(jù)總線時(shí),無需外接上拉電阻。作總線輸入時(shí),不需先向端口寫1。P0口作總線時(shí),每一位輸出可以驅(qū)動(dòng)8個(gè)LS型TTL負(fù)載。
1.003.jpg (39.67 KB, 下載次數(shù): 154)
下載附件
2016-5-7 03:58 上傳
圖2 單片機(jī)AT89C52引腳圖
P1~P3口:P1~P3口接有上拉負(fù)載電阻,它們的每一位輸出可以驅(qū)動(dòng)4個(gè)LS型TTL負(fù)載。用作輸出口時(shí),任何TTL或NMOS電路都能以正常的方式驅(qū)動(dòng)89C51系列單片機(jī)的P1~P3口。由于它們的輸出級(jí)接有上拉電阻,因此,在使用時(shí)無需外接上拉電阻。由于單片機(jī)的端口輸出電流一般為幾毫安,當(dāng)用作輸出口去驅(qū)動(dòng)一個(gè)晶體管的基極時(shí),應(yīng)在基極和端口之間串聯(lián)一個(gè)電阻,以限制高電平時(shí)的輸出電流。
P3口用作第二功能:當(dāng)使用P3口的第二功能時(shí),8個(gè)引腳有不同的意義。當(dāng)某位用作第二功能輸入時(shí),該位的鎖存器輸出端被內(nèi)部硬件自動(dòng)置1,并且W在端口不作第二功能輸出時(shí)保持為1,則與非門3輸出低,所以FET截止,該位引腳為高位輸入。因此讀引腳信號(hào)無效,三臺(tái)緩沖器無效,這樣,從引腳輸入的第二個(gè)能信號(hào),經(jīng)緩沖器后被直接送給CPU處理。當(dāng)P3口的某一引腳用作第二功能時(shí),該引腳不能用作通用I/O端口。
P3口各個(gè)引腳的第二功能見下表1。
| |
| |
| |
| |
| |
| T0(定時(shí)/計(jì)時(shí)器0外部輸入) |
| T1(定時(shí)/計(jì)時(shí)器1外部輸入) |
| WR(外部數(shù)據(jù)存儲(chǔ)器寫選通) |
| RD(外部數(shù)據(jù)存儲(chǔ)器讀選通) |
表1 P3口的第二功能圖
RST: RST是復(fù)位信號(hào)輸入端,高電平有效。當(dāng)單片機(jī)正常工作時(shí),該引腳出現(xiàn)兩個(gè)機(jī)器周期的高電平就會(huì)使單片機(jī)復(fù)位;在上電時(shí),由于振蕩器需要一定的起振時(shí)間,該引腳的高電平必須保持10ms以上才能保證有效復(fù)位。
ALE: ALE是地址鎖存器信號(hào),每個(gè)機(jī)器周期輸出兩個(gè)正脈沖。在訪問片外存儲(chǔ)器時(shí),下降沿用于控制外接的地址鎖存器鎖存從P0口輸出的低8位地址。在沒有接外部存儲(chǔ)器時(shí),可以將該引腳的輸出作為時(shí)鐘信號(hào)使用,因此它可對(duì)外輸出時(shí)鐘或用于定時(shí)目的。
PROG:為片內(nèi)程序存儲(chǔ)器的編程脈沖輸入端,低電平有效。
PSEN:片外程序存儲(chǔ)器讀選通信號(hào)輸出端,每個(gè)機(jī)器周期輸出兩個(gè)負(fù)脈沖,低電平有效。在訪問片外數(shù)據(jù)存儲(chǔ)器時(shí),該信號(hào)不出現(xiàn)。
EA/VPP:EA為片外程序存儲(chǔ)器選擇輸入端,該引腳低電平時(shí),使用外部程序存儲(chǔ)器,為高電平時(shí),使用片內(nèi)程序存儲(chǔ)器;VPP為片內(nèi)程序存儲(chǔ)器編程電壓輸入端。
XTAL1:該引腳接外部晶振和微調(diào)電容的一端,與單片機(jī)內(nèi)振蕩電路一起,產(chǎn)生由外部晶振決定的振蕩頻率。在使用外部時(shí)鐘時(shí),該引腳輸入外部時(shí)鐘脈沖。
XTAL2:該引腳接外部晶振和微調(diào)電容的另一端,XTAL2接內(nèi)部反向放大器的輸出端,因此在使用外部時(shí)鐘時(shí),該引腳接地。
3.3 DS18B20簡介溫度傳感器是各種傳感器中最常用的一種,早期使用的是模擬溫度傳感器,如熱敏電阻,隨著環(huán)境溫度的變化,它的阻值也按照一定的函數(shù)關(guān)系發(fā)生線性變化,通過采集電阻兩端的電壓,再根據(jù)某個(gè)函數(shù)關(guān)系式就可以計(jì)算出當(dāng)前環(huán)境溫度。
DS18B20是美國DALLAS半導(dǎo)體公司推出的第一片支持“一線總線”接口的溫度傳感器,它具有微型化、低功耗、高性能、抗干擾能力強(qiáng)、易配置微處理器等優(yōu)點(diǎn),可直接將溫度轉(zhuǎn)化成串行數(shù)字信號(hào)供處理器處理。
3.3.1溫度傳感器DS18B20引腳介紹溫度傳感器DS18B20有兩種封裝:三腳TO-92直插式和八腳SOIC貼片式,其中三腳TO-92直插式是使用的最多、最普遍的封裝。封裝引腳如圖3所示。
1.004.jpg (7.15 KB, 下載次數(shù): 118)
下載附件
2016-5-7 03:58 上傳
圖3 DS18B20TO-92封裝
下表2列出了溫度傳感器DS18B20的引腳定義
表2 DS18B20的引腳定義
引腳功能說明:
GND :接地信號(hào)
DQ :數(shù)據(jù)輸入/輸出引腳。開漏單總線接口引腳。當(dāng)被用在寄生電源下,可以向器件提供電源。
VDD :可選VDD引腳,電源電壓范圍3V~5.5V。當(dāng)工作于寄生電源時(shí),此引腳必須接地。
3.3.2 DS18B20內(nèi)部結(jié)構(gòu)與特點(diǎn) DS18B20的內(nèi)部結(jié)構(gòu)主要包括:寄生電源,溫度傳感器,64位ROM和單總線接口,存放中間數(shù)據(jù)的高速暫存器RAM,用于存儲(chǔ)用戶設(shè)定溫度上下限值的TH和TL觸發(fā)器,存儲(chǔ)與控制邏輯,8位循環(huán)冗余校驗(yàn)碼(CRC)發(fā)生器等7部分組成。
DS18B20中的溫度傳感器可完成對(duì)溫度的測量,以12位轉(zhuǎn)化為例:用16位符號(hào)擴(kuò)展的二進(jìn)制補(bǔ)碼讀數(shù)形式提供,以0.0625℃/LSB形式表達(dá),其中S為符號(hào)位,12位轉(zhuǎn)化后得到的12位數(shù)據(jù),存儲(chǔ)在DS18B20的兩個(gè)8比特的RAM中。DS18B20溫度值格式如二進(jìn)制表2.2所示,其中,前5位是符號(hào)位,如果測得的溫度大于0,這5位為0,只要將測得的數(shù)值乘以0.0625即可得到實(shí)際溫度;如果溫度小于0,這5位為1,測到的數(shù)值需要取反加1再乘于 0.0625即可得到實(shí)際溫度。
圖4 DS18B20溫度值格式表
1.005.jpg (15.56 KB, 下載次數(shù): 126)
下載附件
2016-5-7 03:58 上傳
1、配置寄存器
DS18B20配置寄存器各字節(jié)意義如表3下:
表3 DS18B20寄存器中各位內(nèi)容
低五位一直都是"1",其中TM是測試模式位,用于設(shè)置溫度傳感器DS18B20是在工作模式還是在測試模式。溫度傳感器DS18B20默認(rèn)該位被設(shè)置為0,我們不要去修改。其中,R1和R0作用主要是設(shè)置分辨率,具體設(shè)置如表4所示:(DS18B20默認(rèn)設(shè)置為12位)。
表4 溫度分辨率設(shè)置表
2、高速暫存存儲(chǔ)器
該存儲(chǔ)器一共有9個(gè)字節(jié)組成。當(dāng)溫度轉(zhuǎn)換命令發(fā)出后,經(jīng)溫度傳感器的轉(zhuǎn)換所得的溫度值以二進(jìn)制補(bǔ)碼形式存放在該存儲(chǔ)器的前兩個(gè)字節(jié)。單片機(jī)可通過單線接口讀到該數(shù)據(jù)。讀取時(shí)低位在前,高位在后。對(duì)應(yīng)的溫度計(jì)算:當(dāng)符號(hào)位S=0時(shí),直接將二進(jìn)制位轉(zhuǎn)換為十進(jìn)制;當(dāng)S=1時(shí),先將補(bǔ)碼變?yōu)樵a,再計(jì)算十進(jìn)制值。其中第9個(gè)字節(jié)是冗余檢驗(yàn)字節(jié)。
溫度傳感器DS18B20暫存寄存器分布如表5所示。
表5 DS18B20暫存寄存器分布
3.3.3 DS18B20 溫度測量通信協(xié)議由于DS18B20采用的是1-Wire總線協(xié)議方式,即在一根數(shù)據(jù)線實(shí)現(xiàn)數(shù)據(jù)的雙向傳輸,而對(duì)AT89S51單片機(jī)來說,硬件上并不支持單總線協(xié)議,因此,我們必須采用軟件的方法來模擬單總線的協(xié)議時(shí)序來完成對(duì)DS18B20芯片中的數(shù)據(jù)處理。
DS18B20有嚴(yán)格的通信協(xié)議來保證各位數(shù)據(jù)傳輸?shù)恼_性。該協(xié)議定義了幾種信號(hào)的時(shí)序:初始化時(shí)序、讀時(shí)序、寫時(shí)序。所有時(shí)序都是將主機(jī)作為主設(shè)備,單總線器件作為從屬設(shè)備。而每一次命令和數(shù)據(jù)的傳輸都是從主機(jī)主動(dòng)啟動(dòng)寫時(shí)序開始,
DS18B20的一線工作協(xié)議流程是:初始化→ROM操作指令→存儲(chǔ)器操作指令→數(shù)據(jù)傳輸,其工作時(shí)序包括初始化時(shí)序、寫時(shí)序和讀時(shí)序。
它們的工作時(shí)序如圖5 (a)(b)(c)所示。
1.006.jpg (14.74 KB, 下載次數(shù): 149)
下載附件
2016-5-7 03:58 上傳
圖5 (a)初始化時(shí)序
DS18B20的初始化過程:
1. 先將數(shù)據(jù)線置高電平“1”。
2. 延時(shí),盡可能短一點(diǎn)。
3. 數(shù)據(jù)線拉到低電平“0”。
4. 延時(shí)750微秒(該時(shí)間的時(shí)間范圍可以從480到960微秒)。
5.數(shù)據(jù)線拉到高電平“1”。
6. 延時(shí)等待。
7. 若CPU讀到了數(shù)據(jù)線上的低電平“0”后,還要做延時(shí),其延時(shí)的時(shí)間從發(fā)出的高電平算起(第(5)步的時(shí)間算起)最少要480微秒。
8.將數(shù)據(jù)線再次拉高到高電平“1”后結(jié)束。
1.007.jpg (15.2 KB, 下載次數(shù): 122)
下載附件
2016-5-7 03:58 上傳
圖5 (b)寫時(shí)序
DS18B20的寫操作過程:
1. 數(shù)據(jù)線先置低電平“0”。
2. 延時(shí)確定的時(shí)間為15微秒。
3. 按從低位到高位的順序發(fā)送字節(jié),一次只發(fā)送一位。
4. 延時(shí)時(shí)間為45微秒。
5. 將數(shù)據(jù)線拉到高電平。
6. 重復(fù)上(1)到(6)的操作直到所有的字節(jié)全部發(fā)送完為止。
7. 最后將數(shù)據(jù)線拉高。
1.008.jpg (16.14 KB, 下載次數(shù): 130)
下載附件
2016-5-7 03:58 上傳
圖5 (c)讀時(shí)序
DS18B20的讀操作過程:
1. 將數(shù)據(jù)線拉高“1”。
2. 延時(shí)2微秒。
3. 將數(shù)據(jù)線拉低“0”。
4. 延時(shí)15微秒。
5. 將數(shù)據(jù)線拉高“1”。
6. 延時(shí)15微秒。
7. 讀數(shù)據(jù)線的狀態(tài)得到1個(gè)狀態(tài)位,并進(jìn)行數(shù)據(jù)處理。
8. 延時(shí)30微秒。
3.4系統(tǒng)硬件設(shè)計(jì)3.4.1 復(fù)位電路模塊本系統(tǒng)采用按鍵復(fù)位電路,按鍵未按下時(shí),它利用電容來實(shí)現(xiàn)復(fù)位,在接電瞬間,RST引腳的電位與電源VCC相同,隨著充電電流的減少,RST的電位逐漸下降。此時(shí)只要保證RST為高電平的時(shí)間大于兩個(gè)機(jī)器周期,便可以正常復(fù)位;按鍵按下時(shí),此時(shí)電源VCC經(jīng)兩個(gè)電阻分壓,在RST引腳產(chǎn)生一個(gè)復(fù)位高電平,從而實(shí)現(xiàn)復(fù)位。
復(fù)位電路如圖6所示。
1.009.jpg (11.9 KB, 下載次數(shù): 120)
下載附件
2016-5-7 03:58 上傳
圖6 復(fù)位電路
3.4.2 時(shí)鐘電路設(shè)模塊時(shí)鐘電路作用:單片機(jī)外部必須接上振蕩器,提供的高頻脈沖經(jīng)過分頻處理后,成為單片機(jī)內(nèi)部時(shí)鐘信號(hào),作為片內(nèi)各部件協(xié)調(diào)工作的控制信號(hào)。如果沒有時(shí)鐘信號(hào),觸發(fā)器的狀態(tài)就不能改變,單片機(jī)內(nèi)部的所有電路在完成一個(gè)任務(wù)后將最終達(dá)到一個(gè)穩(wěn)定狀態(tài)而不能再繼續(xù)進(jìn)行其它任何工作了。
時(shí)鐘電路如圖7所示:
1.010.jpg (7.34 KB, 下載次數(shù): 126)
下載附件
2016-5-7 03:58 上傳
圖7 時(shí)鐘電路
3.4.3 報(bào)警電路模塊當(dāng)被測環(huán)境溫度超過溫度上下限時(shí),我們需要進(jìn)行報(bào)警處理,這里用到的是蜂鳴器。
蜂鳴器工作電流一般為10mA,而單片機(jī)的I/O口只能承受幾毫安的電流,因此需要加三極管進(jìn)行驅(qū)動(dòng),單片機(jī)的I/O口中的P1.4接三極管的基極,當(dāng)P1.4為低電平時(shí),三極管導(dǎo)通,5V的電壓加載到蜂鳴器兩端,于是蜂鳴器鳴叫;當(dāng)P1.4高電平時(shí),三極管截止,蜂鳴器不鳴叫。
報(bào)警電路如下圖8所示:
1.011.jpg (10.04 KB, 下載次數(shù): 117)
下載附件
2016-5-7 03:58 上傳
圖8 報(bào)警電路
3.4.4顯示電路模塊顯示系統(tǒng)是單片機(jī)控制系統(tǒng)的重要組成部分,單片機(jī)應(yīng)用系常采用7段LED數(shù)碼管作為顯示器,這種顯示器具有耗電低、線路簡單、價(jià)格低廉等優(yōu)點(diǎn)。
LED數(shù)碼管顯示器可以分為共陰極和共陽極兩種結(jié)構(gòu)。
(1)共陰極結(jié)構(gòu):如果所有的發(fā)光二極管的陰極接在一起,稱為共陰極結(jié)構(gòu);
(2)共陽極結(jié)構(gòu):如果所有的發(fā)光二極管的陽極接在一起,稱為共陽極結(jié)構(gòu)。
七段LED顯示器是由7個(gè)LED按—定的圖形排列組成,如圖9所示,七段LED顯示器的各個(gè)二極管分別稱為a、b、c、d、e、f、g段,有些七段顯示器增加一個(gè)dp段表示小數(shù)點(diǎn),也稱為八段LED顯示器。
1.012.jpg (7.39 KB, 下載次數(shù): 153)
下載附件
2016-5-7 03:58 上傳
圖9 典型七段LED器件
將數(shù)碼管的引腳和單片機(jī)的數(shù)據(jù)輸出口相連,控制輸出的數(shù)據(jù)可以使數(shù)碼管顯示不同的數(shù)字和字符,通常稱控制發(fā)光二極管的8位字節(jié)數(shù)據(jù)為段選碼。7段LED段選碼如表6所示。
表6 7段LED段選碼
本設(shè)計(jì)采用四位共陰極動(dòng)態(tài)顯示方式,可以直接讀取溫度值,顯示溫度可以精確到1℃。
圖10為顯示電路的連接圖。
1.013.jpg (15.84 KB, 下載次數(shù): 123)
下載附件
2016-5-7 03:58 上傳
圖10 顯示電路
3.4.5按鍵電路模塊該電路采用彈性按鍵。按鍵電路的作用是手動(dòng)設(shè)置溫度的上下限。按下K4,進(jìn)行上下限報(bào)警切換,通過K1和K2調(diào)節(jié)溫度上下限,最后,按下K3確認(rèn)。
具體的按鍵電路圖如下圖11所示:
1.014.jpg (12.38 KB, 下載次數(shù): 136)
下載附件
2016-5-7 03:58 上傳
圖11 按鍵電路
3.4.6溫度檢測電路模塊該電路中溫度傳感器采用Dallas公司生產(chǎn)的數(shù)字溫度傳感器DS18B20。該芯片硬件接口簡單,使用方便,且節(jié)省大量的導(dǎo)線,具有很好的通用性。該系統(tǒng)中將單片機(jī)的P1.1引腳與DS18B20的數(shù)據(jù)線連接。
具體的溫度檢測電路圖如下圖12所示:
1.015.jpg (8.66 KB, 下載次數(shù): 163)
下載附件
2016-5-7 03:58 上傳
圖12 溫度檢測電路
4系統(tǒng)軟件設(shè)計(jì) 4.1系統(tǒng)主程序設(shè)計(jì)主程序是系統(tǒng)的監(jiān)控程序,在程序運(yùn)行的過程中必須先經(jīng)過初始化,包括開機(jī)啟動(dòng)子程序,中斷程序,報(bào)警函數(shù),按鍵掃描子程序以及控制端口的初始化工作。系統(tǒng)在初始化完成后就進(jìn)入溫度測量程序,實(shí)時(shí)的測量當(dāng)前的溫度并通過顯示電路在LCD上顯示。程序中以中斷的方式來重新設(shè)定溫度的上下限,根據(jù)硬件設(shè)計(jì)完成對(duì)溫度的控制,系統(tǒng)軟件設(shè)計(jì)的總體流程圖如下圖13。
1.016.jpg (45.84 KB, 下載次數(shù): 133)
下載附件
2016-5-7 03:58 上傳
圖13 系統(tǒng)主程序框圖
主程序如下:
void main()
{
TCON=0x01; //定時(shí)器T0工作在01模式下
TMOD=0X01;
TH0=0XD8; //裝入初值
TL0=0XF0;
EA=1; //開總中斷
ET0=1; //開T0中斷
TR0=1; //T0開始運(yùn)行計(jì)數(shù)
EX0=1; //開外部中斷0
for(n=0;n<500;n++) //顯示啟動(dòng)LOGo"- - - -"
{bell=1;warn=1;logo();}
Red=0;
while(1)
{
key();
ss=ReadTemperature();
Show();
alarm(); //報(bào)警函數(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所示。
1.017.jpg (20.59 KB, 下載次數(shù): 139)
下載附件
2016-5-7 03:58 上傳
圖14 DS18B20初始化程序流程圖
DS18B20初始化程序如下:
Init_DS18B20(void) //傳感器初始化
{
uchar x=0;
DATA = 1; //DQ復(fù)位
delay(10); //稍做延時(shí)
DATA = 0; //單片機(jī)將DQ拉低
delay(80); //精確延時(shí) 大于 480us
DATA = 1; //拉高總線
delay(20);
x=DATA; //稍做延時(shí)后 如果x=0則初始化成功 x=1則初始化失敗
delay(30);
}
4.3 DS18B20讀取溫度子程序讀出溫度子程序的主要功能是讀出RAM中的9字節(jié),在讀出時(shí)需進(jìn)行CRC校驗(yàn),校驗(yàn)有錯(cuò)時(shí)不進(jìn)行溫度數(shù)據(jù)的改寫。
DSBl820可以從單總線獲取電源,當(dāng)信號(hào)線為高電平時(shí),將能量貯存在內(nèi)部電容器中;當(dāng)單信號(hào)線為低電平時(shí),將該電源斷開,直到信號(hào)線變?yōu)楦唠娖街匦陆由霞纳?電容)電源為止。DSl8820的供電方式靈活,利用外接電源還可增加系統(tǒng)的穩(wěn)定性和可靠性。圖15為讀取數(shù)據(jù)流程圖。
1.018.jpg (24.17 KB, 下載次數(shù): 140)
下載附件
2016-5-7 03:58 上傳
圖15 DS18B20讀取溫度子程序流程圖
讀取溫度子程序如下:
int ReadTemperature(void) //讀取溫度
{
uchar a=0;
uchar b=0;
int t=0;
float tt=0;
Init_DS18B20();
WriteOneChar(0xCC); // 跳過讀序號(hào)列號(hào)的操作
WriteOneChar(0x44); // 啟動(dòng)溫度轉(zhuǎn)換
Init_DS18B20();
WriteOneChar(0xCC); //跳過讀序號(hào)列號(hào)的操作
WriteOneChar(0xBE); //讀取溫度寄存器等(共可讀9個(gè)寄存器) 前兩個(gè)就是溫度
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ù)提取出來,分為三個(gè)部分:小數(shù)部分、整數(shù)部分和符號(hào)部分。小數(shù)部分進(jìn)行四舍五入處理:大于0.5℃的話,向個(gè)位進(jìn)1;小于0.5℃的時(shí)候,舍去不要。當(dāng)數(shù)據(jù)是個(gè)負(fù)數(shù)的時(shí)候,顯示之前要進(jìn)行數(shù)據(jù)轉(zhuǎn)換,將其整數(shù)部分取反加一。還因?yàn)镈S18B20最低溫度只能為-55℃,所以可以將整數(shù)部分的最高位換成一個(gè)“-”,表示為負(fù)數(shù)。
圖16為溫度數(shù)據(jù)處理程序的流程圖:
1.019.jpg (39.27 KB, 下載次數(shù): 112)
下載附件
2016-5-7 03:58 上傳
圖16 顯示數(shù)據(jù)處理子程序
以下是顯示正值子函數(shù)的程序:
void display()
{
buf[1]=temp/1000; //顯示百位
buf[2]=temp/100%10; //顯示十位
buf[3]=temp%100/10; //顯示個(gè)位
buf[0]=temp%10; //小數(shù)位
for(j=0;j<3;j++)
{
P2=0xff; // 初始燈為滅的
P0=0x00;
P2=0xfd; //顯示小數(shù)點(diǎn)
P0=0x80; //顯示小數(shù)點(diǎn)
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)支持手動(dòng)設(shè)置溫度上下限,而按鍵掃描的主要功能就是手動(dòng)設(shè)置溫度的上下限。系統(tǒng)默認(rèn)的溫度上下限是10℃~32℃。當(dāng)被測溫度值處于0℃~125℃時(shí),若被測溫度沒有超過上下限,則蜂鳴器不鳴叫,否則蜂鳴器鳴叫;當(dāng)被測溫度值處于0℃以下時(shí),蜂鳴器鳴叫較急促。
為了防止抖動(dòng),按鍵電路中都要消抖的措施,本設(shè)計(jì)中是采用的軟件消抖,在單片機(jī)檢測到某個(gè)鍵按下后,延時(shí)10ms再監(jiān)測,如果仍然按下,才確定按下了該鍵。
按鍵K4、K1、K2、K3分別與單片機(jī)的P2.4-P2.7引腳連接。默認(rèn)狀態(tài)設(shè)置溫度上限,若按下按鍵K4,也就是使P2.4為低電平時(shí),進(jìn)入溫度下限的設(shè)置,再按一次進(jìn)入溫度上限的設(shè)置;在每個(gè)溫度上下限設(shè)置里面,按下K1一次增加1℃溫度值,按下按鍵K一次減小1℃溫度值,最后按K3確定。
按鍵掃描子程序的流程圖如下圖17所示:
1.020.jpg (41.92 KB, 下載次數(shù): 151)
下載附件
2016-5-7 03:58 上傳
圖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ù)位,開定時(shí)
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è)計(jì)采用Keil uVision2來編寫C語言程序,通過它的編譯器進(jìn)行編譯、連接,最后將生成的機(jī)器碼下載到單片機(jī)上。
Keil C51編譯器是目前最流行的開發(fā)MCS-51系列單片機(jī)的軟件,它具有C編輯器、宏匯編、鏈接器、庫管理和一個(gè)功能強(qiáng)大的仿真調(diào)試等在內(nèi)的功能,并通過一個(gè)集成開發(fā)環(huán)境將這些部份組合在一起。
打開Proteus ISIS,在Proteus ISIS編輯窗口中單擊元件列表之上的“P”按鈕 ,添加元件及放置元件。
按照正確的方法,合理地布局將各個(gè)元器件連線,得到如下界面,如圖18所示:
1.021.jpg (85.63 KB, 下載次數(shù): 168)
下載附件
2016-5-7 03:58 上傳
圖 18 整體電路圖
把剛才產(chǎn)生的可執(zhí)行hex文件下載到單片機(jī)中,單擊運(yùn)行按鈕,電路瞬間導(dǎo)通,程序首先進(jìn)入Logo函數(shù)進(jìn)行開機(jī)檢測。此時(shí)單片機(jī)給正負(fù)溫度指示燈和報(bào)警指示燈高電平,給溫度上限指示燈低電平,使它們正常發(fā)光,給共陰極數(shù)碼管相應(yīng)的位高電平,使其動(dòng)態(tài)顯示溫度為85℃。由于85℃不在默認(rèn)溫度上下限10℃~32℃之間,所以此時(shí)正溫度指示燈亮,報(bào)警指示燈閃爍,蜂鳴器也開始鳴叫。大約200ms后,開機(jī)檢測結(jié)束,溫度回到當(dāng)前環(huán)境溫度5℃,由于默認(rèn)的溫度上下限是10℃~32℃,所以
正溫度指示燈亮,報(bào)警指示燈閃爍,蜂鳴器鳴叫。
仿真結(jié)果如圖19所示。
1.022.jpg (58.1 KB, 下載次數(shù): 144)
下載附件
2016-5-7 03:58 上傳
圖19 數(shù)字溫度計(jì)仿真圖
我們?cè)俅握{(diào)節(jié)環(huán)境溫度,使環(huán)境溫度處于15℃,由于此時(shí)溫度不在溫度上下限10℃~32℃之間,因此單片機(jī)給正溫度指示燈高電平,給報(bào)警指示燈低電平,所以正溫度指示燈高電平亮,報(bào)警指示燈熄滅,蜂鳴器也不鳴叫。
仿真結(jié)果如圖20所示。
1.023.jpg (54.58 KB, 下載次數(shù): 135)
下載附件
2016-5-7 03:58 上傳
圖20 數(shù)字溫度計(jì)仿真圖
再次調(diào)節(jié)溫度,使溫度在-10℃,此時(shí)溫度不在溫度上下限之間,此時(shí)單片機(jī)給負(fù)溫度指示燈高電平,報(bào)警指示燈高電平,所以負(fù)溫度指示燈亮,報(bào)警指示燈閃爍,并且蜂鳴器鳴叫較為急促。
仿真結(jié)果如圖21所示。
1.024.jpg (53.84 KB, 下載次數(shù): 133)
下載附件
2016-5-7 03:58 上傳
圖21 數(shù)字溫度計(jì)仿真圖
默認(rèn)情況下設(shè)置溫度上限,若按下K4進(jìn)入溫度下限設(shè)置。通過按鍵K1和K2增加或減少溫度值,最后按下K3確認(rèn)。比如設(shè)置溫度上下限為15℃~40℃,當(dāng)環(huán)境溫度處于35℃時(shí),而35℃在設(shè)置的溫度上下限15℃~40℃之間,因此報(bào)警電路不工作。
仿真電路如圖22所示。
1.025.jpg (57.04 KB, 下載次數(shù): 148)
下載附件
2016-5-7 03:58 上傳
圖22 數(shù)字溫度計(jì)仿真圖
當(dāng)環(huán)境溫度處于12℃時(shí),當(dāng)溫度在溫度上下限15℃~40℃之間時(shí),報(bào)警電路開始工作,報(bào)警指示燈閃爍,蜂鳴器鳴叫。
仿真電路如圖23所示。
1.026.jpg (54.89 KB, 下載次數(shù): 156)
下載附件
2016-5-7 03:58 上傳
圖23 數(shù)字溫度計(jì)仿真圖
結(jié)果分析:
本文介紹并設(shè)計(jì)的數(shù)字溫度計(jì)的基本測量范圍是-30℃~125℃,并且具有自動(dòng)報(bào)警功能和默認(rèn)溫度上下限(10℃~32℃),還可以手動(dòng)設(shè)置溫度上下限,用4位一體數(shù)碼管顯示設(shè)置溫度的上下限和當(dāng)前環(huán)境的溫度。由于所采用的是DS18B20溫度傳感器,它的可測量范圍是-55℃~125℃,測量溫度在-10℃~85℃之間時(shí)的可分辨溫度是0.5℃,我們將小數(shù)位始終顯示為0,也即顯示的溫度精度是1℃。如果當(dāng)前環(huán)境溫度在默認(rèn)的溫度上下限之間,主函數(shù)不會(huì)調(diào)用報(bào)警子程序,報(bào)警電路不會(huì)工作,蜂鳴器也不鳴叫;如果當(dāng)前環(huán)境溫度在默認(rèn)的溫度上下限之外,主函數(shù)就會(huì)調(diào)用報(bào)警子程序,此時(shí)單片機(jī)送給報(bào)警指示燈蜂鳴器高電平,報(bào)警指示燈閃爍,蜂鳴器鳴叫,直到環(huán)境溫度回到默認(rèn)的溫度上下限之間。當(dāng)然,由于本設(shè)計(jì)支持手動(dòng)設(shè)置溫度上下限,我們也可以手動(dòng)設(shè)置溫度上下限。
由仿真結(jié)果及設(shè)計(jì)要求完成的指標(biāo)可知,該設(shè)計(jì)基本符合設(shè)計(jì)要求。
總結(jié)
畢業(yè)設(shè)計(jì)完成了,在這個(gè)過程中使我覺得不論從理論知識(shí)還是從實(shí)際設(shè)計(jì)中都學(xué)到了不少知識(shí)。在寫論文開始的初期,由于對(duì)溫度傳感器的較陌生,我對(duì)于論文的結(jié)構(gòu)以及文獻(xiàn)選取等方面都有很多問題,通過對(duì)溫度計(jì)原理的認(rèn)識(shí),最后確定了設(shè)計(jì)溫度計(jì)的功能以及各類功能模塊的器件選擇。認(rèn)識(shí)到很多知識(shí)以前都沒有接觸過,所以制定了一個(gè)大致的計(jì)劃,希望能夠很好的完成論文。在接下來的畢業(yè)設(shè)計(jì)中,主要是深入對(duì)前期溫度設(shè)計(jì)方案的認(rèn)識(shí)。在這期間,很多知識(shí)都是第一次接觸,通過查找了很多知識(shí),認(rèn)真閱讀,但困難最大的還是硬件的設(shè)計(jì)和程序編寫方面,第一次設(shè)計(jì)起來覺得相當(dāng)吃力,剛開始不知道從何下手。后來,通過老師的指導(dǎo)和同學(xué)的幫助,克服了種種困難完成了設(shè)計(jì)。在作畢業(yè)設(shè)計(jì)的過程中,還認(rèn)識(shí)到理論對(duì)實(shí)踐有很大的指導(dǎo)作用,只有在正確的理論指導(dǎo)下,才能設(shè)計(jì)出合乎實(shí)際需要的系統(tǒng)電路。
這次畢業(yè)設(shè)計(jì)是對(duì)大學(xué)所學(xué)知識(shí)的一次實(shí)際應(yīng)用,同時(shí)對(duì)自學(xué)能力提出了很高的要求,所以理論不能聯(lián)系實(shí)際,就是嚴(yán)重的錯(cuò)誤,我們不能只為了考試而學(xué)習(xí)。并且在學(xué)習(xí)的過程中更要廣闊的汲取各方面的知識(shí),才能更好的為以后的工作打好基礎(chǔ)。