辽宁科技大学本科生毕业设计 第32页
FLAG1 EQU 2FH.7 ;DS18B20是否存在标记
FLAG EQU 2FH.6 ;报警标记
DATE_LINE1 EQU P3.3 ;通道1DS18B20数据口 ;===================================================== ORG 0000H JMP MAIN
MAIN: MOV SP,#60H MOV A,#00H
MOV R0,#20H ;将 20H-2FH 单元清零 MOV R1,#10H CLEAR: MOV @R0,A INC R0
DJNZ R1,CLEAR
MOV WATER,#50
;对 LCD 做初始化设置及测试,并写自定义数据
MOV TEMP_AL,#23 CALL SET_LCD 入CGRAM
CALL TEMP_SET ;显示设定温度报警值的信息 MOV A,#0C9H
;设定温度摄示度标记的显示位置
;设置堆栈
;跳到主程序入口
CALL TEMP_BJ ;显示温度摄示度的标记
LCALL DIS_TEMP
;显示初始化的报警温度
MAIN1: MOV 20H,#0
LCALL KEY
;调用按键扫描程序
JNB 20H.0,DEC_TEMP
;报警湿度值加1
ADD_TEMP: INC TEMP_AL
LCALL DIS_TEMP AJMP MAIN1 DEC TEMP_AL LCALL DIS_TEMP
;显示改变后的报警温度
DEC_TEMP: JNB 20H.1,CONFIRM
;报警湿度值减1 ;显示改变后的报警温度
辽宁科技大学本科生毕业设计 第33页
AJMP MAIN1
CONFIRM: JNB 20H.2,MAIN1 ;如果没按任何键就返回MAIN1继续扫描 ;SETB SPK ;
LCALL DIS_TEMP1
CALL MENU_OK1 ;LCD显示温度采集和水位控制信息 LCALL DIS_TEMP1 ;显示已设定的温度报警值 MOV A,#0CEH
;当前温度摄示度标记的显示位置
CALL TEMP_BJ ;显示当前温度摄示度的标记
;SETB SPK SETB RED ;CLR GREEN
;
LJMP START
;================================================== DIS_TEMP: MOV A,TEMP_AL ;显示改变后的报警温度
MOV B,#10 DIV AB
MOV TEMP_AL2,A ;保存温度报警值的十位数 MOV LCD_X,#7 ;设置位置
;显示报警温度值的十位
CALL SHOW_DIG2 INC LCD_X
MOV A,TEMP_AL MOV B,#10 DIV AB
MOV A,B
;个位
MOV TEMP_AL1,A ;保存温度报警值的个位数
;显示报警温度值的个位
CALL SHOW_DIG2
RET
;================================================== DIS_WATER: MOV A,WATER
;显示当前水位的值
MOV B,#10 DIV AB
辽宁科技大学本科生毕业设计 第34页
MOV WATER_AL2,A ;保存温度报警值的十位数 MOV LCD_X,#7 ;设置位置
;显示报警温度值的十位
CALL SHOW_DIG1 INC LCD_X
MOV A,WATER MOV B,#10 DIV AB
MOV A,B
;个位
MOV WATER_AL1,A ;保存温度报警值的个位数
;显示报警温度值的个位
CALL SHOW_DIG1
RET
;================================================== ;================================================== 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 A,B
;个位
MOV TEMP_AL1,A ;保存温度报警值的个位数
;显示报警温度值的个位
CALL SHOW_DIG2
RET
;================================================== START: CALL RE_18B20_1 确度
;检测通道1的DS18B20是否存在,并设置12位精
辽宁科技大学本科生毕业设计 第35页
CALL RESET1 ;18B20复位子程序,检测18B20是否存在 JNB FLAG1,START11 ;如果DS1820不存在则跳START11 ; CALL MENU_OK1 ; MOV A,#0CEH
; CALL TEMP_BJ ;显示温度摄示度的标记 JMP START21 START11: CALL MENU_ERROR1 MOV A,#0CBH
CALL TEMP_BJ ;显示温度摄示度的标记 JMP START
START21: ;检查到有温度传感器后的处理 CALL RESET1
;18B20复位子程序,再次检测18B20是否存在
;如果不存在则显示ERROR ;如果存在则显示OK
JNB FLAG1,START11 ;DS1820不存在则转到START11报错 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存放十分
;处理温度BCD码子程序,并将处理结果存放到
LJMP M1
;读出温度值到TEMPH、TEMPL
;跳到温度处理、显示程序
辽宁科技大学本科生毕业设计 第36页
位数,71H存放个位数,72H存放十位数,73H存入百位数
MOV A,72H ;跳过85.0摄氏度
DISPLAY: CALL DELAY2
CALL CONV
;将采集到的温度在LCD1602显示出来
CJNE A,#8,DISPLAY MOV A,71H CJNE A,#5,DISPLAY MOV A,6FH CJNE A,#0,DISPLAY LJMP START
;LCALL DIS_TEMP1 ;显示已设定的温度报警值
MOV A,#0C5H
CALL TEMP_BJ ;显示报警温度摄示度的标记
LCALL DIS_WATER ;显示当前水位的值 MOV 20H,#0 LCALL KEY
;调用按键扫描程序
JNB 20H.0,DEC_WATER
LCALL DIS_WATER ;显示当前水位的值 AJMP COMPARE1
;当前水位与水位上限值80比较
;当前水位与水位上限值80比较
ADD_WATER:INC WATER
DEC_WATER:JNB 20H.1,COMPARE1
COMPARE1: CLR C
DEC WATER
;水位减1
LCALL DIS_WATER ;显示当前水位的值
;当前水位与水位上限值80比较
MOV A,WATER_AL2 ;取得当前水位的十位数 CJNE A,#8,NEXT11 ;十位数比较 AJMP LOOP1
;如果十位数相等,则转去比较个位数
;如果十位数小于8,转去比较下限值
NEXT11: JC COMPARE2