附录二 源程序
;******************************************************************** ;精准温度显示温控自动风扇系统 * ;*说明:
;* 1、K1 → 按第一次进入设定低温动作温度值 TL 状态: ;* 2、K1 → 按第二次进入设定高温动作温度值 TH 状态: ;* 3、K1 → 按第三次显示当前温度值
;* 4、设定过程: K2 →加键, K3 →减键,可快速调
; 5、当实时温度值在TL和TH之间时,开启弱风档;当实时温度低于TL时,关闭
风扇;当实时温度高于TH时,开启大风档。每次设置的TH和TL均被保存在 DS18B20的ROM
内,掉不需重新设置. *
;
;******************************************************************** TIMER_L DATA 23H TIMER_H DATA 24H TIMER_COUN DATA 25H
TEMPL DATA 26H TEMPH DATA 27H TEMP_TH DATA 28H TEMP_TL DATA 29H
TEMPHC DATA 2AH TEMPLC DATA 2BH TEMP_ZH DATA 2CH
BEEP EQU P3.7 DATA_LINE EQU P3.3
C1 EQU P3.4 ;C1控制口,接继电器1 C2 EQU P3.5 ;C2控制口,接继电器2
FLAG1 EQU 20H.0 FLAG2 EQU 20H.1
;-------------------------------------------------
17
K1 EQU P1.4 K2 EQU P1.5 K3 EQU P1.6
;================================================= ORG 0000H JMP MAIN
ORG 000BH AJMP INT_T0
;-------------------------------------------------- MAIN: MOV SP,#30H
MOV TMOD,#01H ;T0,方式1 MOV TIMER_L,#00H ;50ms定时值 MOV TIMER_H,#4CH
MOV TIMER_COUN,#00H ;中断计数 MOV IE,#82H ;EA=1,ET0=1 LCALL READ_E2 MOV 20H,#00H SETB BEEP SETB C1 setb C2
MOV 7FH,#0AH ;熄灭符
CALL RESET ;复位与检测DS18B20 JNB FLAG1,MAIN1 JMP START
MAIN1: CALL RESET JB FLAG1,START LCALL BEEP_BL JMP MAIN1 START:
MOV A,#0CCH ; 跳过ROM匹配 CALL WRITE
MOV A,#044H ; 发出温度转换命令
18
CALL WRITE
CALL RESET
MOV A,#0CCH ; 跳过ROM匹配 CALL WRITE
MOV A,#0BEH ; 发出读温度命令 CALL WRITE
CALL READ ;读温度数据 CALL CONVTEMP CALL DISPBCD CALL DISP1 CALL SCANKEY LCALL TEMP_COMP JMP MAIN1
;==================================================== ;功能键扫描子程序
;==================================================== SCANKEY:
MOV P1,#0F0H JB K1,SCAN_K2 CALL BEEP_BL SCAN_K1: CALL ALERT_TL CALL ALERT_PLAY JB K1,SCAN_K1 CALL BEEP_BL SCAN_K11: CALL ALERT_TH CALL ALERT_PLAY JB K1,SCAN_K11 CALL BEEP_BL SCAN_K2: JB K2,SCAN_K3 CALL BEEP_BL SCAN_K3: JB K3,SCAN_END CALL BEEP_BL LCALL RESET_ALERT
19
LCALL RE_18B20 LCALL WRITE_E2 SCAN_END: RET
;================================================ ;设置动作温度值TL,TH
;================================================ RESET_ALERT:
CALL ALERT_TL CALL ALERT_PLAY
JNB K3,$ ;K3 SETB TR0 RESET_TL:
CALL ALERT_PLAY JNB FLAG2,R_TL01
mov 75H,7fh ; mov 76H,7fh CALL ALERT_PLAY JMP R_TL02 R_TL01: CALL ALERT_TL
mov 75h,7Eh ; mov 76h,7Dh
CALL ALERT_PLAY R_TL02: JNB K1,K011A JNB K2,K011B JNB K3,RESET_TH JMP RESET_TL K011A:
INC TEMP_TL MOV A,TEMP_TL
CJNE A,#120,K012A ; MOV TEMP_TL,#0 K012A: CALL TL_DEL JMP RESET_TL K011B:
为位移键 消影 送设定值 没有到设定上限值,转20
MOV A,TEMP_TL
CJNE A,#00H,K ;没有到设定下限值,转
MOV TEMP_TL,#120 K: DEC TEMP_TL K012B: CALL TL_DEL JMP RESET_TL
;------------------------------------------------------- RESET_TH:
CALL BEEP_BL JNB K3,$ RESET_TH1:
CALL ALERT_PLAY JNB FLAG2,R_TH01
mov 75H,7fh ;消影 mov 76H,7fh CALL ALERT_PLAY JMP R_TH02 R_TH01: CALL ALERT_TH
mov 75h,7Eh ; mov 76h,7Dh CALL ALERT_PLAY R_TH02: JNB K1,K021A JNB K2,K021B JNB K3,K002 JMP RESET_TH1 K021A:
INC TEMP_TH MOV A,TEMP_TH
CJNE A,#120,K022A ;没有到设定上限值,转 MOV TEMP_TH,#0 K022A: CALL TH_DEL JMP RESET_TH1
21