📄 温湿度读取及报警多机通信差拨号自动复位3.asm
字号:
CHA_L_1: JNB P1.3,CHA_L_2
SETB 0BH ;P1.3为1时将0BH置位
CHA_L_2: JNB P1.4,CHA_L_3
SETB 0CH ;P1.4为1时将0CH置位
CHA_L_3: MOV R1,29H
LCALL DISPLAY_CHA ;显示上限报警撤警之差2AH中
SETB P2.7 ;L标志位显示
SETB P2.6
SETB P2.5
MOV A,#11000111B ;显示L
MOV P0,A
LCALL DELAY1
MOV P0,#0FFH
SETB P2.7 ;C标志位显示
SETB P2.6
CLR P2.5
MOV A,#11000110B ;显示C
MOV P0,A
LCALL DELAY1
MOV P0,#0FFH
JNB 0AH,CHA_L_G1
CLR 0AH ;键按下没复位无效
JB P1.5,CHA_L_G1 ;P1.2=0且0AH=1则切换到QITA设置
MOV 69H,#0FFH
MOV 6AH,#0FFH
MOV 6BH,#0FFH
MOV 6CH,#0FFH
LJMP ADD_L_WD
CHA_L_G1: JB P1.3,CHA_L_G2
JNB 0BH,CHA_L_G2
CLR 0BH ;键按下没复位无效
MOV 69H,#0FFH
MOV 6AH,#0FFH
MOV 6BH,#0FFH
MOV 6CH,#0FFH
MOV A,29H
JZ CHA_L_G2 ;下限为0
DEC A ;设置值减1
MOV 29H,A
CHA_L_G2: JB P1.4,CHA_L_G3
JNB 0CH,CHA_L_G3
CLR 0CH ;键按下没复位无效
MOV 69H,#0FFH
MOV 6AH,#0FFH
MOV 6BH,#0FFH
MOV 6CH,#0FFH
MOV A,29H
CJNE A,#08H ,CHA_L_ADD1 ;上限为8
LJMP CHA_L_G3
CHA_L_ADD1: ; JNC CHA_L_G3
INC A ;设置值加1
MOV 29H,A
CHA_L_G3: JB P1.2,CHA_L_G4
RET
CHA_L_G4: MOV A,69H
JZ CHA_J_1_6AH_YN
DEC 69H
LJMP CHA_SHEZHI_CIRCLE
CHA_J_1_6AH_YN: MOV A,6AH
JNZ CHA_J_1_6AH
MOV A,6BH
JNZ CIRCLE_2_4
RET
CIRCLE_2_4: DEC 6BH
LJMP CHA_SHEZHI_CIRCLE
CHA_J_1_6AH: DEC 6AH
CHA_SHEZHI_CIRCLE: LJMP CHA_L_WD
ADD_L_WD: JNB P1.5,ADD_L_1 ;P1.2为1时将0AH置位
SETB 0AH
ADD_L_1: JNB P1.3,ADD_L_2
SETB 0BH ;P1.3为1时将0BH置位
ADD_L_2: JNB P1.4,ADD_L_3
SETB 0CH ;P1.4为1时将0CH置位
ADD_L_3: MOV R1,2CH
LCALL DISPLAY_CHA
SETB P2.7 ;A标志位显示
SETB P2.6
SETB P2.5
MOV A,#88H ;显示A
MOV P0,A
LCALL DELAY1
MOV P0,#0FFH
JNB 0AH,ADD_L_G1
CLR 0AH ;键按下没复位无效
JB P1.5,ADD_L_G1 ;P1.2=0且0AH=1则切换到QITA设置
MOV 69H,#0FFH
MOV 6AH,#0FFH
MOV 6BH,#0FFH
MOV 6CH,#0FFH
LJMP SD_H_WD
ADD_L_G1: JB P1.3,ADD_L_G2
JNB 0BH,ADD_L_G2
CLR 0BH ;键按下没复位无效
MOV 69H,#0FFH
MOV 6AH,#0FFH
MOV 6BH,#0FFH
MOV 6CH,#0FFH
MOV A,2CH
JZ ADD_L_G2 ;下限为0
DEC A ;设置值减1
MOV 2CH,A
ADD_L_G2: JB P1.4,ADD_L_G3
JNB 0CH,ADD_L_G3
CLR 0CH ;键按下没复位无效
MOV 69H,#0FFH
MOV 6AH,#0FFH
MOV 6BH,#0FFH
MOV 6CH,#0FFH
MOV A,2CH
CJNE A,#1FH ,ADD_L_ADD1 ;上限为31
LJMP ADD_L_G3
ADD_L_ADD1: ;JNC ADD_L_G3
INC A ;设置值加1
MOV 2CH,A
ADD_L_G3: JB P1.2,ADD_L_G4
RET
ADD_L_G4: MOV A,69H
JZ ADD_J_1_6AH_YN
DEC 69H
LJMP ADD_SHEZHI_CIRCLE
ADD_J_1_6AH_YN: MOV A,6AH
JNZ ADD_J_1_6AH
MOV A,6BH
JNZ CIRCLE_2_5
RET
CIRCLE_2_5: DEC 6BH
LJMP ADD_SHEZHI_CIRCLE
ADD_J_1_6AH: DEC 6AH
ADD_SHEZHI_CIRCLE: LJMP ADD_L_WD
SD_H_WD: JNB P1.5,SD_H_1 ;P1.2为1时将0AH置位
SETB 0AH
SD_H_1: JNB P1.3,SD_H_2
SETB 0BH ;P1.3为1时将0BH置位
SD_H_2: JNB P1.4,SD_H_3
SETB 0CH ;P1.4为1时将0CH置位
SD_H_3: MOV R1,66H
LCALL DISPLAY_CHA
SETB P2.7 ;A标志位显示
SETB P2.6
SETB P2.5
MOV A,#92H ;显示S
MOV P0,A
LCALL DELAY1
MOV P0,#0FFH
SETB P2.7 ;标志位显示
SETB P2.6
CLR P2.5
MOV A,#89H ;显示H
MOV P0,A
LCALL DELAY1
MOV P0,#0FFH
JNB 0AH,SD_H_G1
CLR 0AH ;键按下没复位无效
JB P1.5,SD_H_G1 ;P1.2=0且0AH=1则切换设置
MOV 69H,#0FFH
MOV 6AH,#0FFH
MOV 6BH,#0FFH
MOV 6CH,#0FFH
LJMP SD_L_WD
SD_H_G1: JB P1.3,SD_H_G2
JNB 0BH,SD_H_G2
CLR 0BH ;键按下没复位无效
MOV 69H,#0FFH
MOV 6AH,#0FFH
MOV 6BH,#0FFH
MOV 6CH,#0FFH
MOV A,66H
JZ SD_H_G2 ;下限为0
DEC A ;设置值减1
MOV 66H,A
SD_H_G2: JB P1.4,SD_H_G3
JNB 0CH,SD_H_G3
CLR 0CH ;键按下没复位无效
MOV 69H,#0FFH
MOV 6AH,#0FFH
MOV 6BH,#0FFH
MOV 6CH,#0FFH
MOV A,66H
CJNE A,#63H ,SD_H_SD1 ;上限为99
LJMP SD_H_G3
SD_H_SD1: ; JNC SD_H_G3
INC A ;设置值加1
MOV 66H,A
SD_H_G3: JB P1.2,SD_H_G4
RET
SD_H_G4: MOV A,69H
JZ SDH_J_1_6AH_YN
DEC 69H
LJMP SDH_SHEZHI_CIRCLE
SDH_J_1_6AH_YN: MOV A,6AH
JNZ SDH_J_1_6AH
MOV A,6BH
JNZ CIRCLE_2_6
RET
CIRCLE_2_6: DEC 6BH
LJMP SDH_SHEZHI_CIRCLE
SDH_J_1_6AH: DEC 6AH
SDH_SHEZHI_CIRCLE: LJMP SD_H_WD
SD_L_WD: JNB P1.5,SD_L_1 ;P1.2为1时将0AH置位
SETB 0AH
SD_L_1: JNB P1.3,SD_L_2
SETB 0BH ;P1.3为1时将0BH置位
SD_L_2: JNB P1.4,SD_L_3
SETB 0CH ;P1.4为1时将0CH置位
SD_L_3: MOV R1,65H
LCALL DISPLAY_CHA
SETB P2.7 ;A标志位显示
SETB P2.6
SETB P2.5
MOV A,#92H ;显示S
MOV P0,A
LCALL DELAY1
MOV P0,#0FFH
SETB P2.7 ;L标志位显示
SETB P2.6
CLR P2.5
MOV A,#0C7H ;显示L
MOV P0,A
LCALL DELAY1
MOV P0,#0FFH
JNB 0AH,SD_L_G1
CLR 0AH ;键按下没复位无效
JB P1.5,SD_L_G1 ;P1.2=0且0AH=1则切换到QITA设置
MOV 69H,#0FFH
MOV 6AH,#0FFH
MOV 6BH,#0FFH
MOV 6CH,#0FFH
LJMP SD_H_C_WD
SD_L_G1: JB P1.3,SD_L_G2
JNB 0BH,SD_L_G2
CLR 0BH ;键按下没复位无效
MOV 69H,#0FFH
MOV 6AH,#0FFH
MOV 6BH,#0FFH
MOV 6CH,#0FFH
MOV A,65H
JZ SD_L_G2 ;下限为0
DEC A ;设置值减1
MOV 65H,A
SD_L_G2: JB P1.4,SD_L_G3
JNB 0CH,SD_L_G3
CLR 0CH ;键按下没复位无效
MOV 69H,#0FFH
MOV 6AH,#0FFH
MOV 6BH,#0FFH
MOV 6CH,#0FFH
MOV A,65H
CJNE A,#63H ,SD_L_SD1 ;上限为99
LJMP SD_L_G3
SD_L_SD1: ;JNC SD_L_G3
INC A ;设置值加1
MOV 65H,A
SD_L_G3: JB P1.2,SD_L_G4
RET
SD_L_G4: MOV A,69H
JZ SDL_J_1_6AH_YN
DEC 69H
LJMP SDL_SHEZHI_CIRCLE
SDL_J_1_6AH_YN: MOV A,6AH
JNZ SDL_J_1_6AH
MOV A,6BH
JNZ CIRCLE_2_7
RET
CIRCLE_2_7: DEC 6BH
LJMP SDL_SHEZHI_CIRCLE
SDL_J_1_6AH: DEC 6AH
SDL_SHEZHI_CIRCLE: LJMP SD_L_WD
SD_H_C_WD: JNB P1.5,SD_H_C_1 ;P1.2为1时将0AH置位
SETB 0AH
SD_H_C_1: JNB P1.3,SD_H_C_2
SETB 0BH ;P1.3为1时将0BH置位
SD_H_C_2: JNB P1.4,SD_H_C_3
SETB 0CH ;P1.4为1时将0CH置位
SD_H_C_3: MOV R1,68H
LCALL DISPLAY_CHA
SETB P2.7 ;A标志位显示
SETB P2.6
SETB P2.5
MOV A,#92H ;显示S
MOV P0,A
LCALL DELAY1
MOV P0,#0FFH
SETB P2.7 ;标志位显示
SETB P2.6
CLR P2.5
MOV A,#86H ;显示E
MOV P0,A
LCALL DELAY1
MOV P0,#0FFH
JNB 0AH,SD_H_C_G1
CLR 0AH ;键按下没复位无效
JB P1.5,SD_H_C_G1 ;P1.2=0且0AH=1则切换设置
MOV 69H,#0FFH
MOV 6AH,#0FFH
MOV 6BH,#0FFH
MOV 6CH,#0FFH
LJMP SD_L_C_WD
SD_H_C_G1: JB P1.3,SD_H_C_G2
JNB 0BH,SD_H_C_G2
CLR 0BH ;键按下没复位无效
MOV 69H,#0FFH
MOV 6AH,#0FFH
MOV 6BH,#0FFH
MOV 6CH,#0FFH
MOV A,68H
JZ SD_H_C_G2 ;下限为0
DEC A ;设置值减1
MOV 68H,A
SD_H_C_G2: JB P1.4,SD_H_C_G3
JNB 0CH,SD_H_C_G3
CLR 0CH ;键按下没复位无效
MOV 69H,#0FFH
MOV 6AH,#0FFH
MOV 6BH,#0FFH
MOV 6CH,#0FFH
MOV A,68H
CJNE A,#20 ,SD_H_C_SD1 ;上限为99
LJMP SD_H_C_G3
SD_H_C_SD1: ;JNC SD_H_C_G3
INC A ;设置值加1
MOV 68H,A
SD_H_C_G3: JB P1.2,SD_H_C_G4
RET
SD_H_C_G4: MOV A,69H
JZ SDHC_J_1_6AH_YN
DEC 69H
LJMP SDHC_SHEZHI_CIRCLE
SDHC_J_1_6AH_YN: MOV A,6AH
JNZ SDHC_J_1_6AH
MOV A,6BH
JNZ CIRCLE_2_8
RET
CIRCLE_2_8: DEC 6BH
LJMP SDHC_SHEZHI_CIRCLE
SDHC_J_1_6AH: DEC 6AH
SDHC_SHEZHI_CIRCLE: LJMP SD_H_C_WD
SD_L_C_WD: JNB P1.5,SD_L_C_1 ;P1.2为1时将0AH置位
SETB 0AH
SD_L_C_1: JNB P1.3,SD_L_C_2
SETB 0BH ;P1.3为1时将0BH置位
SD_L_C_2: JNB P1.4,SD_L_C_3
SETB 0CH ;P1.4为1时将0CH置位
SD_L_C_3: MOV R1,67H
LCALL DISPLAY_CHA
SETB P2.7 ;A标志位显示
SETB P2.6
SETB P2.5
MOV A,#92H ;显示S
MOV P0,A
LCALL DELAY1
MOV P0,#0FFH
SETB P2.7 ;标志位显示
SETB P2.6
CLR P2.5
MOV A,#8EH ;显示F
MOV P0,A
LCALL DELAY1
MOV P0,#0FFH
JNB 0AH,SD_L_C_G1
CLR 0AH ;键按下没复位无效
JB P1.5,SD_L_C_G1 ;P1.2=0且0AH=1则切换设置
MOV 69H,#0FFH
MOV 6AH,#0FFH
MOV 6BH,#0FFH
MOV 6CH,#0FFH
LJMP TELNUM
SD_L_C_G1: JB P1.3,SD_L_C_G2
JNB 0BH,SD_L_C_G2
CLR 0BH ;键按下没复位无效
MOV 69H,#0FFH
MOV 6AH,#0FFH
MOV 6BH,#0FFH
MOV 6CH,#0FFH
MOV A,67H
JZ SD_L_C_G2 ;下限为0
DEC A ;设置值减1
MOV 67H,A
SD_L_C_G2: JB P1.4,SD_L_C_G3
JNB 0CH,SD_L_C_G3
CLR 0CH ;键按下没复位无效
MOV 69H,#0FFH
MOV 6AH,#0FFH
MOV 6BH,#0FFH
MOV 6CH,#0FFH
MOV A,67H
CJNE A,#20 ,SD_L_C_SD1 ;上限为20
LJMP SD_L_C_G3
SD_L_C_SD1: ;JNC SD_L_C_G3
INC A ;设置值加1
MOV 67H,A
SD_L_C_G3: JB P1.2,SD_L_C_G4
RET
SD_L_C_G4: MOV A,69H
JZ SDLC_J_1_6AH_YN
DEC 69H
LJMP SDLC_SHEZHI_CIRCLE
SDLC_J_1_6AH_YN: MOV A,6AH
JNZ SDLC_J_1_6AH
MOV A,6BH
JNZ CIRCLE_2_9
RET
CIRCLE_2_9: DEC 6BH
LJMP SDLC_SHEZHI_CIRCLE
SDLC_J_1_6AH: DEC 6AH
SDLC_SHEZHI_CIRCLE: LJMP SD_L_C_WD
TELNUM: MOV R1,#40H ;当前号码的存贮地址
MOV R2,#01H ;当前设置的是第几个号码
TEL: JNB P1.5,TEL1_1 ;P1.5为1时将0AH置位
SETB 0AH
TEL1_1: JNB P1.3,TEL1_2
SETB 0BH ;P1.3为1时将0BH置位
TEL1_2: JNB P1.4,TEL1_3_1
SETB 0CH ;P1.4为1时将0CH置位
TEL1_3_1: JNB P1.2,TEL1_3_2
SETB 0DH ;P1.2为1时将0DH置位
TEL1_3_2: MOV A,@R1
MOV DPTR,#DATA1
MOVC A,@A+DPTR
MOV P0,A
SETB P2.7
CLR P2.6
CLR P2.5
LCALL DELAY1
MOV P0,#0FFH
SETB P2.7 ;标志位显示
SETB P2.6
SETB P2.5
MOV A,#8CH ;显示P
MOV P0,A
LCALL DELAY1
MOV P0,#0FFH
SETB P2.7 ;标志位显示
SETB P2.6
CLR P2.5
MOV DPTR,#DATA1
MOV A,R2
MOVC A,@A+DPTR
MOV P0,A
LCALL DELAY1
MOV P0,#0FFH
JNB 0AH,TEL1_G1
CLR 0AH ;键按下没复位无效
JB P1.5,TEL1_G1 ;P1.5=0且0AH=1则切换设置
MOV 69H,#0FFH
MOV 6AH,#0FFH
MOV 6BH,#0FFH
MOV 6CH,#0FFH
CJNE R2,#12,NEQ_P_12
LJMP TELNUM
NEQ_P_12: INC R1
INC R2
LJMP TEL
TEL1_G1: JB P1.3,TEL1_G2
JNB 0BH,TEL1_G2
CLR 0BH ;键按下没复位无效
MOV 69H,#0FFH
MOV 6AH,#0FFH
MOV 6BH,#0FFH
MOV 6CH,#0FFH
MOV A,@R1
JZ TEL1_G2 ;下限为0
DEC @R1 ;设置值减1
; MOV @R1,A
TEL1_G2: JB P1.4,TEL1_G3
JNB 0CH,TEL1_G3
CLR 0CH ;键按下没复位无效
MOV 69H,#0FFH
MOV 6AH,#0FFH
MOV 6BH,#0FFH
MOV 6CH,#0FFH
MOV A,@R1
CJNE A,#9 ,TEL1_SD1_NEQ ;上限为 9
TEL1_SD1_EQ: LJMP TEL1_G3
TEL1_SD1_NEQ: INC @R1 ;设置值加1
; MOV @R1,A
TEL1_G3: JNB 0DH,TEL1_G4
CLR 0AH ;键按下没复位无效
JB P1.2,TEL1_G4 ;P1.2=0且0DH=1则退出
RET
TEL1_G4: MOV A,69H
JZ TEL_J_1_6AH_YN
DEC 69H
LJMP TEL_SHEZHI_CIRCLE
TEL_J_1_6AH_YN: MOV A,6AH
JNZ TEL_J_1_6AH
MOV A,6BH
JNZ CIRCLE_2_10
RET
CIRCLE_2_10: DEC 6BH
LJMP TEL_SHEZHI_CIRCLE
TEL_J_1_6AH: DEC 6AH
TEL_SHEZHI_CIRCLE: LJMP TEL
DISPLAY_CHA: LCALL BCD
SETB P2.7
CLR P2.6
CLR P2.5
MOV A,R4
ANL A,#0FH
MOV DPTR,#DATA1
MOVC A,@A+DPTR
MOV P0,A
LCALL DELAY1
MOV P0,#0FFH
MOV A,R4
ANL A,#0F0H
JZ NO_DSP_BAI
RR A
RR A
RR A
RR A
MOV DPTR,#DATA1
MOVC A,@A+DPTR
MOV P0,A
SETB P2.7
CLR P2.6
SETB P2.5
LCALL DELAY1
MOV P0,#0FFH
NO_DSP_BAI: RET
DISPLAY2H: LCALL BCD ;设置显示程序
SETB P2.7
CLR P2.6
CLR P2.5
MOV A,R4
ANL A,#0FH
MOV DPTR,#DATA1
MOVC A,@A+DPTR
MOV P0,A
LCALL DELAY1
MOV P0,#0FFH
MOV A,R4
ANL A,#0F0H
RR A
RR A
RR A
RR A
MOV R4,A
MOV A,R5
ANL A,#0FH
JNZ BAIWEISHU_1
MOV A,R4
JZ PAS1 ;如果百位、十位上数字为0,则十位不用显示,跳过.
BAIWEISHU_1: MOV A,R4
MOV DPTR,#DATA1
MOVC A,@A+DPTR
MOV P0,A ;十位数
SETB P2.7
CLR P2.6
SETB P2.5
LCALL DELAY1
MOV P0,#0FFH
PAS1: MOV A,R5
ANL A,#0FH
JZ BIZI_H ;如果百位为零则不显示
MOV DPTR,#DATA1
MOVC A,@A+DPTR
MOV P0,A
SETB P2.7 ;百位显示
SETB P2.6
CLR P2.5
LCALL DELAY1
MOV P0,#0FFH
BIZI_H: CLR A
MOV R1,A
MOV R4,A
MOV R5,A
;CLR 08H 百位标志
RET
BCD: MOV R0,#8 ;这里将一个八位二进制数据变成BCD码放于R5和R4。R5为高位。R0记数,R1中存放待转换数据。
CLR A
MOV R5,A
MOV R4,A
MOV A,R1
MOV C,ACC.7
JNC LOOPX1
CPL A
INC A
MOV R1,A
; SETB 0FH
LJMP LOOPX
LOOPX1: ; CLR 0FH
LOOPX: CLR C
MOV A,R1
RLC A
MOV R1,A
MOV A,R4
ADDC A,R4
DA A
MOV R4,A
MOV A,R5
ADDC A,R5
DA A
MOV R5,A
DJNZ R0,LOOPX
RET
BAOJING: MOV A,27H
JB 09H,NOT_BAOJING_H
CLR C
SUBB A,26H
JC NOT_BAOJING_H
CLR P1.0
LJMP OVER_H
NOT_BAOJING_H: MOV A,27H
ADD A,2AH ;撤警时和报警时上限相差X度
CLR C
SUBB A,26H
JNC OVER_H
SETB P1.0
OVER_H: CLR C ;从这里开始是下限报警判断,其详细说明在资料夹中另行记录。
PUSH 25H
PUSH 2BH
MOV A,25H
ADD A,#60
MOV 25H,A
MOV A,2BH
ADD A,#60
MOV 2BH,A
CJNE A,25H,BJ_NEQ1
BJ_EQ1: CLR P1.1
LJMP BJ_OVER1
BJ_NEQ1: JC BJ_LOW1
LJMP BJ_OVER1
BJ_LOW1: CLR P1.1
LJMP BJ_OVER1
BJ_OVER1: CLR C
MOV A,25H
ADD A,29H
MOV 25H,A
MOV A,2BH
CJNE A,25H,CJ_NEQ2
CJ_EQ2: SETB P1.1
CJ_NEQ2: JC CJ_LOW2
SETB P1.1
CJ_LOW2: LJMP CJ_OVER2
CJ_OVER2: POP 2BH
POP 25H
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -