基于單片機(jī)的溫控報(bào)警器設(shè)計(jì)_第1頁
基于單片機(jī)的溫控報(bào)警器設(shè)計(jì)_第2頁
基于單片機(jī)的溫控報(bào)警器設(shè)計(jì)_第3頁
基于單片機(jī)的溫控報(bào)警器設(shè)計(jì)_第4頁
基于單片機(jī)的溫控報(bào)警器設(shè)計(jì)_第5頁
已閱讀5頁,還剩48頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、廣州大學(xué)松田學(xué)院畢業(yè)論文(設(shè)計(jì))題目_ 基于單片機(jī)的溫控報(bào)警器設(shè)計(jì)_ 基于單片機(jī)的溫控報(bào)警器設(shè)計(jì)摘要:溫度是我們?nèi)粘Ia(chǎn)和生活中實(shí)時接觸到的物理量,但是它是看不到的,僅憑感覺只能感覺到大概的溫度值,傳統(tǒng)的指針式的溫度計(jì)雖然能指示溫度,但是精度低,使用不夠方便,顯示不夠直觀,數(shù)字溫度計(jì)就應(yīng)運(yùn)而生了,利用數(shù)字讓人們更加直觀的了解自己想知道的溫度到底是多少。所以,溫度的測量是一個很重要的物理參數(shù),它能直接告訴人們所需要的溫度的大小。隨著世界的科技發(fā)展,對于溫度的測量要求也是越來越嚴(yán)格了,但是測量溫度的環(huán)境也越來越惡劣。溫度的測量不僅僅局限于外出穿衣的指標(biāo)上了,在現(xiàn)實(shí)的社會中,溫度的測量和控制無處不在

2、,例如家庭里面都能看見的冰箱的自動溫度調(diào)節(jié)。但是很多時候,在惡劣的環(huán)境中的測量則會受到很大程度的限制,尤其在工業(yè)控制中,在這個時候,溫度測量的自動控制先得尤為重要。本文將要介紹的是和采用ds18b20作為溫度傳感器,自動測量當(dāng)前溫度,由單片機(jī)avr mega16進(jìn)行處理控制,并通過lcd1602顯示設(shè)定溫度和當(dāng)前溫度,若當(dāng)前溫度超過設(shè)定溫度,系統(tǒng)將會進(jìn)行比較簡單的聲光報(bào)警。關(guān)鍵詞: ds18b20,lcd1602,單片機(jī),聲光報(bào)警temperature alarm design based on scmabstract: the temperature is real-time access

3、to the physical quantities in our daily production and life, but it can not see, just by feeling it probably only feel the temperature values, traditional pointer thermometer indicates that the temperature, but low accuracy, use is not convenient enough, the display is not intuitive, digital thermom

4、eter is made using digital more intuitive understanding of the temperature in the end they want to know is how much.therefore, the temperature measurement is a very important physical parameters can directly tell people the size of the required temperature. with the development of science and techno

5、logy of the world, for the temperature measurement requirements become increasingly stringent, measure the temperature of the environment is also worsening. temperature measurement is not limited to the indicators go out dressed in the reality of the society, the measurement and control of temperatu

6、re everywhere, for example, the family can see inside the refrigerator thermostat. but many times, in the harsh environment of the measurement will be subject to a large degree of restriction, especially in industrial control, at this time, the automatic control of the temperature measurement-come p

7、articularly important.this article is ds18b20 as the temperature sensor and the use of automatic measurement of the current temperature, to be processed by the microcontroller avr mega16 control displays the set temperature and the current temperature and through lcd1602 to, if the temperature excee

8、ds the set temperature, the system will be relatively simple the sound and light alarm.keywords: scm, ds18b20, lcd1602, sound and light alarm目 錄1緒論61.1課題的背景61.2課題的意義61.3研究的基本內(nèi)容與擬解決的主要問題71.3.1研究的基本內(nèi)容71.3.2擬解決的主要問題82設(shè)計(jì)的思路82.1設(shè)計(jì)基本原理82.2設(shè)計(jì)的基本條件92.3溫度報(bào)警器的技術(shù)和工作原理92.3.1ds18b20溫度傳感器介紹92.3.2ds18b20的初始化102.3.

9、3ds18b20的寫操作102.3.4ds18b20的讀操作112.3.5ds18b20內(nèi)部結(jié)構(gòu)圖112.3.6ds18b20工作原理112.4液晶顯示屏lcd1602主要參數(shù)技術(shù)122.4.1引腳接口說明表122.4.2lcd1602的指令說明及時序132.5atmega16單片機(jī)介紹133系統(tǒng)硬件設(shè)計(jì)133.1溫度傳感器設(shè)計(jì)133.2液晶lcd1602顯示部分設(shè)計(jì)143.3單片機(jī)atmega16原理圖設(shè)計(jì)153.3.1程序燒寫163.3.2電源端口163.3.3串口通訊端的設(shè)計(jì)163.3.4報(bào)警設(shè)計(jì)173.3.5按鍵設(shè)計(jì)174系統(tǒng)軟件設(shè)計(jì)184.1流程圖185溫度數(shù)據(jù)處理函數(shù)195.1ds

10、18b20初始化函數(shù)195.2傳感器ds18b20的子函數(shù)195.2.1傳感器ds18b20寫命令子函數(shù)205.2.2ds18b20讀一個字節(jié)數(shù)據(jù)子函數(shù)215.3lcd1602顯示函數(shù)235.3.1lcd1602初始化子函數(shù)235.3.2lcd1602寫數(shù)據(jù)子函數(shù)245.3.3lcd1602寫命令子函數(shù)245.4按鍵函數(shù)255.5主函數(shù)286系統(tǒng)調(diào)試306.1軟硬件調(diào)試以及分析30參考文獻(xiàn)31附錄321 緒論1.1 課題的背景溫度是我們?nèi)粘Ia(chǎn)和生活中實(shí)時在接觸到的物理量,但是它是看不到的,僅憑感覺只能感覺到大概的溫度值,傳統(tǒng)的指針式的溫度計(jì)雖然能指示溫度,但是精度低,使用不夠方便,顯示不夠直

11、觀,數(shù)字溫度計(jì)的出現(xiàn)可以讓人們直觀的了解自己想知道的溫度到底是多少度。所以,溫度的測量是一個很重要的物理參數(shù),它能直接告訴人們所需要的溫度的大小。隨著世界的科技發(fā)展,對于溫度的測量要求也是越來越嚴(yán)格了,但是測量溫度的環(huán)境也越來越惡劣。溫度的測量不僅僅局限于外出穿衣的指標(biāo)上了,在現(xiàn)實(shí)的社會中,溫度的測量和控制無處不在,例如家庭里面都能看見的冰箱的自動溫度調(diào)節(jié)。但是很多時候,在惡劣的環(huán)境中的測量則會受到很大程度的限制,尤其在工業(yè)控制中,在這個時候,溫度測量的自動控制先得尤為重要。1.2 課題的意義溫度控制技術(shù)在工業(yè)上有很多方面都起到一個至關(guān)重要的作用。隨著現(xiàn)代工農(nóng)業(yè)技術(shù)的發(fā)展和人們對生活環(huán)境要求的

12、提高,人們迫切需要檢測與控制溫度。這次溫度報(bào)警器的設(shè)計(jì)與制作,闡明了該裝置進(jìn)行設(shè)計(jì)與制作的具體過程以及方法。這種溫度報(bào)警器的機(jī)構(gòu)并不復(fù)雜,而且可操作性強(qiáng),應(yīng)用廣泛,擴(kuò)展性好。工作時,設(shè)定好溫度測量的范圍,若當(dāng)前環(huán)境溫度超過設(shè)定的高溫臨界溫度,由單片機(jī)發(fā)出聲光報(bào)警信號,防止因溫度再升高而帶來的不必要的損失。在農(nóng)業(yè)生產(chǎn)中,溫室的溫度是很難把握的。往往會超過或低于允許值,致使大批良種的報(bào)廢,耽誤農(nóng)時,影響生產(chǎn)。在工業(yè)中,現(xiàn)今社會是個信息的時代,隨著信息科技的高速發(fā)展和安全指數(shù)的日益提高,機(jī)房,作為現(xiàn)代化的代名詞,信息化的樞紐,其工作安全系數(shù)已經(jīng)成為系統(tǒng)的重中之重,機(jī)房內(nèi)的機(jī)械一旦發(fā)生故障,將可能帶來

13、信息系統(tǒng)崩潰式的癱瘓。若電氣線路發(fā)生短路、過載等故障而達(dá)到局部高溫從而引發(fā)火災(zāi),那損失是無法想象的。最重要的是,若果溫度得不到有效的調(diào)節(jié),會令機(jī)房內(nèi)的電子設(shè)備、機(jī)械老化,導(dǎo)致這樣那樣的故障出現(xiàn)。一般的電子產(chǎn)品都是發(fā)熱快,若散熱設(shè)施做的不夠及時而令機(jī)房內(nèi)溫度短時間內(nèi)超出設(shè)備正常的溫度,就會導(dǎo)致系統(tǒng)癱瘓或者火災(zāi)的事故發(fā)生。在日常生活中,也經(jīng)常要用到高功率的電器,但是高功率電器的發(fā)熱量大,有時候又可能引起火災(zāi)等等之類的危險(xiǎn)情況。綜合以上種種情況的出現(xiàn),溫度報(bào)警器就極其需要,只要環(huán)境溫度超過一定范圍時報(bào)警,來提醒使用者。數(shù)字溫度計(jì)的出現(xiàn)為現(xiàn)今社會帶來一定程度上的方便。它采用溫度敏感元件也就是溫度傳感器

14、(如鉑電阻,熱電偶,半導(dǎo)體,熱敏電阻等),將溫度的變化轉(zhuǎn)換成電信號的變化,如電壓和電流的變化,溫度變化和電信號的變化有一定的關(guān)系,如線性關(guān)系,一定的曲線關(guān)系等,這個電信號可以使用模數(shù)轉(zhuǎn)換的電路即ad轉(zhuǎn)換電路將模擬信號轉(zhuǎn)換為數(shù)字信號,數(shù)字信號再送給處理單元,如單片機(jī)或者pc機(jī)等,處理單元經(jīng)過內(nèi)部的軟件計(jì)算將這個數(shù)字信號和溫度聯(lián)系起來,成為可以顯示出來的溫度數(shù)值,如25.0攝氏度,然后通過顯示單元,如led,,lcd或者電腦屏幕等顯示出來給人觀察。這樣就完成了數(shù)字溫度計(jì)的基本測溫功能。數(shù)字溫度計(jì)根據(jù)使用的傳感器的不同,ad轉(zhuǎn)換電路,及處理單元的不同,它的精度,穩(wěn)定性,測溫范圍等都有區(qū)別,這就要根據(jù)

15、實(shí)際情況選擇符合規(guī)格的數(shù)字溫度計(jì)。1.3 研究的基本內(nèi)容與擬解決的主要問題1.3.1 研究的基本內(nèi)容要設(shè)計(jì)出一款由單片機(jī)控制的溫度報(bào)警器,首先,我們要知道溫度傳感器的選擇??梢圆捎眉苫臏囟葌鞲衅髦苯觽鬏敂?shù)據(jù)由單片機(jī)處理,或者用熱敏電阻來達(dá)到預(yù)期的效果。利用集成化的傳感器成本較高,但其準(zhǔn)確性相對于熱敏電阻比較有保障,而且單片機(jī)處理的數(shù)據(jù)也會少很多。所以我會選擇采用集成化溫度傳感器傳輸數(shù)據(jù)、由單片機(jī)收集處理的方案制作溫控報(bào)警裝置。我會首先用protel99繪畫出原理圖和pcb圖,接著編寫單片機(jī)程序,然后在proteus上進(jìn)行仿真工作,最后在實(shí)際電路板上進(jìn)行調(diào)試和改善。1.3.2 擬解決的主要問

16、題擬解決的問題:1. 確定采用哪種傳感器進(jìn)行設(shè)計(jì)。2. 確定系統(tǒng)硬件的組成3. 確定好系統(tǒng)的模型。4. 設(shè)計(jì)好原理圖和程序設(shè)計(jì)。5. 準(zhǔn)備好制作的各種材料。6. 通過仿真以及調(diào)試,找出未解決問題。2 設(shè)計(jì)的思路這次設(shè)計(jì)的思路在于設(shè)計(jì)出一個可以根據(jù)實(shí)時溫度和設(shè)定溫度對比之后進(jìn)行聲光報(bào)警的溫度控制報(bào)警器。這個報(bào)警器能夠穩(wěn)定運(yùn)行,并且能夠在大多數(shù)情況下對高溫帶來的不良影響有一個預(yù)警的作用,防止一些對高溫敏感的器械有不良情況出現(xiàn)。利用數(shù)字溫度芯片ds18b20測量溫度,輸出信號全數(shù)字化。便于單片機(jī)處理及控制,省去傳統(tǒng)的測溫方法的很多外圍電路。采用lcd1602作為數(shù)字顯示模塊,用avrmega16進(jìn)行

17、軟件設(shè)計(jì)2.1 設(shè)計(jì)基本原理ds18b20采集溫度數(shù)據(jù),經(jīng)過單片機(jī)響應(yīng)之后發(fā)送數(shù)據(jù)到單片機(jī)。再經(jīng)由單片機(jī)進(jìn)行處理和分析。然后將用ds18b20采集回來的數(shù)據(jù)經(jīng)處理后打印到lcd1602上。且經(jīng)過按鍵設(shè)定報(bào)警溫度并同將設(shè)定溫度打印到lcd1602上,這里用采集回來的數(shù)據(jù)跟設(shè)定的數(shù)據(jù)作對比。對比之后,由單片機(jī)判斷是否報(bào)警。圖1 基本設(shè)計(jì)框圖收集/輸入數(shù)據(jù)lcd1602輸出數(shù)據(jù)ds18b20報(bào)警mega16led電源2.2 設(shè)計(jì)的基本條件本設(shè)計(jì)是利用ds18b20溫度傳感器設(shè)計(jì)的一個液晶顯示溫度報(bào)警器。設(shè)定安全溫度在-10125(可根據(jù)具體需要在程序中進(jìn)行調(diào)整),對在這一范圍內(nèi)的溫度變化采集后送入單

18、片的端口。例如傳感器的溫度為100c,則對應(yīng)的lcd1602上的實(shí)時溫度為100c。而溫度溫度高于125c時,不在安全溫度范圍之內(nèi),蜂鳴器進(jìn)行報(bào)警,發(fā)光二極管發(fā)光顯示。2.3 溫度報(bào)警器的技術(shù)和工作原理2.3.1 ds18b20溫度傳感器介紹ds18b20溫度傳感器是美國dallas半導(dǎo)體公司最新推出的一種改進(jìn)型智能溫度傳感器,與傳統(tǒng)的熱敏電阻等測溫元件相比,它能直接讀出被測溫度,并且可根據(jù)實(shí)際要求通過簡單的編程實(shí)現(xiàn)位的數(shù)字值讀數(shù)方式。ds18b20有獨(dú)特的單線接口方式,和微處理器連接僅需一條口線即可實(shí)現(xiàn)雙向通訊;它不需要任何外圍元件,全部的傳感元件都集成在集成電路內(nèi);電壓范圍在3.05.5v

19、之間,溫度范圍在55125,在-10+85時精度為0.5,符合設(shè)計(jì)條件;它還有負(fù)電壓特性,電源極性接反時,溫度計(jì)不會因發(fā)熱燒毀,實(shí)驗(yàn)結(jié)果。其引腳功能描述見下:1gnd地信號2dq:數(shù)據(jù)輸入/輸出引腳。開漏單總線接口引腳。當(dāng)被用著在寄生電源下,也可以向器件提供電源。3vdd:可選擇的vdd引腳。當(dāng)工作于寄生電源時,此引腳必須接地。圖2 ds18b20封裝圖要注意的一點(diǎn)是,在ds18b20測溫程序設(shè)計(jì)中,向ds18b20 發(fā)出溫度轉(zhuǎn)換命令后,程序總要等待ds18b20的返回信號,一旦某個ds18b20 接觸不好或斷線,當(dāng)程序讀該ds18b20 時,將沒有返回信號,程序進(jìn)入死循環(huán),這一點(diǎn)在進(jìn)行ds1

20、8b20硬件連接和軟件設(shè)計(jì)時也要給予一定的重視。2.3.2 ds18b20的初始化(1) 先將數(shù)據(jù)線置高電平“1”。(2) 延時(該時間要求的不是很嚴(yán)格,但是盡可能的短一點(diǎn))(3) 數(shù)據(jù)線拉到低電平“0”。(4) 延時750微秒(該時間的時間范圍可以從480到960微秒)。(5) 數(shù)據(jù)線拉到高電平“1”。(6) 延時等待(如果初始化成功則在15到60微妙時間之內(nèi)產(chǎn)生一個由ds18b20所返回的低電平“0”。據(jù)該狀態(tài)可以來確定它的存在,但是應(yīng)注意不能無限的進(jìn)行等待,不然會使程序進(jìn)入死循環(huán),所以要進(jìn)行超時控制)。(7) 若單片機(jī)讀到了數(shù)據(jù)線上的低電平“0”后,還要做延時,其延時的時間從發(fā)出的高電平

21、算起(第(5)步的時間算起)最少要480微秒。(8) 將數(shù)據(jù)線再次拉高到高電平“1”后結(jié)束。2.3.3 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ù)線拉高。2.3.4 ds18b20的讀操作(1)將數(shù)據(jù)線拉高“1”。(2)延時2微秒。(3)將數(shù)據(jù)線拉低“0”。(4)延時3微秒。(5)將數(shù)據(jù)線拉高“1”。(6)延時5微秒。(7)讀數(shù)據(jù)線的狀態(tài)得到1個狀態(tài)位,并進(jìn)

22、行數(shù)據(jù)處理。(8)延時60微秒。2.3.5 ds18b20內(nèi)部結(jié)構(gòu)圖ds18b20內(nèi)部結(jié)構(gòu)主要由四部分組成:64位光刻rom 、溫度傳感器、非揮發(fā)的溫度報(bào)警觸發(fā)器th和tl、配置寄存器。圖3 ds18b20內(nèi)部結(jié)構(gòu)2.3.6 ds18b20工作原理圖42.4 液晶顯示屏lcd1602主要參數(shù)技術(shù)表2.1lcd1602技術(shù)參數(shù)表顯示容量:16x2個字符芯片工作電壓:4.55.5v工作電流:2.0ma(5.0v)模塊最佳工作電壓:5.0v字符尺寸:2.95x4.35(wxh)mm2.4.1 引腳接口說明表 第1腳:vss為地電源。 第2腳:vdd接5v正電源。 第3腳:vl為液晶顯示器對比度調(diào)整端

23、,接正電源時對比度最弱,接地時對比度最高,對比度過高時會產(chǎn)生 “鬼影”,使用時可以通過一個10k的電位器調(diào)整對比度。 第4腳:rs為寄存器選擇,高電平時選擇數(shù)據(jù)寄存器、低電平時選擇指令寄存器。 第5腳:r/w為讀寫信號線,高電平時進(jìn)行讀操作,低電平時進(jìn)行寫操作。當(dāng)rs和r/w共同為低電平時可以寫入指令或者顯示地址,當(dāng)rs為低電平r/w為高電平時可以讀忙信號,當(dāng)rs為高電平r/w為低電平時可以寫入數(shù)據(jù)。 第6腳:e端為使能端,當(dāng)e端由高電平跳變成低電平時,液晶模塊執(zhí)行命令。 第714腳:d0d7為8位雙向數(shù)據(jù)線。 第15腳:背光源正極。 第16腳:背光源負(fù)極。2.4.2 lcd1602的指令說明

24、及時序基本操作時序1.讀狀態(tài):輸入:rs=l,rw=h,e=h輸出:d0d7=狀態(tài)字2.寫指令:輸入:rs=l,r/w=l,d0d7=指令碼,e=高脈沖輸出:無3.讀數(shù)據(jù):輸入:rs=h,r/w=h,e=h輸出:=數(shù)據(jù)4.寫數(shù)據(jù):輸入:rs=h,r/w=l,d0d7=數(shù)據(jù),e=高脈沖 輸出:無2.5 atmega16單片機(jī)介紹這次的設(shè)計(jì),要用到的是單片機(jī)atmega16。atmega16是avr系列的8位單片機(jī),雖然它是8位的單片機(jī),但功能非常的強(qiáng)大。有很多的內(nèi)部資源,連接外部的端口多達(dá)44個,有32個是i/o端口,基本每個端口復(fù)用功能都非常好,最高速度達(dá)到16mhz。并且支持串口、模數(shù)轉(zhuǎn)換等

25、功能,擁有512字節(jié)的eeprom,1k字節(jié)片內(nèi)ram,在外加ram和rom的情況完全可以運(yùn)行到ucos操作系統(tǒng)。然而設(shè)計(jì)要用的功能并不多,端口的復(fù)用功能基本用不上,只需要安排足夠的普通i/o端口給溫度傳感器和液晶顯示便可以了。3 系統(tǒng)硬件設(shè)計(jì)3.1 溫度傳感器設(shè)計(jì)這部分設(shè)計(jì)用到了溫度傳感器ds18b20,這種傳感器是單數(shù)據(jù)總線傳感器,一共有三只引腳,一個引腳接電源vcc,一個引腳接地gnd,還有一個就是數(shù)據(jù)總線引腳dq接到單片機(jī)的其中一只引腳。設(shè)計(jì)圖如下;圖5 ds18b20原理圖這個是ds18b20傳感器的硬件設(shè)計(jì)。1腳接電源vcc,2腳是數(shù)據(jù)總線的引腳用于接到單片機(jī)atmega16的pb

26、3引腳,3腳用于接地gnd。還有在設(shè)計(jì)里面考慮到電源的不穩(wěn)定,所以在接近插槽的電源vcc和地gnd之間加了一個0.1u的電容用于濾波,穩(wěn)定電源。3.2 液晶lcd1602顯示部分設(shè)計(jì)這部分設(shè)計(jì)用到了帶字符的液晶顯示器lcd1602,這種液晶顯示器是16*2顯示規(guī)格的帶字符顯示器。這里帶字符顯示的液晶顯示器里面已經(jīng)有一個解釋芯片,當(dāng)收到字符數(shù)據(jù)時,自動識別出字符,不需要在單片機(jī)作解釋,但缺點(diǎn)就是這種帶字符的顯示器不能按照設(shè)計(jì)者的意思隨心所欲地顯示需要的圖案。不過今次設(shè)計(jì)液晶顯示器的功能是用于顯示實(shí)時溫度和設(shè)定溫度,并不需要特殊圖案。因此,帶字符的lcd1602液晶顯示器對于今次設(shè)計(jì)來說,簡單直觀

27、地實(shí)現(xiàn)效果。所以我選擇用帶字符的液晶顯示器。lcd1602原理圖如下:圖6 lcd1602原理圖設(shè)計(jì)按照lcd1602的接口信號來連接引腳。1腳是電源地gnd;2腳接電源正極vcc;3腳接液晶顯示偏壓信號,利用兩個1k的電阻進(jìn)行分壓;4腳到6腳接單片機(jī)atmega16的pd5到pd7,分別代表接到lcd1602的rs、rw、en的引腳;7腳到14腳接按順序接到單片機(jī)atmega16的pb0到pb7引腳,15腳背光源正極接電源正極vcc;16腳背光源負(fù)極接正源地gnd。下表顯示lcd1602的4腳到14腳和單片機(jī)引腳對應(yīng)關(guān)系。表2.2 單片機(jī)與lcd1602引腳對應(yīng)表單片機(jī)atmega16lcd

28、1602單片機(jī)atmega16lcd1602pd5引腳4(rs)pb3引腳10(data3)pd6引腳5(rw)pb4引腳11(data4)pd7引腳6(en)pb5引腳12(data5)pb0引腳7(data0)pb6引腳13(data6)pb1引腳8(data1)pb7引腳14(data7)pb2引腳9(data2)3.3 單片機(jī)atmega16原理圖設(shè)計(jì)這部分是整個單片機(jī)atmega16的設(shè)計(jì)總圖。包含了程序燒寫下載端口,3個按鍵,電源端口,預(yù)留串口通訊端、復(fù)位模塊和聲光報(bào)警模塊。圖7 設(shè)計(jì)部分原理圖3.3.1 程序燒寫這部分設(shè)計(jì)是用于將在電腦端的編寫好的程序燒寫到單片機(jī)atmega16

29、,今次設(shè)計(jì)的下載用asp下載方式。如下圖,采用的是10pin插針。1腳連接單片機(jī)的mosi端;2腳空接;3腳接單片機(jī)reset端;4腳接單片機(jī)sck端;5腳接單片機(jī)miso端;6腳到9腳均接電源地gnd;10腳接vcc。圖8 程序燒寫3.3.2 電源端口這部分只需要外接一個2pin的端子用于連接5v開關(guān)。用一個100u和一個0.1u的電容接電源和電源正極。如下圖:圖9 電源端口接線原理圖3.3.3 串口通訊端的設(shè)計(jì)此設(shè)計(jì)目的是為了能夠使系統(tǒng)在硬件上得到擴(kuò)展型設(shè)計(jì),方便通過串口rs485或者rs232上傳數(shù)據(jù)。圖10 串口設(shè)計(jì)圖如圖顯示有兩個引腳,分別是數(shù)據(jù)發(fā)送和接收。1腳rxd連接到單片機(jī)me

30、ga16港口pd0,引腳2連接到端口txd單片機(jī)mega16 pd1。這里的mega16單片機(jī)pd0口和pd1口是一種特殊的串行通信口,這倆端口可實(shí)現(xiàn)計(jì)算機(jī)與單片機(jī)之間的串口通信。3.3.4 報(bào)警設(shè)計(jì)采用的是聲光報(bào)警的方式來提示實(shí)時溫度已經(jīng)達(dá)到設(shè)定的溫度。硬件上,利用一個有源蜂鳴器和一個led燈來進(jìn)行聲光報(bào)警。當(dāng)實(shí)時溫度到了設(shè)定的溫度,那么蜂鳴器響led燈亮。如下圖11是蜂鳴器部分,1腳接單片機(jī)的pd4端口,2腳接電源地,這里用單片機(jī)高電平驅(qū)動蜂鳴器的方法。如圖12是led燈部分,連接電源正極和單片機(jī)的pb4端口,這里用單片機(jī)低電平驅(qū)動led的方法。圖11 蜂鳴器圖12 led燈3.3.5 按

31、鍵設(shè)計(jì)本設(shè)計(jì)采用4個按鈕,其中之一是用于重置。其他三個按鈕用來設(shè)置設(shè)定溫度。2鍵是用來設(shè)置溫度增加,3鍵來設(shè)定溫度下降,而4鍵是用于切換位數(shù)。4 系統(tǒng)軟件設(shè)計(jì)聲光報(bào)警設(shè)定數(shù)值位數(shù)切換初始化ds18b20初始化lcd1602開始初始化芯片4.1 流程圖判斷數(shù)值是否達(dá)到設(shè)定數(shù)值設(shè)定數(shù)值減1鍵3是否按下設(shè)定數(shù)值加1鍵2是否按下鍵4是否按下5 溫度數(shù)據(jù)處理函數(shù)5.1 ds18b20初始化函數(shù)程序代碼如下:void init_18b20(void) dq_out;/設(shè)置pb3為輸出 dq_set;/拉高pb3電平 delay_10us(1); /延時 dq_clr; /拉低pb3電平 delay_10u

32、s(75); /延時 dq_set; /再次拉高pb3電平 delay_10us(6); /延時 dq_in; /設(shè)置pb3為輸入 while(dq_r); /等待ds18b20返回來的高電平 while(!(dq_r); /等待ds18b20初始化完畢5.2 傳感器ds18b20的子函數(shù)程序代碼如下:uint read_18b20_temp(void) uchar temp1,temp2; int temp; init_18b20(); /復(fù)位18b20 write_18b20_com(0xcc); /忽略rom配置 write_18b20_com(0x44); /發(fā)出轉(zhuǎn)換命令 init_1

33、8b20(); write_18b20_com(0xcc); write_18b20_com(0xbe); /發(fā)出讀溫度命令 temp1=read_18b20_byte(); /讀取到溫度的前兩個字節(jié) temp2=read_18b20_byte(); init_18b20(); /復(fù)位18b20 temp=(temp28)|temp1)*0.625);/設(shè)置輸出形式為小數(shù)點(diǎn)后一位 return temp;這是一個有返回值的函數(shù)。由單片機(jī)發(fā)出信號,等待傳感器返回溫度數(shù)值,再將返回的數(shù)值進(jìn)行處理。這里首先要初始化傳感器,等待初始化完畢,我們發(fā)送轉(zhuǎn)換命令0x44。這里有個需要注意的是命令0xcc,這

34、是一個忽略單片機(jī)rom配置噶命令,原本rom配置命令是當(dāng)有多個傳感器的時候要用到選擇傳感器的id,但設(shè)計(jì)中只有一個傳感器,所以就不需要理會rom配置了。接著發(fā)出轉(zhuǎn)換命令之后,再次初始化傳感器,再發(fā)出讀溫度命令0xbe。接著就是將讀回來兩次數(shù)據(jù)分別裝進(jìn)兩個全部變量里面。接著是初始化傳感器,說明一次的溫度轉(zhuǎn)換完成了。5.2.1 傳感器ds18b20寫命令子函數(shù)程序代碼如下:void write_18b20_com(uchar com) uchar i; for(i=0;i=1;/命令右移一位 delay_10us(5);/延時這個是單片機(jī)向傳感器寫命令的函數(shù)。這里我們一開始就是一個循環(huán)語句,因?yàn)檫@

35、里需要傳送的命令都為8位,一次只能傳送一位到傳感器,所以需要分別傳送8次。進(jìn)入循環(huán)語句之后,我們將引腳設(shè)置為輸出并拉低引腳電平。之后就是進(jìn)入一個判斷語句,判斷命令的最后一位是否為1,當(dāng)為1拉高引腳電平,但不為1拉低引腳電平。接著就是延時50us等待傳感器反應(yīng),再接著是拉高電平指示這次的傳送完畢,后面跟著就是需要將命令右移一位。這樣直到整個命令完全傳送到傳感器中,再然后延時等待傳感器反應(yīng)。5.2.2 ds18b20讀一個字節(jié)數(shù)據(jù)子函數(shù)程序代碼如下:uchar read_18b20_byte(void) uchar i,retd=0; for(i=0;i=1;/數(shù)據(jù)右移一位 dq_out;/設(shè)置p

36、b3為輸出 dq_clr;/拉低電平 dq_set;/拉高電平 nop();nop();nop();nop();/延時 dq_in;/設(shè)置pb3為輸入 if(dq_r)/判斷輸入數(shù)據(jù)是否為1 retd|=0x80;/數(shù)據(jù)變量的最高位為1 delay_10us(5); return retd;/返回?cái)?shù)據(jù)變量這個函數(shù)是用于讀取傳感器一個字節(jié)的數(shù)據(jù),就是一個8位數(shù)據(jù)。首先,定義一個8位局部變量用于數(shù)值的返回。這里有一個循環(huán)語句,同樣是8次,一次只能讀一位的數(shù)據(jù)。進(jìn)入循環(huán)語句之后,首先要將變量右移一位,這里值得注意的是這個變量不需要給一個它初始值,因?yàn)闊o論初始值是什么并不影響數(shù)據(jù)的讀出。右移一位之后,

37、設(shè)置引腳為輸出并拉低電平,緊接就是拉高電平,延時等待傳感器反應(yīng)。再之后是設(shè)置引腳為輸入,讀一位數(shù)據(jù),當(dāng)這位數(shù)據(jù)是1,我們便將變量的最高位設(shè)置為1。延時50us等待傳感器,當(dāng)循環(huán)語句結(jié)束,返回?cái)?shù)據(jù)變量給相關(guān)的函數(shù)、語句使用。5.3 lcd1602顯示函數(shù)5.3.1 lcd1602初始化子函數(shù)程序代碼如下:void lcd_init(void) lcd_w_com(0x38,0); /8位數(shù)據(jù)傳輸,2行顯示,5*7字形,不檢測忙信號 delay_ms(5); /延時5ms lcd_w_com(0x38,0); delay_ms(5); lcd_w_com(0x38,0); delay_ms(5);

38、 lcd_w_com(0x38,1); /8位數(shù)據(jù)傳輸,2行顯示,5*7字形,檢測忙信號 lcd_w_com(0x08,1); /關(guān)閉顯示,檢測忙信號 lcd_w_com(0x01,1); /清屏,檢測忙信號 lcd_w_com(0x06,1); /顯示光標(biāo)右移設(shè)置,檢測忙信號 lcd_w_com(0x0c,1); /顯示屏打開,光標(biāo)不顯示,不閃爍,檢測忙信號 delay_ms(5); display_str(0,0,realtime t:000.0);/第一行要顯示的初始內(nèi)容 delay_ms(5); display_str(0,1,set t:000.0);/第二行要顯示的初始內(nèi)容 del

39、ay_ms(5);5.3.2 lcd1602寫數(shù)據(jù)子函數(shù)程序代碼如下:void lcd_w_data(uchar w_data) lcd_busy();/檢測lcd是否處于忙狀態(tài) lcd_rs_1;/拉高rs電平 lcd_rw_0;/拉低rw電平 _nop(); /空命令,用于延時 dataport=w_data; /將要輸入到lcd1602的數(shù)據(jù)放到pc端口 _nop(); lcd_en_1;/拉高en電平 _nop();_nop(); lcd_en_0;/拉低en電平此功能的作用,微控制器,顯示數(shù)據(jù)輸入到lcd1602。檢測lcd1602是在一個繁忙的狀態(tài),當(dāng)lcd1602閑置無效的rs級

40、別(對應(yīng)引腳查找表3.2),并拉低的rw級延時等待lcd1602反應(yīng)。 lcd1602的成在寫入數(shù)據(jù)的狀態(tài),將準(zhǔn)備寫入的數(shù)據(jù)分配給pc口,延遲等待寫數(shù)據(jù),然后連接到一個下降沿完整的lcd1602的數(shù)據(jù)被寫入。5.3.3 lcd1602寫命令子函數(shù)程序代碼如下:void lcd_w_com(uchar com,uchar attribc) if(attribc) /attribc為是否需要判斷l(xiāng)cd1602忙信號 lcd_busy(); lcd_rs_0;/拉低rs電平 lcd_rw_0;/拉低rw電平 _nop();/空指令,延時 dataport=com; /將要輸入到1602的命令放到pc

41、端口 _nop(); lcd_en_1;/拉高en電平 _nop(); _nop(); lcd_en_0;/拉低en電平這個函數(shù)是一個單片機(jī)的寫命令到lcd1602功能并有兩個參數(shù),輸入命令com,如果你想檢測忙音信號則用attribc寫命令。當(dāng)你進(jìn)入該函數(shù)將檢測忙音信號是否為1,是必要的檢測忙信號等待lcd1602閑置1,0不要求檢測忙音信號。后rs水平被拉低,并拉低rw水平,延緩lcd1602反應(yīng)。此時進(jìn)入lcd1602寫命令狀態(tài),然后將需要輸入一個8位命令數(shù)據(jù)輸入通過pc端的單片機(jī)lcd1602。其次延遲等待命令完成,給一個下降沿lcd1602寫命令完成。5.4 按鍵函數(shù)程序代碼如下:v

42、oid sa(void) if(con=0)/當(dāng)轉(zhuǎn)換位鍵按下 delay_ms(100);/軟件防抖,延時 sw+;/轉(zhuǎn)換位變量加1 if(sw4)/轉(zhuǎn)換位變量加到5歸0 sw=0; if(plus=0)&(sw=1)/當(dāng)加1鍵按下并且轉(zhuǎn)換位變量sw等于1 delay_ms(100); xs+;/小數(shù)位加1 if(xs9)/當(dāng)小數(shù)位加到10歸0 xs=0; if(reduce=0)&(sw=1)/當(dāng)減1鍵按下并且轉(zhuǎn)換位變量sw等于1 delay_ms(100); xs-;/小數(shù)位減1 if(xs9)/當(dāng)個位加到10歸0 ge=0; if(reduce=0)&(sw=2)/當(dāng)減1鍵按下并且轉(zhuǎn)換位

43、變量sw等于2 delay_ms(100); ge-;/個位減1 if(ge9) shi=0; if(reduce=0)&(sw=3)/當(dāng)減1鍵按下并且轉(zhuǎn)換位變量sw等于3,十位減法變化 delay_ms(100); shi-; if(shi1) bai=0; if(reduce=0)&(sw=4)/當(dāng)減1鍵按下并且轉(zhuǎn)換位變量sw等于4,百位減法變化 delay_ms(100); bai-; if(bai=cnt)/當(dāng)實(shí)時溫度比設(shè)定溫度高 bell_on;/打開蜂鳴器 led_on;/點(diǎn)亮led燈 if(cnttemperture)/當(dāng)實(shí)時溫度比設(shè)定溫度低 led_off;/關(guān)閉led燈 be

44、ll_off;/關(guān)閉蜂鳴器 整個程序的主函數(shù)就是該函數(shù),它讓整個程序不斷運(yùn)行和為它服務(wù)。在最后的死循環(huán)當(dāng)中,程序在做一個不斷的掃描,把讀回來的溫度數(shù)據(jù)賦予全局變量temperature,然后顯示函數(shù)顯示讀回來的實(shí)時溫度,判斷分析按鍵是否按下。最后,對實(shí)時溫度進(jìn)行判斷,當(dāng)實(shí)時溫度大于設(shè)定溫度,燈亮、器鳴;當(dāng)實(shí)時溫度小于設(shè)定溫度,燈滅并關(guān)閉蜂鳴器。6 系統(tǒng)調(diào)試6.1 軟硬件調(diào)試以及分析在本節(jié)中,設(shè)計(jì)調(diào)試。該系統(tǒng)的硬件調(diào)試主要是液晶顯示器lcd1602,ds18b20溫度傳感器之間的關(guān)系,分別與單片機(jī)atmega16的調(diào)試。首先,設(shè)計(jì)時,必須根據(jù)原理圖來連接每個設(shè)備。不可接反或虛焊多焊。其次,你必須

45、確定組件元件完好,在其他系統(tǒng)上運(yùn)行或檢測每個組件的工作情況是否良好。在設(shè)計(jì)調(diào)試的問題很多,其中最重要的關(guān)鍵是按鈕防抖調(diào)試,液晶顯示位置調(diào)試和啟動ds18b20調(diào)試。 按鍵防抖調(diào)試是調(diào)試設(shè)定溫度,實(shí)時和準(zhǔn)確度是否良好。由于按鍵沒有考慮防抖的漏洞,它必須加上防抖功能在軟件或硬件提供了一個按鍵的實(shí)時和準(zhǔn)確性。在開始的時候沒有加入防抖功能,會有一個連續(xù)變化或不穩(wěn)定的關(guān)鍵值。這是因?yàn)榘聪掳存I時,水平不穩(wěn)定之間的轉(zhuǎn)換,那么將有很多次的電平轉(zhuǎn)換。影像穩(wěn)定器的軟件和硬件,應(yīng)用軟件防抖在這個設(shè)計(jì)中,單片機(jī)檢測后約100ms的延遲進(jìn)行電平轉(zhuǎn)換的關(guān)鍵水平變動后不讀,要收取穩(wěn)定的觸發(fā)電平轉(zhuǎn)換,直到所需的功能。 液晶顯

46、示器顯示位置的調(diào)試。在開始沒有考慮到lcd1602的性質(zhì)。因此,在調(diào)試時,位置數(shù)據(jù)顯示位置是不是我想要的。經(jīng)過學(xué)習(xí)后lcd1602的功能性質(zhì)的毫秒級后,每完成的數(shù)據(jù)延遲是用來等待lcd1602一次寫入數(shù)據(jù)的動作完成,解決顯示不匹配的位置和設(shè)計(jì)。 啟動調(diào)試ds18b20。事實(shí)上,這里也是一個時間的問題,在設(shè)計(jì)之初就沒有很好地明白,原來ds18b20這樣一個敏感的設(shè)備耽誤工作。由于這個原因,在一開始的時候一直無法啟動ds18b20,已被寫入在參考和控制程序,發(fā)現(xiàn)差異并不大,在水平設(shè)置。所以,延遲不起作用。想要延遲過快或延緩?fù)?。所以做的修改在延遲方面,一如預(yù)期,只要根據(jù)第一部分第二章調(diào)試可以啟動ds

47、18b20的方法延遲。特別注意的是,一定要按照指示加入延時功能,因?yàn)閐s18b20的設(shè)備是特別敏感的時間設(shè)備參考文獻(xiàn)1居榮.郭怡倩ds18b20在溫控系統(tǒng)中的應(yīng)用j農(nóng)機(jī)化研究,2005:01 2明德剛ds18b20在單片機(jī)溫控系統(tǒng)中的應(yīng)用j貴州大學(xué)學(xué)報(bào)(自然科學(xué)版) 2006:01 3張粵倪偉 dsl8b20在分布式測溫系統(tǒng)中的應(yīng)用j淮陰工學(xué)院學(xué)報(bào) 2002:104 楊振江,馮軍:單片機(jī)原理與實(shí)踐指導(dǎo),西安電子科技大學(xué)出版社,2008. 5葉丹基于單片機(jī)的自適應(yīng)溫度控制系統(tǒng)m傳感器技術(shù) 2002:036周興華單片機(jī)c語言高級編程m北京:中國電力出版社,2011:59-937譚浩強(qiáng)c程序設(shè)計(jì)(第

48、二版)m北京:清華大學(xué)出版社,19998馬潮avr單片機(jī)嵌入式系統(tǒng)原理與應(yīng)用實(shí)踐m 北京:北京航空航天大學(xué)出版社,20079atmelatmega48 data bookm10mao h,lee fredcreview of power factor correction techniquesc proceedings of ipemc97,hangzhou,1997附錄附錄1 系統(tǒng)原理圖 附錄2 系統(tǒng)pcb圖附錄3 系統(tǒng)軟件程序#include #include #define uchar unsigned char#define uint unsigned int#define lcd_rs_1 portd|=bit(pd5) /1602的rs信號置高電平#define lcd_rs_0 portd&=bit(pd5) /1602的rs信號拉低電平#define lcd_rw_1 portd|=bit(pd6) /1602的rw信號拉高電平#define lcd_rw_0 portd&=

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論