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