單片機(jī)溫度傳感器設(shè)計(jì)報(bào)告_第1頁(yè)
單片機(jī)溫度傳感器設(shè)計(jì)報(bào)告_第2頁(yè)
單片機(jī)溫度傳感器設(shè)計(jì)報(bào)告_第3頁(yè)
單片機(jī)溫度傳感器設(shè)計(jì)報(bào)告_第4頁(yè)
單片機(jī)溫度傳感器設(shè)計(jì)報(bào)告_第5頁(yè)
已閱讀5頁(yè),還剩33頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、泰州職業(yè)技術(shù)學(xué)院電子與信息工程系課程名稱:51單片機(jī)開(kāi)發(fā)課題名稱:用1602LCD與DS18B20設(shè)計(jì)的溫度報(bào)警器班級(jí):10信息課題小組成員:林淑云朱翠竹劉蘇慧指導(dǎo)老師:蔡菁摘要現(xiàn)代社會(huì)是信息社會(huì),隨著現(xiàn)代農(nóng)業(yè)技術(shù)的發(fā)展及人們對(duì) 生活環(huán)境要求的提高,人們也迫切需要檢測(cè)與控制溫度, 所以對(duì)于溫度的測(cè)量控制具有十分重要的意義。隨著全球溫度的普遍升高,高溫火災(zāi)更是無(wú)處不在:電氣 線路短路、過(guò)載、接觸電阻過(guò)大等引發(fā)高溫火災(zāi);靜電產(chǎn) 生高溫火災(zāi);雷電等強(qiáng)電入侵導(dǎo)致高溫火災(zāi);最主要是機(jī) 房?jī)?nèi)電腦、空調(diào)等用電設(shè)備長(zhǎng)時(shí)間工作,導(dǎo)致設(shè)備老化, 空調(diào)發(fā)生故障,而不能降溫。因此,機(jī)房?jī)?nèi)所屬的電子產(chǎn) 品發(fā)熱快,在短時(shí)

2、間內(nèi)機(jī)房溫度升高超出設(shè)備正常溫度, 導(dǎo)致系統(tǒng)癱瘓或產(chǎn)生火災(zāi),這時(shí)溫度報(bào)警系統(tǒng)就會(huì)發(fā)揮應(yīng) 有的功能。本課題介紹的就是利用溫度傳感DS18B20制作的溫度報(bào) 警器,自動(dòng)測(cè)量當(dāng)前環(huán)境溫度。由單片機(jī)AT89C52控制, 并通過(guò)1602LCD顯示,若當(dāng)前環(huán)境溫度超過(guò)此溫度,系統(tǒng) 發(fā)出報(bào)警。一、系統(tǒng)總體設(shè)計(jì)要求二、系統(tǒng)硬件設(shè)計(jì)三、系統(tǒng)程序設(shè)計(jì)四、調(diào)試與性能分析五、源程序清單六、心得體會(huì)一、系統(tǒng)總體設(shè)計(jì)要求1.本設(shè)計(jì)采用集成溫度傳感器的的s18b20,設(shè)計(jì)一個(gè)數(shù)字顯示的溫度 報(bào)警器。定安全溫度值范圍為20C30C (可根據(jù)具體需要在程 序中進(jìn)行調(diào)整),對(duì)在這一范圍內(nèi)的溫度變化采集后送入A/D轉(zhuǎn)換器, A/D

3、轉(zhuǎn)換器的模擬電壓范圍為05丫。例如傳感器采集的溫度為 25C,則對(duì)應(yīng)液晶顯示器的顯示值為25C。而溫度高出30C或 者低于20C時(shí),不在安全溫度范圍之內(nèi),喇叭會(huì)進(jìn)行報(bào)警、二極管 發(fā)光顯示2總體設(shè)計(jì)框圖本設(shè)計(jì)采用AT89C52作為主控芯片,蜂鳴器作為輸出設(shè)備產(chǎn)生報(bào) 警聲,LCD1602能夠?qū)崟r(shí)的顯示當(dāng)前的的溫度。其中P3.3和P3.2外 接按鍵,P0 口用作LCD輸出數(shù)據(jù)端口,P2.3接蜂鳴器端口。詳細(xì)原 理圖見(jiàn)附件設(shè)計(jì)框圖如圖一所示。系統(tǒng)硬件設(shè)計(jì)主控芯片設(shè)計(jì)中所采用主控芯片為AT89C52。因其價(jià)格便宜,在市場(chǎng)上已 經(jīng)很成熟,各個(gè)方面都能夠滿足設(shè)計(jì)要求故選擇它。其采用標(biāo)準(zhǔn)雙列 直插式引腳DIP

4、-40大規(guī)模集成電路封裝。它的引腳排列如下圖二所示PDIPP1.0E1q。 VC&FM.1 匚z典 PT.0 (ADJ1P1.2C POll (ADI)P1 3匚1JF MD.2 (AU21P1.11 C5-J& PD.3 (ADJ1匚占35 PD W (AMI(Miso) piT2 PD& 5)WET匚&aa PDfi (ADfijR缶T匚3a? IAC7Js超(5 P3 0匚1031 /VPPP31 匚1i昶 ALEJPROG(INN1 s33.2 EIT23PTThE 匚1325 PX7 (A15Ml卬產(chǎn)3M匚142fJ F.E (A14JEJ PE B 匚15翡 P?&(A13阿P3,

5、B匚1625 pj-i閃尸(RD)P3JE17凡 P?3 g 1 )KTAl2 匚KM 1匚 口,i圖二 /T8把52的引力辟漕引腳介紹:vcc:供電電壓。GND:接地。P0 口: P0 口為一個(gè)8位漏級(jí)開(kāi)路雙向I/O 口,每腳可吸收8TTL門 電流。當(dāng)P1 口的管腳第一次寫(xiě)1時(shí),被定義為高阻輸入。 P0能夠用于外部程序數(shù)據(jù)存儲(chǔ)器,它可以被定義為數(shù)據(jù)/ 地址的第八位。在FIASH編程時(shí),P0 口作為原碼輸入口, 當(dāng)FIASH進(jìn)行校驗(yàn)時(shí),P0輸出原碼,此時(shí)P0外部必須被 拉高。P1 口: P1 口是一個(gè)內(nèi)部提供上拉電阻的8位雙向I/O 口,P1 口緩 沖器能接收輸出4TTL門電流。P1 口管腳寫(xiě)

6、入1后,被內(nèi)部 上拉為高,可用作輸入,P1 口被外部下拉為低電平時(shí),將 輸出電流,這是由于內(nèi)部上拉的緣故。在FLASH編程和校驗(yàn) 時(shí),P1 口作為第八位地址接收。P2 口: P2 口為一個(gè)內(nèi)部上拉電阻的8位雙向I/O 口,P2 口緩沖器 可接收,輸出4個(gè)TTL門電流,當(dāng)P2 口被寫(xiě)“1”時(shí),其管 腳被內(nèi)部上拉電阻拉高,且作為輸入。并因此作為輸入時(shí), P2 口的管腳被外部拉低,將輸出電流。這是由于內(nèi)部上拉 的緣故。P2 口當(dāng)用于外部程序存儲(chǔ)器或16位地址外部數(shù)據(jù) 存儲(chǔ)器進(jìn)行存取時(shí),P2 口輸出地址的高八位。在給出地址 “1”時(shí),它利用內(nèi)部上拉優(yōu)勢(shì),當(dāng)對(duì)外部八位地址數(shù)據(jù)存 儲(chǔ)器進(jìn)行讀寫(xiě)時(shí),P2 口

7、輸出其特殊功能寄存器的內(nèi)容。P2 口在FLASH編程和校驗(yàn)時(shí)接收高八位地址信號(hào)和控制信號(hào)。P3 口: P3 口管腳是8個(gè)帶內(nèi)部上拉電阻的雙向I/O 口,可接收 輸出4個(gè)TTL門電流。當(dāng)P3 口寫(xiě)入“1”后,它們被內(nèi)部上 拉為高電平,并用作輸入。作為輸入,由于外部下拉為低電平,P3 將輸出電流(ILL)這是由于上拉的緣故。P3 也可作為AT89C51的一些特殊功能口,如下表所示: P3 管腳備選功能:P3.0 RXD (串行輸入口) P3.1 TXD (串行輸出口) P3.RNT0 (外部中斷0) P3FNT1 (外部中斷1) P3.4 T0 (記時(shí)器0外部輸入) P3.5 T1 (記時(shí)器1外部

8、輸入) P3.P WR (外部數(shù)據(jù)存儲(chǔ)器寫(xiě)選通) P37 RD (外部數(shù)據(jù)存儲(chǔ)器讀選通) P3 口同時(shí)為閃爍編程和編程校驗(yàn)接收一些控制信號(hào)。RST:復(fù)位輸入。當(dāng)振蕩器復(fù)位器件時(shí),要保持RST腳兩個(gè)機(jī)器周期 的高電平時(shí)間。ALE/PROG:當(dāng)訪問(wèn)外部存儲(chǔ)器時(shí),地址鎖存允許的輸出電平用于鎖存 地址的地位字節(jié)。在FLASH編程期間,此引腳用于輸入 編程脈沖。在平時(shí),ALE端以不變的頻率周期輸出正脈 沖信號(hào),此頻率為振蕩器頻率的1/6。因此它可用作對(duì) 外部輸出的脈沖或用于定時(shí)目的。然而要注意的是:每 當(dāng)用作外部數(shù)據(jù)存儲(chǔ)器時(shí),將跳過(guò)一個(gè)ALE脈沖。如想 禁止ALE的輸出可在SFR8EH地址上置0。此時(shí),

9、ALE 只有在執(zhí)行MOVX, MOVC指令是ALE才起作用。另外, 該引腳被略微拉高。如果微處理器在外部執(zhí)行狀態(tài)ALE 禁止,置位無(wú)效。PSEN:外部程序存儲(chǔ)器的選通信號(hào)。在由外部程序存儲(chǔ)器取指期間, 每個(gè)機(jī)器周期兩次/PSEN有效。但在訪問(wèn)外部數(shù)據(jù)存儲(chǔ)器 時(shí),這兩次有效的/PSEN信號(hào)將不出現(xiàn)。EA/VPP:當(dāng)/EA保持低電平時(shí),則在此期間外部程序存儲(chǔ)器 (0000H-FFFFH),不管是否有內(nèi)部程序存儲(chǔ)器。注意加 密方式1時(shí),/EA將內(nèi)部鎖定為RESET;當(dāng)/EA端保持高 電平時(shí),此間內(nèi)部程序存儲(chǔ)器。在FLASH編程期間,此引 腳也用于施加12V編程電源(VPP)。XTAL1:反向振蕩放大

10、器的輸入及內(nèi)部時(shí)鐘工作電路的輸入。 乂1人12:來(lái)自反向振蕩器的輸出。振蕩器特性:XTAL1和XTAL2分別為反向放大器的輸入和輸出。該反向放大 器可以配置為片內(nèi)振蕩器。石晶振蕩和陶瓷振蕩均可采用。如采用外 部時(shí)鐘源驅(qū)動(dòng)器件,XTAL2應(yīng)不接。有余輸入至內(nèi)部時(shí)鐘信號(hào)要通過(guò) 一個(gè)二分頻觸發(fā)器,因此對(duì)外部時(shí)鐘信號(hào)的脈寬無(wú)任何要求,但必須 保證脈沖的高低電平要求的寬度。2、液晶模塊顯示原理:在智能控制系統(tǒng)中越來(lái)越多的使用了液晶顯示屏LCD。LCD是一種介于液體和固體之間熱力學(xué)的中間穩(wěn)定相,它本身 不會(huì)發(fā)光,是利用外部光的反射原理進(jìn)行顯示。液晶顯示功 耗小,字形美觀,在系統(tǒng)中可用集成電池來(lái)供電。字符型

11、液晶顯示模塊是一種專門用于字母、數(shù)字、符號(hào)等點(diǎn)陣式LCD,目前常用16*1,16*2,20*2,40*行等的模塊,下面以1602字符型液晶顯示器為例介紹其用法:1.1602LCD采用標(biāo)準(zhǔn)的14腳(無(wú)背光)或16腳(帶背光)接口,各引腳接說(shuō)明如表所示:引腳號(hào)引腳舍電平輔入/輸出作用1Ubs電源地2VCC電源*加)3uee對(duì)比例整電壓4R5e/i:輸入J蹴俺S0/1輸入加向LCD寫(xiě)入指令或數(shù)據(jù) 1 從式啦矣取信息6E1 J0輸入便能信號(hào)1 1送取信息, I恥下降沿就行指令7DBStti/i箱人/輸出數(shù)據(jù)總線程區(qū)叫最低位)SDB1(V1輸入/輸出J數(shù)據(jù)總線1上皿19DB?0/1箱人/箱出(數(shù)據(jù)總統(tǒng)】

12、切或1 QDB3C/1輸入/輸出數(shù)據(jù)總線上工睢3110/1輸入/箱出數(shù)據(jù)總線linm12。曬0/1輸入,輸出數(shù)據(jù)總統(tǒng)line513ft/1輸入/輸出數(shù)據(jù)總線lin.6仆PB70/1輸人/籀出數(shù)據(jù)總線1打尸(最高位)15ft+ UCCLC。背光電源正極10K接地背光電源負(fù)極2.1602液晶模塊內(nèi)部的控制器共11條指令:(1).清屏指令指令RSR/WD7D6D5D4D3D2D1D0清顯 示0000000001功 能:1清除液晶顯示器,即將DDRAM的內(nèi)容全部填入空白的ASCII 碼 20H;2光標(biāo)歸位,即將光標(biāo)撤回液晶顯示屏的左上方;3將地址計(jì)數(shù)器(AC)的值設(shè)為0。(2).光標(biāo)歸位指令指令RSR

13、/WD7D6D5D4D3D2D1D0光標(biāo)返回000000001*功能:1把光標(biāo)撤回到顯示器的左上方;2把地址計(jì)數(shù)器(AC)的值設(shè)置為0;3保持DDRAM的內(nèi)容不變。(3).進(jìn)入模式設(shè)置指令指令RSR/WD7D6D5D4D3D2D1D0置輸入模式00000001I/DS功能:設(shè)定每次定入1位數(shù)據(jù)后光標(biāo)的移位方向,并且設(shè) 定每次寫(xiě)入的一個(gè)字符是否移動(dòng)。參數(shù)設(shè)定的情況如下所示:位名設(shè)置I/D0=寫(xiě)入新數(shù)據(jù)后光標(biāo)左移1=寫(xiě)入新數(shù)據(jù)后光標(biāo)右移S0=寫(xiě)入新數(shù)據(jù)后顯示屏不移 動(dòng)1=寫(xiě)入新數(shù)據(jù)后顯示屏整體右移1個(gè) 字符(4).顯示開(kāi)關(guān)控制指令指令RSR/WD7D6D5D4D3D2D1D0顯示開(kāi)/關(guān)控制指令00

14、00001DCB功能:控制顯示器開(kāi)/關(guān)、光標(biāo)顯示/關(guān)閉以及光標(biāo)是否閃 爍。參數(shù)設(shè)定的情況如下:位名設(shè)置D0二顯示功能關(guān)1二顯示功能開(kāi)C0二無(wú)光標(biāo)1二有光標(biāo)B0二光標(biāo)閃爍1二光標(biāo)不閃爍(5).設(shè)定顯示屏或光標(biāo)移動(dòng)方向指令指令RSR/WD7D6D5D4D3D2D1D0光標(biāo)或字符 移位000001S/CR/L*能:使光標(biāo)移位或使整個(gè)顯示屏幕移位。參數(shù)設(shè)定的情況如下:S/CR/ L設(shè)定情況00光標(biāo)左移1格,且AC值減101光標(biāo)右移1格,且AC值加110顯示器上字符全部左移一格,但光 標(biāo)不動(dòng)11顯示器上字符全部右移一格,但光 標(biāo)不動(dòng)(6).功能設(shè)定指令指 令RSR/WD7D6D5D4D3D2D1D0置

15、功鍵00001DLNF*能:設(shè)定數(shù)據(jù)總線位數(shù)、顯示的行數(shù)及字型。參數(shù)設(shè)定的情況如下:位名設(shè)置DL0=數(shù)據(jù)總線為4 位1二數(shù)據(jù)總線為8位N0二顯示1行1二顯示2行F0=5*7點(diǎn)陣/每 字符1=5X10點(diǎn)陣/每字符(7).設(shè)定CGRAM地址指令指令RSR/WD7D6D5D4D3D2D1D0置字符發(fā)生存貯器 地址0001 字符發(fā)生存貯器 地址指令RSR/WD7D6D5D4D3D2D1D0讀忙標(biāo)志或 地址01BF計(jì)數(shù)器地切(9).(9).讀取忙信號(hào)或AC地址指令(8).設(shè)定DDRAM地址指令指令RSR/WD7D6D5D4D3D2D1D0置數(shù)據(jù)存貯器 地址001顯示數(shù)據(jù)存貯器地二hk能:設(shè)定下一個(gè)要存入

16、數(shù)據(jù)的CGRAM的地址。功能:1讀取忙碌信號(hào)BF的內(nèi)容,BF=1表示液晶顯示器 忙,暫時(shí)無(wú)法接收單片機(jī)送來(lái)的數(shù)據(jù)或指令;當(dāng)BF=0 時(shí),液晶顯示器可以接收單片機(jī)送來(lái)的數(shù)據(jù)或指令;2讀取地址計(jì)數(shù)器(AC)的內(nèi)容。(10).數(shù)據(jù)寫(xiě)入DDRAM或CGRAM指令一覽指令RSR/WD7D6D5D4D3D2D1D0寫(xiě)數(shù)到DDRAM或 CGRAM10 要寫(xiě)的數(shù)據(jù)內(nèi)容功能:1將字符碼寫(xiě)入DDRAM,以使液晶顯示屏顯示出相對(duì)應(yīng)的字符;將使用者自己設(shè)計(jì)的圖形存入CGRAMo(11).從CGRAM或DDRAM讀出數(shù)據(jù)的指令一覽指令RSR/WD7D6D5D4D3D2D1D0從 CGRAM 或 DDRAM 讀數(shù)11 讀

17、出數(shù)據(jù)內(nèi)容功能:讀取DDRAM或CGRAM中的內(nèi)容。3.1602LCD基本操作時(shí)序:讀狀 態(tài)輸 入RS=L, RW=H, E=H輸出D0D7二狀態(tài)字寫(xiě)指 令輸 入RS=L, RW=L, E=高脈沖,D0D7二 指令碼輸出無(wú)讀數(shù) 據(jù)輸 入RS=H, RW=H, E=H輸出D0D7二數(shù)據(jù)寫(xiě)數(shù) 據(jù)輸 入RS=H, RW=L, E=高脈沖,D0D7二數(shù)據(jù)輸出無(wú)3、DS18B20溫度傳感器介紹傳感器DS18B20具有體積更小、精度更高、適用電壓更寬、采用 一線總線、可組網(wǎng)等優(yōu)點(diǎn),在實(shí)際應(yīng)用中取得了良好的測(cè)溫效果。美國(guó)Dallas半導(dǎo)體公司的數(shù)字化溫度傳感器DS1820是世界 上第一片支持“一線總線”接口

18、的溫度傳感器,在其內(nèi)部使用了在 板(0280人區(qū)口)專利技術(shù)。全部傳感元件及轉(zhuǎn)換電路集成在形如一只 三極管的集成電路內(nèi)?!耙痪€總線”獨(dú)特而且經(jīng)濟(jì)的特點(diǎn),使用戶可輕松地組建傳感器網(wǎng)絡(luò),為測(cè)量系統(tǒng)的構(gòu)建引入全新概念?,F(xiàn)在,新一代的DS18B20體積更小、更經(jīng)濟(jì)、更靈活。使你可以充分發(fā)揮“一 線總線”的優(yōu)點(diǎn)。同DS1820 一樣,DS18B20也支持“一線總線”接 口,測(cè)量溫度范圍為-55 C+125 C,在-10+85 C范圍內(nèi),精 度為0.5 C?,F(xiàn)場(chǎng)溫度直接以“一線總線”的數(shù)字方式傳輸,大大 提高了系統(tǒng)的抗干擾性。適合于惡劣環(huán)境的現(xiàn)場(chǎng)溫度測(cè)量,如:環(huán)境 控制、設(shè)備或過(guò)程控制、測(cè)溫類消費(fèi)電子產(chǎn)品

19、等。與前一代產(chǎn)品不同, 新的產(chǎn)品支持3V5.5V的電壓范圍,使系統(tǒng)設(shè)計(jì)更靈活、方便。而 且新一代產(chǎn)品更便宜,體積更小8。1. DS18B20 的特性9(1)適應(yīng)電壓范圍更寬,電壓范圍:3.05.5V,寄生電源方 式下可由數(shù)據(jù)線供。(2)獨(dú)特的單線接口方式,DS18B20在與微處理器連接時(shí)僅需 要一條口線即可實(shí)現(xiàn)微處理器與DS18B20的雙向通訊。DS18B20支持多點(diǎn)組網(wǎng)功能,多個(gè)DS18B20可以并聯(lián)在唯 一的三線上,實(shí)現(xiàn)組網(wǎng)多點(diǎn)測(cè)溫。DS18B20在使用中不需要任何外圍元件,全部傳感元件及 轉(zhuǎn)換電路集成在形如一只三極管的集成電路內(nèi)。(5)溫范圍一55H25,在-10+85時(shí)精度為0.5。(

20、6)可編程的分辨率為912位,對(duì)應(yīng)的可分辨溫度分別為 0.5、0.25、0.125和0.0625,可實(shí)現(xiàn)高精度測(cè)溫。(7)在9位分辨率時(shí)最多在93.75ms內(nèi)把溫度轉(zhuǎn)換為數(shù)字,12 位分辨率時(shí)最多在750ms內(nèi)把溫度值轉(zhuǎn)換為數(shù)字,速度更快。(8)測(cè)量結(jié)果直接輸出數(shù)字溫度信號(hào),以“一線總線”串行傳 送給CPU,同時(shí)可傳送CRC校驗(yàn)碼,具有極強(qiáng)的抗干擾糾錯(cuò)能力。(9)負(fù)壓特性:電源極性接反時(shí),芯片不會(huì)因發(fā)熱而燒毀,但 不能正常工作。2.DS18B20內(nèi)部結(jié)構(gòu)及DS18B20的管腳排列64位光刻ROM是出廠前被光刻好的,它可以看作是該DS18B20 的地址序列號(hào)。不同的器件地址序列號(hào)不同。DS18B

21、20內(nèi)部結(jié)構(gòu)主要 由四部分組成:64位光刻ROM,溫度傳感器,非揮發(fā)的溫度報(bào)警觸發(fā)器 TH和TL,高速暫存器。DS18B20的引腳定義:(1)DQ為數(shù)字信號(hào)輸入/輸出端(2)GND為電源地(3)VDD為外接供電電源輸入端(在寄生電源接線方式時(shí)接地)(4)NC 空三、系統(tǒng)程序設(shè)計(jì)名稱:用1602LCD與DS18B20設(shè)計(jì)的溫度報(bào)警器(含ROM CODE,溫度上下限顯示)說(shuō)明:本例將報(bào)警器溫度設(shè)為高:70攝氏度,低-20攝氏度,當(dāng)DS18B20感知溫度達(dá)到此臨界值時(shí),對(duì)應(yīng)的LCD閃爍,且發(fā)出 報(bào)警聲音。本例還可以單獨(dú)顯示DS18B20的ROM CODE及報(bào)警溫度上 下限。#include#incl

22、ude#define uchar unsigned char#define uint unsigned int#define delayNOP() _nop_();_nop_();_nop_();_nop_();sbit HI_LED=P2八3;sbit LO_LED=P2八6;sbit DQ=P3八2;sbit BEEP=P1八5;sbit RS=P1八0;sbit RW=P1八1;sbit EN=P1八2;sbit k1=P3八5;sbit k2=P3八4;sbit k3=P3八6;uchar code RomCodeStr尸 - ROM CODE - ;ucharRomCode8=0 x

23、00,0 x00,0 x00,0 x00,0 x00,0 x00,0 x00,0 x00;uchar code Temp_Disp_Title = Current Temp : ;uchar Current_Temp_Display_Buffer = TEMP:;ucharcodeTemperature_Char8=0 x0c,0 x12,0 x12,0 x0c,0 x00,0 x00,0 x00,0 x00;uchar code Alarm_Temp = ALARM TEMP Hi Lo);uchar Alarm_HI_LO_STR = Hi:Lo:);uchar temp_data2 =

24、0 x00,0 x00);uchar temp_alarm2 = 0 x00,0 x00);uchar display5 = 0 x00,0 x00,0 x00,0 x00,0 x00);uchar display13 = 0 x00,0 x00,0 x00);uchar code df_Table = 0,1,1,2,3,3,4,4,5,6,6,7,8,8,9,9);char Alarm_Temp_HL2 = 20,-20);uchar CurrentT=0;uchar Temp_Value=0 x00,0 x00);uchar Display_Digit=0,0,0,0);bit HI_A

25、larm=0,LO_Alarm=0;bit DS18B20_IS_OK =1;uint Time0_Count = 0;void DelayXue(int x)uchar i;while(x-) for(i=0;i200;i+);)/uchar Busy_Check()uchar LCD_Status;RS=0;RW=1;EN=1;DelayXue(1);LCD_Status=P0;EN=0;return LCD_Status;)void Write_LCD_Command(uchar cmd)(while (Busy_Check()&0 x80)=0 x80);RS=0;RW=0;EN=0;

26、P0=cmd;EN=1;DelayXue(1);EN=0;)void Write_LCD_Data(uchar dat)(while (Busy_Check()&0 x80)=0 x80);RS=1;RW=0;EN=0;P0=dat;EN=1;DelayXue(1);EN=0;)void Set_LCD_POS(uchar p)(Write_LCD_Command(p |0 x80);)void Initialize_LCD ()Write_LCD_Command(0 x38);DelayXue(1);Write_LCD_Command(0 x01);DelayXue(1);Write_LCD

27、_Command(0 x06);DelayXue(1);Write_LCD_Command(0 x0c);DelayXue(1);)void Write_NEW_LCD_Char()(uchar i;Write_LCD_Command(0 x40);for (i=0;i8;i+)Write_LCD_Data(Temperature_Chari);)void Delay(uint num)(while(-num );)初始化DS18B20uchar Init_DS18B20()uchar status;DQ=1;Delay(8);DQ=0;Delay(90);DQ=1;Delay(8);stat

28、us=DQ;Delay(100);DQ=1;return status;初始化成功時(shí)返回0)讀一字節(jié)uchar ReadOneByte()(uchar i,dat=0;DQ=1;_nop_();for (i=0;i=1; DQ=1;_nop_();_nop_();if(DQ) dat |=0 x80;Delay(30);DQ=1;)return dat;)寫(xiě)一字節(jié)void WriteOneByte(uchar dat)(uchar i;for (i=0;i=1;)讀取溫度值void Read_Temperature()(/DS18B20 故障/DS18B20 故障DS18B20_IS_OK=0

29、;elseWriteOneByte(0 xcc);WriteOneByte(0 x44);Init_DS18B20();WriteOneByte(0 xcc);WriteOneByte(0 xbe);跳過(guò)序列號(hào)啟動(dòng)溫度轉(zhuǎn)換跳過(guò)序列號(hào)讀取溫度寄存器Temp_Value0=ReadOneByte();溫度低 8 位Temp_Value1=ReadOneByte();溫度高 8 位Alarm_Temp_HL0=ReadOneByte();報(bào)警溫度 THAlarm_Temp_HL1=ReadOneByte();報(bào)警溫度 TLDS18B20_IS_OK=1;)設(shè)置DS18B20的溫度報(bào)警值void Se

30、t_Alarm_Temp_Value() (Init_DS18B20();WriteOneByte(0 xcc);Init_DS18B20();WriteOneByte(0 xcc);WriteOneByte(0 x4e);DS18B20跳過(guò)序列號(hào)將設(shè)定的溫度報(bào)警值寫(xiě)入WriteOneByte(Alarm_Temp_HL0); 寫(xiě) THWriteOneByte(Alarm_Temp_HL1); /與 TLWriteOneByte(0 x7f);Init_DS18B20();WriteOneByte(0 x7f);Init_DS18B20();WriteOneByte(0 xcc);WriteO

31、neByte(0 x48);DS18B20/12位精度跳過(guò)序列號(hào)/溫度報(bào)警值存入)void Display_Temperature()(uchar i;uchar t =150;uchar ng =0;char Signed_Current_Temp;/ if(Temp_Value1&0 xF8)=0 xF8)(Temp_Value1=Temp_Value1;Temp_Value0=Temp_Value0+1;if (Temp_Value0=0 x00) Temp_Value1+;ng = 1;)Display_Digit0=df_Table Temp_Value0 & 0 x0F ;Curr

32、entT=(Temp_Value0 & 0 xF0)4)|(Temp_Value1 &0 x07)=Alarm_Temp_HL0?1:0;LO_Alarm=Signed_Current_Temp=Alarm_Temp_HL1?1:0;Display_Digit2=CurrentT/10;Display_Digit1=CurrentT%10;Current_Temp_Display_Buffer10=Display_Digit0+0;Current_Temp_Display_Buffer9=.;Current_Temp_Display_Buffer8=Display_Digit1+0;Curre

33、nt_Temp_Display_Buffer7=Display_Digit2+0;if (Display_Digit2=0)Current_Temp_Display_Buffer8=;if (ng)(if(Current_Temp_Display_Buffer8=)Current_Temp_Display_Buffer8=-;else if(Current_Temp_Display_Buffer7 =)Current_Temp_Display_Buffer7=-;elseCurrent_Temp_Display_Buffer6=-;)Set_LCD_POS(0 x00);for(i=0;i16

34、;i+) Write_LCD_Data( Temp_Disp_Titlei);Set_LCD_POS(0 x40);for(i=0;i14;i+)Write_LCD_Data( Current_Temp_Display_Bufferi);Set_LCD_POS(0 x4D);Write_LCD_Data(0 xdf);Set_LCD_POS(0 x4E);Write_LCD_Data(C);)void TO_INT() interrupt 1(TH0=-1000/256;TL0=-1000%256;BEEP=!BEEP;if(+Time0_Count=400)(Time0_Count=0;if

35、(HI_Alarm) HI_LED=HI_LED;else HI_LED=0;if(LO_Alarm) LO_LED=LO_LED;else LO_LED=0;TR0=0;)void Display_Rom_Code()(uchar i,t;Set_LCD_POS(0 x40);for(i=0;i4);if(t9) t += 0 x37;else t +=0;Write_LCD_Data(t);t = RomCodei &0 x0F;if(t9) t += 0 x37;else t +=0;Write_LCD_Data(t);)void Read_Rom_Code()(uchar i;Init

36、_DS18B20();WriteOneByte(0 x33);for (i=0;i8;i+) RomCodei = ReadOneByte();)void Display_RomCode()(uchar i;Set_LCD_POS(0 x00);for (i=0;i16;i+)Write_LCD_Data(RomCodeStri);Read_Rom_Code();Display_Rom_Code();)void Disp_Alarm_Temperature()(uchar i,ng;ng=0;if(Alarm_Temp_HL00)(Alarm_Temp_HL0=Alarm_Temp_HL0 +

37、1;ng=1;)Alarm_HI_LO_STR4=Alarm_Temp_HL0/100+0;Alarm_HI_LO_STR5=Alarm_Temp_HL0/10%10+0;Alarm_HI_LO_STR6=Alarm_Temp_HL0%10+0; if(Alarm_HI_LO_STR4=0) Alarm_HI_LO_STR4=; if(Alarm_HI_LO_STR4= & Alarm_HI_LO_STR5=0) Alarm_HI_LO_STR5=;if (ng)(if(Alarm_HI_LO_STR5= ) Alarm_HI_LO_STR5=-; elseif(Alarm_HI_LO_STR

38、4= ) Alarm_HI_LO_STR4=-; elseAlarm_HI_LO_STR3=-;)ng=0;if(Alarm_Temp_HL10)(Alarm_Temp_HL1=Alarm_Temp_HL1+1; ng=1;)Alarm_HI_LO_STR12=Alarm_Temp_HL1/100+0;Alarm_HI_LO_STR13=Alarm_Temp_HL1/10%10+0;Alarm_HI_LO_STR14=Alarm_Temp_HL1%10+0; if(Alarm_HI_LO_STR12=0) Alarm_HI_LO_STR12=; if(Alarm_HI_LO_STR12=&Al

39、arm_HI_LO_STR13=0)Alarm_HI_LO_STR13=;if (ng)(if(Alarm_HI_LO_STR13= ) Alarm_HI_LO_STR13=-; elseif(Alarm_HI_LO_STR12= ) Alarm_HI_LO_STR12=-; elseAlarm_HI_LO_STR11=-;)Set_LCD_POS(0 x00);for (i=0;i16;i+) Write_LCD_Data(Alarm_Tempi);Set_LCD_POS(0 x40);for (i=0;i16;i+) Write_LCD_Data(Alarm_HI_LO_STRi);)vo

40、id main()(uchar Current_Operation=1;Initialize_LCD();IE=0 x82;TMOD=0 x01;TH0=-1000/256;TL0=-1000%256;TR0=0;HI_LED=0;LO_LED=0;Set_Alarm_Temp_Value();Read_Temperature();Delay(50000);Delay(50000);while(1)(if(k1=0) Current_Operation =1;if(k2=0) Current_Operation =2;if(k3=0) Current_Operation =3;switch (

41、Current_Operation)(Read_Temperature();if(DS18B20_IS_OK)(if(HI_Alarm=1|LO_Alarm=1)TR0=1;else TR0=0;Display_Temperature();)DelayXue(100);break;Read_Temperature();Disp_Alarm_Temperature();DelayXue(100);break;Display_RomCode();DelayXue(50);break;)四、調(diào)試與性能分析1功能說(shuō)明該溫度報(bào)警器電路是由但是18B20溫度傳感器作為溫度傳感 器材,由AT89C2052單

42、片機(jī)進(jìn)行數(shù)據(jù)處理.,由電腦USB接口供電,也可 外接6Vl6V的直流電源.溫度顯示(和控制)的范圍為:-55到125 之間,精度為1,也就是顯示整數(shù)。如果設(shè)定報(bào)警的溫度為20, 則當(dāng)環(huán)境溫度達(dá)到21時(shí),報(bào)警發(fā)光二級(jí)管發(fā)光,同時(shí)繼電器工作,如 果不需要對(duì)溫度控制(報(bào)警),可以將報(bào)警溫度值設(shè)置高些.如果控制 的是某局部的溫度,可將但是18B20用引線引出,但距離不宜過(guò)大,注 意其引腳絕緣.電路操作說(shuō)明如電路正常,接通電源后,只顯示“”符號(hào),無(wú)溫度值:按下AN3,先顯示上次存貯下來(lái)的設(shè)定溫度(報(bào)警控制)值,然后 再顯示環(huán)境溫度值,并隨環(huán)境溫度的變化而變化:再按下AN3,溫度數(shù)字閃爍,得調(diào)節(jié):接著按A

43、N1或AN2:按AN1為報(bào)警溫度值變大,最大為125: 按AN2為報(bào)警溫度值變小,最小為-55:調(diào)好后再按一下AN3,調(diào)好的報(bào)警溫度值被存貯,數(shù)碼管又顯示環(huán)境溫度,當(dāng)溫度達(dá)到存貯的報(bào)警值時(shí),電路發(fā)出報(bào)警信號(hào)和動(dòng)作.本設(shè)計(jì)是基于89C52的溫度報(bào)警器,它可以時(shí)實(shí)顯示當(dāng)前溫度,報(bào)警溫度,只讀編碼;設(shè)計(jì)中有三個(gè)按鍵,其中第一個(gè)按鍵 為顯示當(dāng)前溫度,第二個(gè)按鍵為報(bào)警溫度的顯示,第三個(gè)按鍵為只 讀編碼的顯示。五、源程序清單主函數(shù)void main()uchar Current_Operation=1;Initialize_LCD();IE=0 x82;TMOD=0 x01;TH0=-1000/256;T

44、L0=-1000%256;TR0=0;HI_LED=0;LO_LED=0;Set_Alarm_Temp_Value();Read_Temperature();Delay(50000);Delay(50000);while(1) (if(k1=0) Current_Operation =1;if(k2=0) Current_Operation =2;if(k3=0) Current_Operation =3;switch (Current_Operation)(Read_Temperature();if(DS18B20_IS_OK)(if(HI_Alarm=1|LO_Alarm=1)TR0=1;else TR0=0;Display_Temperature();)DelayXue(100);break;Read_Temperature();Disp_Alarm_Temperature();DelayXue(100);break;case 3:Display_RomCode();DelayXue(50);break;11)液晶

溫馨提示

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

評(píng)論

0/150

提交評(píng)論