唐山学院毕业设计
;================================================== DIS_TEMP1: MOV A,TEMP_AL ;显示已设定的温度报警值
MOV B,#10 DIV AB
MOV TEMP_AL2,A ;保存温度报警值的十位数 MOV LCD_X,#3 ;设置位置
CALL SHOW_DIG2 ;显示报警温度值的十位 INC LCD_X
MOV A,TEMP_AL MOV B,#10 DIV AB
MOV TEMP_AL1,A ;保存温度报警值的个位数 RET
MOV A,B ;个位
CALL SHOW_DIG2 ;显示报警温度值的个位
START: CALL RE_18B20_1 ;检测通道1的DS18B20是否存在,并设置12位精确度
CALL RESET1 ;18B20复位子程序,检测18B20是否存在
JNB FLAG1,START11 ;如果DS1820不存在则跳START11 ; CALL MENU_OK1 ; MOV A,#0CEH
; CALL TEMP_BJ ;显示温度摄示度的标记 JMP START21
START11: CALL MENU_ERROR1 ;如果不存在则显示ERROR MOV A,#0CBH
CALL TEMP_BJ ;显示温度摄示度的标记 JMP START
START21: ;检查到有温度传感器后的处理 CALL RESET1 否存在
JNB FLAG1,START11 ;DS1820不存在则转到START11报错
;18B20复位子程序,再次检测18B20是;如果存在则显示OK
31
唐山学院毕业设计
MOV A,#0CCH ; 跳过ROM匹配 CALL WRITE1
MOV A,#44H ; 发出温度转换命令 CALL WRITE1 CALL RESET1
MOV A,#0CCH ; 跳过ROM匹配 CALL WRITE1
MOV A,#0BEH ; 发出读温度命令 CALL WRITE1 CALL READ1
M1: CAll CONVTEMP 存放到TEMPHC、TEMPLC
CAll DISPBCD
;显示区BCD码温度值刷新子程序,即把
BCD转为十六进制 6FH-73H,;其中70H存放小数点,6FH存放十分位数,71H存放个位数,72H存放十位数,73H存入百位数
MOV A,72H ;跳过85.0摄氏度
DISPLAY: CALL DELAY2
;读出温度值到TEMPH、TEMPL
LJMP M1 ;跳到温度处理、显示程序
;处理温度BCD码子程序,并将处理结果
CJNE A,#8,DISPLAY MOV A,71H CJNE A,#5,DISPLAY MOV A,6FH CJNE A,#0,DISPLAY LJMP START
CALL CONV MOV A,#0C5H
;将采集到的温度在LCD1602显示出来
;显示已设定的温度报警值
;LCALL DIS_TEMP1
CALL TEMP_BJ ;显示报警温度摄示度的标记
LCALL DIS_WATER ;显示当前水位的值 MOV 20H,#0 LCALL KEY
;调用按键扫描程序
32
唐山学院毕业设计
JNB 20H.0,DEC_WATER
;当前水位与水位上限值80比较
LCALL DIS_WATER ;显示当前水位的值 AJMP COMPARE1 DEC WATER
ADD_WATER:INC WATER
DEC_WATER:JNB 20H.1,COMPARE1 ;当前水位与水位上限值80比较
;水位减1
LCALL DIS_WATER ;显示当前水位的值 COMPARE1: CLR C
;当前水位与水位上限值80比较
MOV A,WATER_AL2 ;取得当前水位的十位数 CJNE A,#8,NEXT11 ;十位数比较 AJMP LOOP1
;如果十位数相等,则转去比较个位数
;如果十位数小于8,转去比较下限值
NEXT11: JC COMPARE2 CLR SPK
;如果十位数大于8就报警
SETB WATER-SW-H ;关闭给水泵 CLR RED
SETB flag CLR SPK
;报警标记置位
;如果个位数大于0就报警
SETB GREEN AJMP COMPARE3
;转去当前温度与设定的报警温度比较
LOOP1: CLR C
MOV A,WATER_AL1 ;取得当前水位的个位数 JZ COMPARE3
;如果个位数等于0去比较温度
SETB GREEN CLR RED
SETB WATER-SW-H ;当前水位高于上限值关闭给水泵开关
;当前水位与下限比较
;取得当前水位的十位数
AJMP COMPARE3 COMPARE2: CLR C
MOV A,WATER_AL2
AJMP COMPARE3
CJNE A,#2,NEXT12 ;个数比较
;如果十位数等于2,则表明水位大于或等于
;十位数大于2就转去当前温度与设定的
20就转去比较温度
NEXT12: JNC COMPARE3
33
唐山学院毕业设计
报警温度比较
SETB FLAG
;报警标记置位
;如果十位数小于2就报警
CLR SPK
CLR WATER_SW_H ;如果当前水位低于下限值就打开给水泵开关 CLR BOILER_SW ;当前温度超过温度报警值关闭锅炉燃烧器开关,停
止加热
CLR RED
SETB GREEN
;转去当前温度与设定的报警温度比较
;当前温度与设定的报警温度比较
AJMP COMPARE3 COMPARE3: CLR C
MOV A,72H
CJNE A,TEMP_AL2,NEXT1 ;实际温度值与报警温度值的十位数比较 AJMP NEXT ;SETB flag CLR SPK
;十位数相等时就转去比较个位数
;实际温度值的十位数少时则转START0 ;报警标记置位
NEXT1: JC START0
;实际温度值的十位数高于报警温度值的十位数就报警
SETB BOILER_SW ;当前温度超过温度报警值关闭锅炉燃烧器开
关,停止加热 SETB RED
;SETB flag
;报警标记置位
CLR SPK ;十位数相等时,实际温度值的个位数高于报警温度值的个位数就报警
SETB BOILER_SW ;如果当前温度超过温度报警值时就关闭锅炉燃烧器开关,停止加热
34
CLR GREEN
CLR BOILER_SW ;打开锅炉燃烧器开关,继续加热 LJMP START MOV A,71H
CJNE A,TEMP_AL1,NEXT2 ;实际温度值与报警温度值的个位数比较 AJMP NEXT0
;个位数相等时就转去比较十分位数
;实际温度值的个位数少时则转START0 ;比较完毕,重新采集温度和水位
NEXT: CLR C
NEXT2: JC START0
唐山学院毕业设计
CLR RED SETB GREEN
LJMP START ;比较完毕,重新采集温度和水位
;实际温度值的十分位数等于0时则转START0
NEXT0: MOV A,6FH JZ START0 警
SETB BOILER_SW ;如果当前温度超过温度报警值时就关闭锅炉 CLR RED SETB GREEN LJMP START
;比较完毕,重新采集温度和水位
;如果水位出现报警但温度没有出现报警时就继
燃烧器开关,停止加热
;SETB flag CLR SPK
;报警标记置位
;十位数和个位数相等时,实际温度值的十分位数大于0就报
START0:
JB flag,LOOP4 续采集温度和水位 SETB SPK 后继续采集温度和水位
SETB RED CLR GREEN
;如果水位和温度都没有出现报警时就使绿灯亮,然
LOOP4: LJMP START
;====================================================================
;==============================================
;================================================ LP:
ORL P1,#03H;逻辑或,检测水位 MOV A,P1;读P1口
JNB ACC.3,LP1, P1.3=0跳转到LP1
JB ACC.4,LP2;当P1.4=0表示实际水位在下限,跳转 BK: MOV A #20 ACALL D2S;调延时2S子程序 AJMP LP
35