數(shù)字溫度控制器設計與制作_第1頁
數(shù)字溫度控制器設計與制作_第2頁
數(shù)字溫度控制器設計與制作_第3頁
數(shù)字溫度控制器設計與制作_第4頁
數(shù)字溫度控制器設計與制作_第5頁
已閱讀5頁,還剩41頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

1、2022-2-171項目項目8 數(shù)字溫度控制器的設計與制作數(shù)字溫度控制器的設計與制作 u掌握單總線數(shù)字溫度傳感器的使用u掌握液晶顯示器的使用u掌握溫度報警器及數(shù)字溫度控制器的設計本章要點:2022-2-1728.1 8.1 任務任務1 1 認識單總線認識單總線 1-wire,即單線總線,又叫單總線。它是,即單線總線,又叫單總線。它是美國美國的的達拉斯達拉斯半導體公司(半導體公司(DALLASSEMICONDUCTOR)近年來推出的一項特有的技術。該技術采用單根信號近年來推出的一項特有的技術。該技術采用單根信號線,系統(tǒng)中的數(shù)據(jù)交換、控制都由這根線完成,既可線,系統(tǒng)中的數(shù)據(jù)交換、控制都由這根線完成

2、,既可傳輸時鐘,又能傳輸數(shù)據(jù),而且數(shù)據(jù)傳輸是雙向的,傳輸時鐘,又能傳輸數(shù)據(jù),而且數(shù)據(jù)傳輸是雙向的,因而這種單因而這種單總線技術總線技術具有線路簡單,硬件開銷少,成具有線路簡單,硬件開銷少,成本低廉,便于總線擴展和維護等優(yōu)點。本低廉,便于總線擴展和維護等優(yōu)點。 1.1.單總線數(shù)字溫度傳感器單總線數(shù)字溫度傳感器DS18B20DS18B20 DS18B20 DS18B20是美國是美國DALLASDALLAS公司生產(chǎn)的單總線數(shù)字溫度傳感公司生產(chǎn)的單總線數(shù)字溫度傳感器,可把溫度信號直接轉換成串行數(shù)字信號供微機處理,器,可把溫度信號直接轉換成串行數(shù)字信號供微機處理,在一條總線上可掛接多個在一條總線上可掛接

3、多個DS18B20DS18B20芯片。芯片。 單總線通常要求外接一個約為單總線通常要求外接一個約為4.7k4.7k的上拉電阻,當?shù)纳侠娮?,當總線閑置時,其狀態(tài)為高電平。總線閑置時,其狀態(tài)為高電平。DS18B20DS18B20數(shù)字溫度傳感器可數(shù)字溫度傳感器可提供提供9 91212位溫度讀數(shù)。讀取或寫入位溫度讀數(shù)。讀取或寫入DS18B20DS18B20的信息僅需一的信息僅需一根總線,總線本身可以向所有掛接的根總線,總線本身可以向所有掛接的DS18B20DS18B20芯片提供電源芯片提供電源,而不需額外的電源。由于,而不需額外的電源。由于DS18B20DS18B20這一特點,非常適合于這一特點,非

4、常適合于溫度檢測系統(tǒng)。溫度檢測系統(tǒng)。(1 1)DS18B20DS18B20的優(yōu)點的優(yōu)點u 采用單總線的接口方式。與微處理器連接時,僅需要一條口采用單總線的接口方式。與微處理器連接時,僅需要一條口線即可實現(xiàn)微處理器與線即可實現(xiàn)微處理器與 DS18B20 DS18B20 的雙向通信。的雙向通信。u 每個器件上都有獨一無二的序列號。每個器件上都有獨一無二的序列號。u 測量溫度范圍寬,測量精度高。測量溫度范圍寬,測量精度高。u 在使用中不需要任何外圍元件即可實現(xiàn)測溫。在使用中不需要任何外圍元件即可實現(xiàn)測溫。u 內(nèi)部有溫度上、下限告警設置。內(nèi)部有溫度上、下限告警設置。 u 支持多點組網(wǎng)功能。支持多點組網(wǎng)

5、功能。u 供電方式靈活。供電方式靈活。u 測量參數(shù)可配置。測量參數(shù)可配置。u 負壓特性。負壓特性。u 掉電保護功能。體積小、適用電壓寬、更經(jīng)濟。掉電保護功能。體積小、適用電壓寬、更經(jīng)濟。(2 2) DS18B20DS18B20芯片結構芯片結構DS18B20DS18B20外形和引腳圖如外形和引腳圖如8-18-1所示,各引腳功能如表所示,各引腳功能如表8-18-1所示:所示:圖圖8-1 DS18B208-1 DS18B20外形和引腳配置圖外形和引腳配置圖表表8-1 DS18B208-1 DS18B20引腳功能引腳功能DS18B20DS18B20內(nèi)部結構如圖內(nèi)部結構如圖8-28-2所示。所示。圖圖8

6、-2 DS18B208-2 DS18B20內(nèi)部結構圖內(nèi)部結構圖 光刻光刻ROMROM中的中的6464位序列號是出廠前被光刻好的,它可以看位序列號是出廠前被光刻好的,它可以看作是該作是該DS18B20DS18B20的地址序列碼。第一個八位為單總線器件識別的地址序列碼。第一個八位為單總線器件識別碼碼(DS18B20(DS18B20為為28h)28h),接下來,接下來4848位是器件的惟一系列碼,最后八位是器件的惟一系列碼,最后八位是前位是前5656位的位的CRCCRC校驗碼。每個校驗碼。每個DS18B20DS18B20的序列號都各不相同,的序列號都各不相同,這樣就可以實現(xiàn)一根總線上掛接多個這樣就可

7、以實現(xiàn)一根總線上掛接多個DS18B20DS18B20的目的。的目的。 2.2.傳感器的讀寫時序傳感器的讀寫時序 由于由于DS18B20DS18B20是在一根是在一根I/OI/O線上讀寫數(shù)據(jù),因此,對讀寫線上讀寫數(shù)據(jù),因此,對讀寫的數(shù)據(jù)位有著嚴格的時序要求。包括的數(shù)據(jù)位有著嚴格的時序要求。包括初始化時序、讀時序、初始化時序、讀時序、寫時序寫時序。所有時序都是將主機作為主設備,單總線器件作為。所有時序都是將主機作為主設備,單總線器件作為從設備。而每一次命令和數(shù)據(jù)的傳輸都是從主機主動啟動寫從設備。而每一次命令和數(shù)據(jù)的傳輸都是從主機主動啟動寫時序開始,如果要求單總線器件回送數(shù)據(jù),在進行寫命令后時序開始

8、,如果要求單總線器件回送數(shù)據(jù),在進行寫命令后,主機需啟動讀時序完成數(shù)據(jù)接收。數(shù)據(jù)和命令的傳輸都是,主機需啟動讀時序完成數(shù)據(jù)接收。數(shù)據(jù)和命令的傳輸都是低位在先低位在先。DS18B20DS18B20的一線工作協(xié)議流程是:的一線工作協(xié)議流程是: 初始化初始化ROMROM操作指令操作指令存儲器操作指令存儲器操作指令數(shù)據(jù)傳輸。數(shù)據(jù)傳輸。(1 1) 初始化時序初始化時序DS18B20DS18B20初始化時序如圖初始化時序如圖8-38-3所示。所示。圖圖8-3 DS18B208-3 DS18B20初始化時序圖初始化時序圖(2 2) 對對DS18B20DS18B20的寫和讀操作時序的寫和讀操作時序DS18B2

9、0DS18B20的讀和寫操作時序分別如圖的讀和寫操作時序分別如圖8-48-4、8-58-5所示。所示。圖圖8-4 DS18B208-4 DS18B20讀操作時序圖讀操作時序圖圖圖8-5 DS18B208-5 DS18B20寫操作時序圖寫操作時序圖3.3.傳感器的操作使用傳感器的操作使用 DS18B20 DS18B20 單線通信功能是分時完成的,它有嚴格的時隙概單線通信功能是分時完成的,它有嚴格的時隙概念,如果出現(xiàn)序列混亂,念,如果出現(xiàn)序列混亂, 1-WIRE 1-WIRE 器件將不響應主機,因此讀器件將不響應主機,因此讀寫時序很重要。根據(jù)寫時序很重要。根據(jù) DS18B20 DS18B20 的協(xié)

10、議規(guī)定,微控制器控制的協(xié)議規(guī)定,微控制器控制 DS18B20 DS18B20 完成溫度的轉換必須經(jīng)過以下完成溫度的轉換必須經(jīng)過以下 幾幾 個步驟個步驟 :()每次讀寫前對()每次讀寫前對 DS18B20 DS18B20 進行復位初始化。復位要求主進行復位初始化。復位要求主 CPU CPU 將數(shù)據(jù)線下拉將數(shù)據(jù)線下拉 500us 500us ,然后釋放,然后釋放, DS18B20 DS18B20 收到信號收到信號后等待后等待 16us60us 16us60us 左右,然后發(fā)出左右,然后發(fā)出60us240us 60us240us 的存在低脈的存在低脈沖,主沖,主 CPU CPU 收到此信號后表示復位

11、成功。收到此信號后表示復位成功。()發(fā)送一條()發(fā)送一條 ROM ROM 指令指令 DS18B20 DS18B20的的ROMROM指令集如表指令集如表8-28-2所示:所示:表表8-2 DS18B208-2 DS18B20的的ROMROM指令集指令集()發(fā)送存儲器指令()發(fā)送存儲器指令 DS18B20 DS18B20的存儲器指令集如表的存儲器指令集如表8-38-3所示:所示:表表8-3 DS18B208-3 DS18B20的存儲器指令集的存儲器指令集DS18B20DS18B20進行一次溫度轉換的具體操作如下:進行一次溫度轉換的具體操作如下:1 1)主機先作個復位操作)主機先作個復位操作2 2)

12、主機再寫跳過)主機再寫跳過ROMROM的操作(的操作(CCHCCH)命令)命令3 3)然后主機接著寫個轉換溫度的操作命令,后面釋放總)然后主機接著寫個轉換溫度的操作命令,后面釋放總線至少一秒,讓線至少一秒,讓DS18B20DS18B20完成轉換的操作。在這里要注意的完成轉換的操作。在這里要注意的是每個命令字節(jié)在寫的時候都是低字節(jié)先寫,例如是每個命令字節(jié)在寫的時候都是低字節(jié)先寫,例如CCHCCH的二的二進制為進制為1100110011001100,在寫到總線上時要從低位開始寫,寫的,在寫到總線上時要從低位開始寫,寫的順序是順序是“0 0、0 0、1 1、1 1、0 0、0 0、1 1、1”1”。

13、整個操作的總線狀態(tài)。整個操作的總線狀態(tài)如下圖如下圖8-68-6所示。所示。圖圖8-6 DS18B208-6 DS18B20進行一次溫度轉換的狀態(tài)圖進行一次溫度轉換的狀態(tài)圖讀取讀取RAMRAM內(nèi)的溫度數(shù)據(jù)的具體操作如下:內(nèi)的溫度數(shù)據(jù)的具體操作如下:1 1)主機發(fā)出復位操作并接收)主機發(fā)出復位操作并接收DS18B20DS18B20的應答(存在)脈沖。的應答(存在)脈沖。2 2)主機發(fā)出跳過對)主機發(fā)出跳過對ROMROM操作的命令(操作的命令(CCHCCH)。)。3 3)主機發(fā)出讀取)主機發(fā)出讀取RAMRAM的命令(的命令(BEHBEH),隨后主機依次讀?。S后主機依次讀取DS18B20DS18B

14、20發(fā)出的從第發(fā)出的從第0 0一第一第8 8,共九個字節(jié)的數(shù)據(jù)。如果只想讀,共九個字節(jié)的數(shù)據(jù)。如果只想讀取溫度數(shù)據(jù),那在讀完第取溫度數(shù)據(jù),那在讀完第0 0和第和第1 1個數(shù)據(jù)后就不再理會后面?zhèn)€數(shù)據(jù)后就不再理會后面DS18B20DS18B20發(fā)出的數(shù)據(jù)即可。同樣讀取數(shù)據(jù)也是低位在前的。整發(fā)出的數(shù)據(jù)即可。同樣讀取數(shù)據(jù)也是低位在前的。整個操作的總線狀態(tài)如下圖個操作的總線狀態(tài)如下圖8-78-7所示。所示。圖圖8-7 DS18B208-7 DS18B20讀取讀取RAMRAM內(nèi)內(nèi)的溫度數(shù)據(jù)的狀態(tài)圖的溫度數(shù)據(jù)的狀態(tài)圖 第二步跳過對第二步跳過對ROMROM操作的命令是在總線上只有一個器件操作的命令是在總線上只

15、有一個器件時,為節(jié)省時間而簡化的操作,若總線上不止一個器件時,為節(jié)省時間而簡化的操作,若總線上不止一個器件,那么跳過,那么跳過ROMROM操作命令將會使幾器件同時響應,這樣就操作命令將會使幾器件同時響應,這樣就會出現(xiàn)數(shù)據(jù)沖突。會出現(xiàn)數(shù)據(jù)沖突。2022-2-17168.2 8.2 任務任務2 2 認識液晶顯示器認識液晶顯示器 液晶顯示器是日常生活中常見的輸出設備,如在計算液晶顯示器是日常生活中常見的輸出設備,如在計算器、萬用表、電子表及很多家用電子產(chǎn)品中都可以看到,器、萬用表、電子表及很多家用電子產(chǎn)品中都可以看到,顯示的主要是數(shù)字、專用符號和圖形。顯示的主要是數(shù)字、專用符號和圖形。 1.1602

16、LCD1.1602LCD液晶模塊液晶模塊(1)1602LCD(1)1602LCD液晶顯示模塊結構液晶顯示模塊結構 1602LCD 1602LCD液晶顯示模液晶顯示模塊的管腳配置圖如圖塊的管腳配置圖如圖8-98-9所示所示: : 圖圖8-9 1602LCD8-9 1602LCD液晶模塊管腳配置圖液晶模塊管腳配置圖引腳功能如表引腳功能如表8-48-4所示。所示。 表表8-4 1602LCD8-4 1602LCD液晶模塊管腳功能液晶模塊管腳功能(2)1602LCD(2)1602LCD液晶顯示模塊控制指令液晶顯示模塊控制指令 LCD1602LCD1602 有有1111個控制指令,如表個控制指令,如表8

17、-58-5所示:所示:表表8-5 1602LCD8-5 1602LCD液晶模塊控制指令集液晶模塊控制指令集 2.2.液晶模塊讀寫操作時序液晶模塊讀寫操作時序 (1)(1)寫時序寫時序寫時序圖如圖寫時序圖如圖8-108-10所示:所示:圖圖8-10 1602LCD8-10 1602LCD液晶模塊寫時序圖液晶模塊寫時序圖(2)(2)讀時序讀時序讀時序圖如圖讀時序圖如圖8-118-11所示:所示:圖圖8-11 1602LCD8-11 1602LCD液晶模塊讀時序圖液晶模塊讀時序圖 從圖從圖8-108-10和圖和圖8-118-11可以看出,可以看出,16021602液晶的讀寫操作時序可液晶的讀寫操作時

18、序可總結成表總結成表8-88-8所示。所示。表表8-8 1602LCD8-8 1602LCD液晶模塊讀寫時序液晶模塊讀寫時序控制接口基本操作時序如下:控制接口基本操作時序如下:讀狀態(tài):輸入:讀狀態(tài):輸入:RS=LRS=L,RW=HRW=H,E=H E=H 輸出:輸出:D0D7=D0D7=狀態(tài)字狀態(tài)字寫指令:輸入:寫指令:輸入:RS=LRS=L,RW=LRW=L,D0D7=D0D7=指令碼,指令碼,E=E=高脈沖高脈沖 輸出:無輸出:無讀數(shù)據(jù):輸入:讀數(shù)據(jù):輸入:RS=HRS=H,RW=HRW=H,E=H E=H 輸出:輸出:D0D7=D0D7=數(shù)據(jù)數(shù)據(jù)寫數(shù)據(jù):輸入:寫數(shù)據(jù):輸入:RS=HRS=

19、H,RW=LRW=L,D0D7=D0D7=數(shù)據(jù),數(shù)據(jù),E=E=高脈沖高脈沖 輸出:無輸出:無(3 3)RAMRAM地址映射圖地址映射圖 控制器內(nèi)部帶有控制器內(nèi)部帶有80808 8位(位(8080字節(jié))的字節(jié))的RAMRAM緩沖區(qū),對應關緩沖區(qū),對應關系如圖系如圖8-128-12所示:所示:圖圖8-12 1602LCD8-12 1602LCD液晶液晶RAMRAM地址映射圖地址映射圖(4 4)液晶操作步驟)液晶操作步驟 1 1)初始化設置)初始化設置u顯示模式設置顯示模式設置u顯示開顯示開/關及光標設置關及光標設置2 2)數(shù)據(jù)控制)數(shù)據(jù)控制 控制器內(nèi)部有一個數(shù)據(jù)地址指針,用戶可用它們來訪問控制器內(nèi)

20、部有一個數(shù)據(jù)地址指針,用戶可用它們來訪問內(nèi)部的全部內(nèi)部的全部8080字節(jié)字節(jié)RAMRAM。u數(shù)據(jù)指針設置數(shù)據(jù)指針設置u讀數(shù)據(jù)讀數(shù)據(jù)u寫數(shù)據(jù)寫數(shù)據(jù)u其他設置其他設置液晶初始化子程序:液晶初始化子程序:液晶初始化子程序通常包含以下內(nèi)容:液晶初始化子程序通常包含以下內(nèi)容:u液晶顯示使能端液晶顯示使能端E E清零(因為上電默認是高電平,所清零(因為上電默認是高電平,所以開始要清零,為以開始要清零,為E E產(chǎn)生高脈沖做準備)產(chǎn)生高脈沖做準備)u顯示模式設置:顯示模式設置:com(0 x38);38com(0 x38);38是以是以2 2行行1616字的字的5 5* *7 7的點的點陣方式顯示陣方式顯示u

21、顯示開關:顯示開關:com(0 x0f);0fcom(0 x0f);0f是開顯示,且開光標閃是開顯示,且開光標閃爍;爍; 0e0e開顯示,且開光標,光標不閃爍;開顯示,且開光標,光標不閃爍; 0c0c開顯示開顯示u顯示模式設置:顯示模式設置:com(0 x06);06com(0 x06);06地址指針自動加地址指針自動加1 1,光,光標加標加1 1,字符不動,字符不動u清屏:清屏:com(0 x01);01com(0 x01);01顯示清屏,數(shù)據(jù)指針也清屏顯示清屏,數(shù)據(jù)指針也清屏初始化子程序參考如下:初始化子程序參考如下:void init( )void init( ) lcde=0; / l

22、cde=0; /使能端使能端E E清零清零 write_com(0 x38); /write_com(0 x38); /顯示模式設置顯示模式設置 write_com(0 x0f); /write_com(0 x0f); /開顯示,顯示光標,光標閃爍開顯示,顯示光標,光標閃爍 write_com(0 x06); /write_com(0 x06); /當寫一個字符后,地址指針自當寫一個字符后,地址指針自 動加動加1 1,且光標加,且光標加1 1,字符不動,字符不動 write_com(0 x01); /write_com(0 x01); /清屏清屏 write_com(0 x80); /writ

23、e_com(0 x80); /設置數(shù)據(jù)指針設置數(shù)據(jù)指針 寫命令子函數(shù):寫命令子函數(shù):參考程序如下:參考程序如下:void write_com(unsigned char com)void write_com(unsigned char com) lcdrs=0; /RSlcdrs=0; /RS清零,代表指令操作清零,代表指令操作 D0D7=com;D0D7=com; delay(5); delay(5); lcde=1; lcde=1; delay(5);delay(5); lcde=0; / lcde=0; /產(chǎn)生高脈沖產(chǎn)生高脈沖 參考程序如下:參考程序如下:void write_data(

24、unsigned char data1)void write_data(unsigned char data1) lcdrs=1; /RSlcdrs=1; /RS置置1 1,代表數(shù)據(jù)操作,代表數(shù)據(jù)操作 D0D7=data1;D0D7=data1; delay(5); delay(5); lcde=1; lcde=1; delay(5); delay(5); lcde=0; / lcde=0; /產(chǎn)生高脈沖產(chǎn)生高脈沖 寫數(shù)據(jù)子函數(shù):寫數(shù)據(jù)子函數(shù):3.3.液晶顯示模塊應用實例液晶顯示模塊應用實例【實例實例8-18-1】如圖如圖8-138-13所示電路圖,要求編程實現(xiàn)所示電路圖,要求編程實現(xiàn)LCD1

25、602LCD1602液晶顯示模塊兩行分別居中顯示液晶顯示模塊兩行分別居中顯示“HELLO WORLD!”HELLO WORLD!”和和”WELCOME!”WELCOME!”,并且光標能夠閃爍,整屏字符能夠左移顯,并且光標能夠閃爍,整屏字符能夠左移顯示。示。XTAL218XTAL119ALE30EA31PSEN29RST9P0.0/AD039P0.1/AD138P0.2/AD237P0.3/AD336P0.4/AD435P0.5/AD534P0.6/AD633P0.7/AD732P1.01P1.12P1.23P1.34P1.45P1.56P1.67P1.78P3.0/RXD10P3.1/TXD1

26、1P3.2/INT012P3.3/INT113P3.4/T014P3.7/RD17P3.6/WR16P3.5/T115P2.7/A1528P2.0/A821P2.1/A922P2.2/A1023P2.3/A1124P2.4/A1225P2.5/A1326P2.6/A1427U1AT89C51D714D613D512D411D310D29D18D07E6RW5RS4VSS1VDD2VEE3LCD1LM016L73%RV11k圖圖8-13 8-13 實例實例1 1電路圖電路圖 分析:分析:ProteusProteus中中LCD1602LCD1602液晶顯示元件名稱是液晶顯示元件名稱是LM016LL

27、M016L(在(在元件查找里面可以找到),這個元件接法與元件查找里面可以找到),這個元件接法與LCD1602LCD1602相同。相同。參考程序如下:參考程序如下:#include#includeunsigned char code tab=HELLO,WORLD!;unsigned char code tab=HELLO,WORLD!;unsigned char code tab1=WELCOME!;unsigned char code tab1=WELCOME!;sbit lcdrs=P20;sbit lcdrs=P20;sbit lcde=P21;sbit lcde=P21;unsigne

28、d char i;unsigned char i;void delay(unsigned int z)void delay(unsigned int z) unsigned int x,y; unsigned int x,y; for(x=z;x0;x-) for(x=z;x0;x-) for(y=125;y0;y-); for(y=125;y0;y-); void write_com(unsigned char com)void write_com(unsigned char com) lcdrs=0;lcdrs=0; P3=com; P3=com; delay(5); delay(5);

29、lcde=1; lcde=1; delay(5);delay(5); lcde=0; lcde=0; void write_data(unsigned char data1)void write_data(unsigned char data1) lcdrs=1;lcdrs=1; P3=data1; P3=data1; delay(5); delay(5); lcde=1; lcde=1; delay(5); delay(5); lcde=0; lcde=0; void init( )void init( ) lcde=0; / lcde=0; /使能端使能端E E清零清零 write_com

30、(0 x38); /write_com(0 x38); /顯示模式設置顯示模式設置 write_com(0 x0f); /write_com(0 x0f); /開顯示,顯示光標,光標閃爍開顯示,顯示光標,光標閃爍 write_com(0 x06); /write_com(0 x06); /當寫一個字符后,地址指針自動加當寫一個字符后,地址指針自動加1 1, 且光標加且光標加1 1,字符不動,字符不動 write_com(0 x01); /write_com(0 x01); /清屏清屏 write_com(0 x80); /write_com(0 x80); /設置數(shù)據(jù)指針設置數(shù)據(jù)指針 void

31、 main()void main() init(); init(); write_com(0 x80+0 x12); / write_com(0 x80+0 x12); /設置數(shù)據(jù)指針設置數(shù)據(jù)指針 for(i=0;i12;i+)for(i=0;i12;i+) write_data(tabi); write_data(tabi); delay(20); delay(20); write_com(0 x80+0 x54); / write_com(0 x80+0 x54); /設置數(shù)據(jù)指針設置數(shù)據(jù)指針 for(i=0;i8;i+)for(i=0;i8;i+) write_data(tab1i);

32、write_data(tab1i); delay(20); delay(20); for(i=0;i16;i+) for(i=0;i16;i+) write_com(0 x1c); / write_com(0 x1c); /整屏左移,整屏左移,LM016LLM016L與與LCD1602LCD1602實物的實物的 左右移相反左右移相反 delay(200); delay(200); while(1); while(1); XTAL218XTAL119ALE30EA31PSEN29RST9P0.0/AD039P0.1/AD138P0.2/AD237P0.3/AD336P0.4/AD435P0.5/

33、AD534P0.6/AD633P0.7/AD732P1.01P1.12P1.23P1.34P1.45P1.56P1.67P1.78P3.0/RXD10P3.1/TXD11P3.2/INT012P3.3/INT113P3.4/T014P3.7/RD17P3.6/WR16P3.5/T115P2.7/A1528P2.0/A821P2.1/A922P2.2/A1023P2.3/A1124P2.4/A1225P2.5/A1326P2.6/A1427U1AT89C51D714D613D512D411D310D29D18D07E6RW5RS4VSS1VDD2VEE3LCD1LM016L73%RV11k圖圖8

34、-14 8-14 實例實例1 1仿真圖仿真圖2022-2-17358.3 8.3 任務任務3 3 數(shù)字溫度控制器的設計數(shù)字溫度控制器的設計 1.1.硬件電路與軟件程序設計硬件電路與軟件程序設計 【實例實例8-28-2】設計任務:由溫度傳感器對溫度進行采樣,設計任務:由溫度傳感器對溫度進行采樣,將測量結果送單片機,單片機與內(nèi)部的設定值進行比較,將測量結果送單片機,單片機與內(nèi)部的設定值進行比較,根據(jù)比較結果,通過一個執(zhí)行機構對加熱源的開斷狀態(tài)進根據(jù)比較結果,通過一個執(zhí)行機構對加熱源的開斷狀態(tài)進行開關控制。設計要求:(行開關控制。設計要求:(1 1)實時顯示溫度,系統(tǒng)的精度)實時顯示溫度,系統(tǒng)的精度

35、為為0.10.1度。(度。(2 2)設計)設計3 3個按鍵,用按鍵修改上限、下限溫度個按鍵,用按鍵修改上限、下限溫度。(。(3 3)溫度超范圍時聲光報警,同時用)溫度超范圍時聲光報警,同時用LEDLED等的點亮與熄等的點亮與熄滅模擬加熱源開關的開與斷。滅模擬加熱源開關的開與斷。 分析:分析:3 3個按鍵個按鍵key1key1,key2key2和和key3key3可分別實現(xiàn)加一、減一可分別實現(xiàn)加一、減一、溫度上限、溫度上限/ /溫度下限選擇功能。為方便編程,此溫度下限選擇功能。為方便編程,此3 3個按鍵可個按鍵可分別接到外部中斷分別接到外部中斷0 0、外部中斷、外部中斷1 1和定時器和定時器T0

36、T0引腳上,采用中引腳上,采用中斷方式。溫度上斷方式。溫度上/ /下限開機時可先任設下限開機時可先任設2 2個值,按下加一、減個值,按下加一、減一鍵時,溫度上一鍵時,溫度上/ /下限值在初始值基礎上實現(xiàn)加減運算。下限值在初始值基礎上實現(xiàn)加減運算。實例實例8-28-2硬件電路圖設計如圖硬件電路圖設計如圖8-158-15所示。所示。 XTAL218XTAL119ALE30EA31PSEN29RST9P0.0/AD039P0.1/AD138P0.2/AD237P0.3/AD336P0.4/AD435P0.5/AD534P0.6/AD633P0.7/AD732P1.01P1.12P1.23P1.34P

37、1.45P1.56P1.67P1.78P3.0/RXD10P3.1/TXD11P3.2/INT012P3.3/INT113P3.4/T014P3.7/RD17P3.6/WR16P3.5/T115P2.7/A1528P2.0/A821P2.1/A922P2.2/A1023P2.3/A1124P2.4/A1225P2.5/A1326P2.6/A1427U1AT89C51D714D613D512D411D310D29D18D07E6RW5RS4VSS1VDD2VEE3LCD1LM016L73%RV11k19.0DQ2VCC3GND1U2DS18B20R110kD1LED-GREENLS1SPEAKE

38、RR2100234567891RP1RESPACK-8加加1減減1上上/下限選擇下限選擇key1key2key3D2LED-REDR3100圖圖8-15 實例實例8-2電路仿真圖電路仿真圖參考程序如下:參考程序如下: #include#include#define uchar unsigned char#define uchar unsigned char#define uint unsigned int#define uint unsigned intuchar code disp=0123456789;/uchar code disp=0123456789;/定義字符數(shù)組顯示數(shù)字定義字符數(shù)

39、組顯示數(shù)字uchar code disp2=Temp:;/uchar code disp2=Temp:;/說明顯示的是溫度說明顯示的是溫度uchar code disp3=0 xdf,C;/uchar code disp3=0 xdf,C;/溫度單位溫度單位uchar code disp4= L: H: ;/uchar code disp4= L: H: ;/溫度上下限顯示溫度上下限顯示sbit lcden=P21;/sbit lcden=P21;/液晶使能端液晶使能端sbit lcdrs=P20;/sbit lcdrs=P20;/液晶命令液晶命令/ /數(shù)據(jù)控制端數(shù)據(jù)控制端sbit ds=P1

40、0;/DS18B20sbit ds=P10;/DS18B20溫度采集信號端溫度采集信號端sbit led=P11;sbit led=P11;sbit led1=P23;sbit led1=P23;sbit beep=P12;sbit beep=P12;sbit key1=P32;/sbit key1=P32;/加加1 1鍵鍵sbit key2=P33;/sbit key2=P33;/減減1 1鍵鍵sbit key3=P34;/sbit key3=P34;/上上/ /下限選擇鍵下限選擇鍵bit flag=0;bit flag=0;uint temp;/uint temp;/定義無符號整型形參定義

41、無符號整型形參float f_temp;/float f_temp;/定義浮點型形參定義浮點型形參uint TH=300;uint TH=300;uint TL=200;uint TL=200;void delay(uint z)/void delay(uint z)/延時延時500ms500ms程序程序 uint x,y; uint x,y; for(x=z;x0;x-) for(x=z;x0;x-) for(y=125;y0;y-); for(y=125;y0;y-); void write_com(unsigned char com)void write_com(unsigned cha

42、r com) lcdrs=0; lcdrs=0; P0=com; P0=com; delay(5); delay(5); lcden=1; lcden=1; delay(5);delay(5); lcden=0; lcden=0; delay(5); delay(5); void write_data(unsigned char data1)void write_data(unsigned char data1) lcdrs=1; lcdrs=1; P0=data1; P0=data1; delay(5); delay(5); lcden=1; lcden=1; delay(5); delay

43、(5); lcden=0; lcden=0; delay(5); delay(5); void lcd_init( )void lcd_init( ) lcden=0; / lcden=0; /使能端使能端E E清零清零 write_com(0 x38); /write_com(0 x38); /顯示模式設置顯示模式設置 write_com(0 x0c); /write_com(0 x0c); /開顯示,不顯示光標開顯示,不顯示光標 write_com(0 x06); /write_com(0 x06); /當寫一個字符后,地址指針自動加當寫一個字符后,地址指針自動加1 1,且光標加,且光標加

44、1 1, 字符不動字符不動 write_com(0 x01); /write_com(0 x01); /清屏清屏 void temp_dis(uint value)/void temp_dis(uint value)/溫度數(shù)據(jù)顯示溫度數(shù)據(jù)顯示 uchar ge,shi,bai; uchar ge,shi,bai; bai=value/100;/ bai=value/100;/十位十位 shi=value%100/10;/shi=value%100/10;/個位個位 ge=value%100%10;/ge=value%100%10;/小數(shù)位小數(shù)位 /write_com(0 x80+7);/wri

45、te_com(0 x80+7); write_data(dispbai); write_data(dispbai); write_data(dispshi); write_data(dispshi); write_data(.); write_data(.); write_data(dispge); write_data(dispge); void ds_init()/DS18B20void ds_init()/DS18B20復位,初始化復位,初始化 uint i; uint i; ds=0; ds=0; i=90;/ i=90;/延時延時 while(i0)i-;/while(i0)i-;/

46、主機發(fā)出一個主機發(fā)出一個480480960960微秒的低電平脈沖微秒的低電平脈沖 ds=1;ds=1; i=4;/ i=4;/延時延時 while(i0)i-;/while(i0)i-;/釋放總線后,以便從機釋放總線后,以便從機18b2018b20通過拉低總線來指示其是否在線通過拉低總線來指示其是否在線, , 存在檢測高電平時間:存在檢測高電平時間:1560us1560us bit ds_read_bit()/bit ds_read_bit()/讀一位讀一位DS18B20DS18B20數(shù)據(jù)數(shù)據(jù) uint i ; uint i ; bit value_bit; bit value_bit; ds

47、=0; ds=0; i+;/ i+;/延時延時, ,讀時隙起始于微處理器將總線拉低至少讀時隙起始于微處理器將總線拉低至少1us1us ds=1;/ ds=1;/拉低總線后接著釋放總線,讓從機拉低總線后接著釋放總線,讓從機18b2018b20能夠接管總線,輸出有效數(shù)據(jù)能夠接管總線,輸出有效數(shù)據(jù) i+;i+; i+;/ i+;/小延時一下,讀取小延時一下,讀取18b2018b20上的數(shù)據(jù)上的數(shù)據(jù), ,因為從因為從ds18b20ds18b20上輸出的數(shù)據(jù)在讀上輸出的數(shù)據(jù)在讀 時間隙時間隙“ 下降沿出現(xiàn)下降沿出現(xiàn)15us15us內(nèi)有效內(nèi)有效 value_bit=ds;value_bit=ds; i=8

48、;/ i=8;/延時延時 while(i0)i-;/while(i0)i-;/所有讀所有讀 時間隙時間隙 至少需要至少需要60us60us return value_bit; return value_bit; uchar ds_read_byte()/uchar ds_read_byte()/讀一個字節(jié)讀一個字節(jié)DS18B20DS18B20數(shù)據(jù)數(shù)據(jù) uchar i,j,value_byte; uchar i,j,value_byte; value_byte=0; value_byte=0; for(i=1;i=8;i+) for(i=1;i=8;i+) j=ds_read_bit(); j=

49、ds_read_bit(); value_byte=(j1);/ value_byte=(j1);/將讀取的數(shù)據(jù)位按讀取先后順序將讀取的數(shù)據(jù)位按讀取先后順序 低位到高位(從右往左)排列保存到低位到高位(從右往左)排列保存到value_bytevalue_byte return value_byte; return value_byte; void ds_write_byte(uchar write_byte)/void ds_write_byte(uchar write_byte)/寫一個字節(jié)數(shù)據(jù)到寫一個字節(jié)數(shù)據(jù)到DS18B20DS18B20 uint i; uint i; uchar j;

50、uchar j; bit write_bit; bit write_bit; for(j=1;j=8;j+) for(j=1;j1;write_byte=write_byte1; if(write_bit) if(write_bit) ds=0; ds=0;i+;/i+;/延時延時, ,至少延時至少延時1us1us,才產(chǎn)生寫,才產(chǎn)生寫 時間隙時間隙 ds=1;/ds=1;/寫時間隙開始后的寫時間隙開始后的15s15s內(nèi)允許數(shù)據(jù)線拉到高電平內(nèi)允許數(shù)據(jù)線拉到高電平i=8;/i=8;/延時延時while(i0)i-;/while(i0)i-;/所有寫時間隙必須最少持續(xù)所有寫時間隙必須最少持續(xù)60us

51、60us else else ds=0;ds=0;i=8;/i=8;/延時延時while(i0)i-;/while(i0)i-;/主機要生成一個寫主機要生成一個寫0 0時間隙,必須把數(shù)據(jù)線拉時間隙,必須把數(shù)據(jù)線拉 到低電平并保持至少到低電平并保持至少60us60usds=1;/ds=1;/釋放總線釋放總線i+;/i+;/延時延時i+;i+; void temp_convert()/DS18B20void temp_convert()/DS18B20開始獲取溫度并進行轉換開始獲取溫度并進行轉換, ,先初始化,然后跳過先初始化,然后跳過ROMROM (跳過(跳過6464位位ROMROM地址,直接向

52、地址,直接向ds18B20ds18B20發(fā)溫度轉換命令),發(fā)送溫度轉換命令發(fā)溫度轉換命令),發(fā)送溫度轉換命令 ds_init(); ds_init(); delay(1); delay(1); ds_write_byte(0 xcc);/ ds_write_byte(0 xcc);/ 跳過序列號命令跳過序列號命令 ds_write_byte(0 x44);/ ds_write_byte(0 x44);/ 發(fā)轉換命令發(fā)轉換命令 44H44H uint temp_get()/uint temp_get()/讀取讀取DS18B20DS18B20寄存器中的溫度數(shù)據(jù)寄存器中的溫度數(shù)據(jù) uchar tem

53、p_low,temp_high; uchar temp_low,temp_high; ds_init(); ds_init(); delay(1); delay(1); ds_write_byte(0 xcc); ds_write_byte(0 xcc); ds_write_byte(0 xbe); ds_write_byte(0 xbe); temp_low=ds_read_byte(); temp_low=ds_read_byte(); temp_high=ds_read_byte(); temp_high=ds_read_byte(); temp=temp_high; temp=temp

54、_high; temp=8; temp=8; temp=temp|temp_low; temp=temp|temp_low; f_temp=temp f_temp=temp* *0.0625;/0.0625;/精度為精度為1212位,所以分辨率為位,所以分辨率為0.06250.0625 temp=f_temp temp=f_temp* *10+0.5;/10+0.5;/乘以乘以1010,將實際溫度擴大,將實際溫度擴大1010倍倍,小數(shù)部分四舍五入小數(shù)部分四舍五入 return temp;/return temp;/返回的返回的temptemp是整型數(shù)據(jù)是整型數(shù)據(jù) void display()/void display()/靜態(tài)文字顯示靜態(tài)文字顯示 uchar i,j,k; uchar i,j,k; write_com(0 x80+2); write_com(0 x80+2); for(i=0;i5;i+) for(i=0;i5;i+) write_data(disp2i); write_data(disp

溫馨提示

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

最新文檔

評論

0/150

提交評論