51單片機(jī)DS18B20溫度控制報(bào)警程序(可設(shè)置溫控范圍)
1、GND
2、DQ
3、VCC
DQ → P1.7
K1 → P3.2
K2 → P3.4
K3 → P3.6
K4 → P3.7
溫度顯示用四位數(shù)碼管,當(dāng)溫度>=100度時(shí),第四位才顯示。
第五位數(shù)碼管顯示狀態(tài)符號(hào)。
開(kāi)機(jī)檢測(cè) DS18B20 狀態(tài):
DS18B20正常顯示:
O 18.8 ← 顯示實(shí)時(shí)溫度和加熱標(biāo)記“O”
DS18B20不正常顯示:
黑屏、蜂鳴器一直響。
這時(shí)你要檢查DS18B20是否連接好、接對(duì),否則要更換一個(gè)新的 DS18B20 芯片。
程序在整個(gè)運(yùn)行過(guò)程中,始終對(duì) DS18B20 進(jìn)行檢測(cè)。
你可以將 DS18B20 從 51hei-5 拔掉,檢測(cè)一下此功能。
一、查看溫度報(bào)警值:
K1 → 進(jìn)入查看溫度報(bào)警值 TL 狀態(tài):
L--20
TL: 20 低位報(bào)警值
K1 → 進(jìn)入查看溫度報(bào)警值 TH 狀態(tài):
H--28
TH: 28 高位報(bào)警值
K1 → 退出查看溫度報(bào)警值狀態(tài)。
二、設(shè)定溫度報(bào)警值:
1、K3 → 進(jìn)入設(shè)定溫度報(bào)警值 TL 狀態(tài):
L--20
2、K3 → 進(jìn)入設(shè)定溫度報(bào)警值 TH 狀態(tài):
H--28
3、K3 → 返回
4、設(shè)定過(guò)程: K1 →加鍵 (UP), K2 →減鍵 (DOWN),可快速調(diào)。
將設(shè)定的溫度報(bào)警值自動(dòng)存入 DS18B20 的 EEROM 中,可永久保存。
每次開(kāi)機(jī)時(shí)自動(dòng)從 DS18B20 的 EEROM 讀出溫度報(bào)警值。
三、報(bào)警狀態(tài)的顯示:
1、當(dāng)實(shí)際溫度大于 TH 的設(shè)定值時(shí),
H 38.8 H → 閃動(dòng)
關(guān)閉繼電器,表示超溫。
2、當(dāng)實(shí)際溫度小于 TL 的設(shè)定值時(shí),
L 18.8 L → 閃動(dòng)
表示加熱部分出現(xiàn)故障。
3、當(dāng)實(shí)際溫度小于 TH 的設(shè)定值時(shí),繼電器吸合,開(kāi)始加熱。
加熱標(biāo)記為“O”
四、其它功能
1、以閃動(dòng)方式顯示標(biāo)記符 “ H”、“ L”、“O”。
2、實(shí)時(shí)溫度百位數(shù)為 “0”時(shí),不顯示。
3、報(bào)警溫度值百位數(shù)為 “0”時(shí),顯示“-”。
完整的程序代碼下載地址:http://www.51hei.com/f/DS18B20溫度控制LED顯示_asm.rar
;*****************************************************************;* 標(biāo)題: 51Hei單片機(jī)開(kāi)發(fā)系統(tǒng)演示程序 - DS18B20溫度控制數(shù)碼管顯示 *;* 晶振: 12M *;* 跳線設(shè)置:J5的12腳用跳線帽短接,J5的第3腳用杜邦線連接到頂部P1.0擴(kuò)展,其他默認(rèn) * *;* 網(wǎng)站: http://www.51HEI.com *;******************************************************************;* 描述: *;* DS18B20溫度控制數(shù)碼管顯示 *;* 1、K3 → 進(jìn)入設(shè)定溫度報(bào)警值 TL 狀態(tài): *;* L--20 *;* 2、K3 → 進(jìn)入設(shè)定溫度報(bào)警值 TH 狀態(tài): *;* H--28 *;* 3、K3 → 返回 *;* 4、設(shè)定過(guò)程: K1 →加鍵 (UP), K2 →減鍵 (DOWN),可快速調(diào)。 *;* *;********************************************************************************TIMER_L DATA 23HTIMER_H DATA 24HTIMER_COUN DATA 25HTEMPL DATA 26HTEMPH DATA 27HTEMP_TH DATA 28HTEMP_TL DATA 29HTEMPHC DATA 2AHTEMPLC DATA 2BHTEMP_ZH DATA 2CHBEEP EQU P1.0DATA_LINE EQU P1.7RELAY EQU P2.2FLAG1 EQU 20H.0FLAG2 EQU 20H.1;-------------------------------------------------K1 EQU P3.2K2 EQU P3.4K3 EQU P3.6K4 EQU P3.7;=================================================ORG 0000HJMP MAINORG 000BHAJMP INT_T0;--------------------------------------------------MAIN: MOV SP,#30H;以下5行的功能是關(guān)閉8*8點(diǎn)陣的輸出,也就是把所有的行置0,這樣不管列為任何電平點(diǎn)陣都不會(huì)亮了.MOV R2,#8 ;輸出數(shù)據(jù)8位 hei: CLR P2.4 ;拉低SCL,以便下次拉高便可產(chǎn)生上升沿CLR P2.5 ;數(shù)據(jù)先送入74hc164,等待clk上升沿的到來(lái)SETB P2.4 ;低電平到高電平邊沿觸發(fā)到來(lái),并行數(shù)據(jù)輸出至164的Q0-Q7DJNZ R2,hei ;判斷輸出完畢了沒(méi)有MOV TMOD,#01H ;T0,方式1MOV TIMER_L,#00H ;50ms定時(shí)值MOV TIMER_H,#4CHMOV TIMER_COUN,#00H ;中斷計(jì)數(shù)MOV IE,#82H ;EA=1,ET0=1LCALL READ_E2;LCALL RE_18B20MOV 20H,#00HSETB BEEPSETB RELAYMOV 7FH,#0AH ;熄滅符CALL RESET ;復(fù)位與檢測(cè)DS18B20JNB FLAG1,MAIN1 ;FLAG1=0,DS18B20不存在JMP STARTMAIN1: CALL RESETJB FLAG1,STARTLCALL BEEP_BL ;DS18B20錯(cuò)誤,報(bào)警JMP MAIN1START:MOV A,#0CCH ; 跳過(guò)ROM匹配CALL WRITEMOV A,#044H ; 發(fā)出溫度轉(zhuǎn)換命令CALL WRITECALL RESETMOV A,#0CCH ; 跳過(guò)ROM匹配CALL WRITEMOV A,#0BEH ; 發(fā)出讀溫度命令CALL WRITECALL READ ;讀溫度數(shù)據(jù)CALL CONVTEMPCALL DISPBCDCALL DISP1CALL SCANKEYLCALL TEMP_COMPJMP MAIN1;=====================================================;DS18B20 復(fù)位與檢測(cè)子程序;FLAG1=1 OK, FLAG1=0 ERROR;======================================================RESET:SETB DATA_LINENOPCLR DATA_LINEMOV R0,#64H ;主機(jī)發(fā)出延時(shí)600微秒的復(fù)位低脈沖MOV R1,#03HRESET1: DJNZ R0,$MOV R0,#64HDJNZ R1,RESET1SETB DATA_LINE ;然后拉高數(shù)據(jù)線NOPMOV R0,#25HRESET2: JNB DATA_LINE,RESET3 ;等待DS18B20回應(yīng)DJNZ R0,RESET2JMP RESET4 ; 延時(shí)RESET3: SETB FLAG1 ; 置標(biāo)志位,表示DS1820存在JMP RESET5RESET4: CLR FLAG1 ; 清標(biāo)志位,表示DS1820不存在JMP RESET6RESET5: MOV R0,#064HDJNZ R0,$ ; 時(shí)序要求延時(shí)一段時(shí)間RESET6: SETB DATA_LINERET;===========================================================;;===========================================================WRITE: MOV R2,#8 ;一共8位數(shù)據(jù)CLR CYWR1:CLR DATA_LINE ;開(kāi)始寫(xiě)入DS18B20總線要處于復(fù)位(低)狀態(tài)MOV R3,#09DJNZ R3,$ ;總線復(fù)位保持18微妙以上RRC A ;把一個(gè)字節(jié)DATA 分成8個(gè)BIT環(huán)移給CMOV DATA_LINE,C ;寫(xiě)入一個(gè)BITMOV R3,#23DJNZ R3,$ ;等待46微妙SETB DATA_LINE ;重新釋放總線NOPDJNZ R2,WR1 ;寫(xiě)入下一個(gè)BITSETB DATA_LINERET;============================================================;從DS18B20中讀出溫度低位、高位和報(bào)警值TH、TL;存入26H、27H、28H、29H;============================================================READ: MOV R4,#4 ; 將溫度高位和低位從DS18B20中讀出MOV R1,#26H ; 存入26H、27H、28H、29HRE00: MOV R2,#8RE01: CLR CSETB DATA_LINENOPNOPCLR DATA_LINE ;讀前總線保持為低NOPNOPNOPSETB DATA_LINE ;開(kāi)始讀總線釋放MOV R3,#09 ;延時(shí)18微妙DJNZ R3,$MOV C,DATA_LINE ;從DS18B20總線讀得一個(gè)BITMOV R3,#23DJNZ R3,$ ;等待46微妙RRC A ;把讀得的位值環(huán)移給ADJNZ R2,RE01 ;讀下一個(gè)BITMOV @R1,AINC R1DJNZ R4,RE00RET
評(píng)論