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