📄 时钟程序0701.asm
字号:
MOV 31H,#7CH
MOV 32H,#0B6H
MOV 33H,#6EH
CLR 07H ;暂停状态秒闪
MOV 34H,#00H
LIGHT_4A4:
RET
LIGHT_4A: JNB ALLTIME,LIGHT_4B
CLR 07H
MOV 34H,#00H ;秒闪亮与不亮
CALL SET_ALLTIME
RET
LIGHT_4B: JNB TEMP,LIGHT_4C
JB 01H,LIGHT_4B_HEI
CLR 07H
MOV 34H,#00H
MOV 30H,#9CH ;第1位数码管内容
MOV 31H,#02H ;第2位数码管内容
MOV A,TEMPERATURE
ANL A,#0F0H
SWAP A
MOV B,A
MOV DPTR,#TAB
MOVC A,@A+DPTR
MOV 32H,A ;第3位数码管内容
NOP
MOV A,TEMPERATURE
ANL A,#0FH
MOV B,A
MOV DPTR,#TAB
MOVC A,@A+DPTR
MOV 33H,A ;第4位数码管内容
MOV 34H,#00H ;秒闪亮与不亮
RET
LIGHT_4B_HEI:
MOV 30H,#9CH
MOV 31H,#02H
MOV 32H,#00H
MOV 33H,#00H
MOV 34H,#00H
RET
LIGHT_4C: JNB INTEN,LIGHT_4D
JB 01H,LIGHT_4C_HEI
MOV 30H,#00H ;第1位数码管内容
MOV 31H,#00H ;第2位数码管内容
MOV 32H,#00H ;第3位数码管内容
MOV A,INTENSITY
MOV DPTR,#TAB
MOVC A,@A+DPTR
MOV 33H,A ;第4位数码管内容
CLR 07H
MOV 34H,#00H ;秒闪亮与不亮
RET
LIGHT_4C_HEI:
MOV 30H,#00H
MOV 31H,#00H
MOV 32H,#00H
MOV 33H,#00H
MOV 34H,#00H
RET
LIGHT_4D: JNB SETTIME,LIGHT_4E
JB 01H,LIGHT_4D_HEI
SETB 07H
MOV 34H,#01H
CALL RETUN0 ;恢复原来显示数据状态
CALL RETUN1
CALL RETUN2
RET
LIGHT_4D_HEI:
MOV 30H,#00H
MOV 31H,#00H
MOV 32H,#00H
MOV 33H,#00H
MOV 34H,#01H
RET
LIGHT_4E: JNB MED,LIGHT_4F
JB 01H,LIGHT_4E_HEI
CLR 07H
CALL medicine
MOV 34H,#00H ;秒闪不亮 ]
RET
LIGHT_4E_HEI:
MOV 30H,#00H
MOV 31H,#00H
MOV 32H,#00H
MOV 33H,#00H
MOV 34H,#00H
RET
LIGHT_4F: JNB TEMPTEST,LIGHT_QU
CLR 07H
MOV 34H,#00H
MOV 30H,#9CH ;第1位数码管内容
MOV 31H,#02H ;第2位数码管内容
MOV A,TEMPERATURE
ANL A,#0F0H
SWAP A
MOV B,A
MOV DPTR,#TAB
MOVC A,@A+DPTR
MOV 32H,A ;第3位数码管内容
NOP
MOV A,TEMPERATURE
ANL A,#0FH
MOV B,A
MOV DPTR,#TAB
MOVC A,@A+DPTR
MOV 33H,A ;第4位数码管内容
MOV 34H,#00H ;秒闪亮与不亮
LIGHT_QU: RET
;****************************************************
;总时间送缓存区显示
SET_ALLTIME:MOV A,HOUR2_ALL
ANL A,#0F0H
SWAP A
MOV B,A
XRL A,#00H
JZ SET_TIME1
JMP SET_SHOW0
SET_TIME1:MOV 30H,#00H
MOV A,HOUR2_ALL
ANL A,#0FH
MOV B,A
XRL A,#00H
JZ SET_TIME2
JMP SET_SHOW1
SET_TIME2:MOV 31H,#00H
MOV A,HOUR1_ALL
ANL A,#0F0H
SWAP A
MOV B,A
XRL A,#00H
JZ SET_TIME3
JMP SET_SHOW2
SET_TIME3:MOV 32H,#00H
JMP SET_SHOW3
SET_SHOW0:MOV A,HOUR2_ALL
ANL A,#0F0H
SWAP A
MOV DPTR,#TAB
MOVC A,@A+DPTR
MOV 30H,A
SET_SHOW1:MOV A,HOUR2_ALL
ANL A,#0FH
MOV DPTR,#TAB
MOVC A,@A+DPTR
MOV 31H,A
SET_SHOW2:MOV A,HOUR1_ALL
ANL A,#0F0H
SWAP A
MOV DPTR,#TAB
MOVC A,@A+DPTR
MOV 32H,A
SET_SHOW3:MOV A,HOUR1_ALL
ANL A,#0FH
MOV DPTR,#TAB
MOVC A,@A+DPTR
MOV 33H,A
RET
;************************************************************************************
;药量送缓存区显示
;****************************************************
medicine: MOV A,MED_H
ANL A,#0F0H
SWAP A
MOV B,A
XRL A,#00H
JZ medicine1
JMP medicine_SHOW0
medicine1:MOV 30H,#00H
MOV A,MED_H
ANL A,#0FH
MOV B,A
XRL A,#00H
JZ medicine2
JMP medicine_SHOW1
medicine2:MOV 31H,#00H
MOV A,MED_L
ANL A,#0F0H
SWAP A
MOV B,A
XRL A,#00H
JZ medicine3
JMP medicine_SHOW2
medicine3:MOV 32H,#00H
JMP medicine_SHOW3
medicine_SHOW0:MOV A,MED_H
ANL A,#0F0H
SWAP A
MOV DPTR,#TAB
MOVC A,@A+DPTR
MOV 30H,A
medicine_SHOW1:MOV A,MED_H
ANL A,#0FH
MOV DPTR,#TAB
MOVC A,@A+DPTR
MOV 31H,A
medicine_SHOW2:MOV A,MED_L
ANL A,#0F0H
SWAP A
MOV DPTR,#TAB
MOVC A,@A+DPTR
MOV 32H,A
medicine_SHOW3:MOV A,MED_L
ANL A,#0FH
MOV DPTR,#TAB
MOVC A,@A+DPTR
MOV 33H,A
RET
;************************************************************************************
ANT_START:
JB 06H,START_QU ;防抖时间未到退出
MOV A,25H ;START查询子程序
MOV B,A
MOV C,P1.7 ;取样比较
MOV ACC.0,C
MOV 25H,A
XRL A,B
JZ START_QU ;没有变化退出
JB P1.7,START_QU
CLR 01H ;按下键时必须亮数码管
MOV 72H,#0FFH ;置亮时限
MOV 73H,#2
NOP
NOP
SETB 06H
MOV 2EH,#0A0H ;置防抖时限
MOV 2FH,#01H ;置防抖延时限
JB MED,START_PUT ;在设置档按下键存储数据
JB SETTIME,START_PUT ;在设置档按下键存储数据
JB TEMP,START_PUT ;在设置档按下键存储数据
JB INTEN,START_PUT ;在设置档按下键存储数据
JB TEMPTEST,START_QU ;在总时间档按下键不理会
JB ALLTIME,START_QU ;在温度档不理会
JB 02H,START_STOP ;在运行状态下按下开始键进入暂停
JB 03H,START_GOTO ;在暂停状态下按下进入雾化状态
JMP START_SELECT ;在待机时判断雾化水还是雾化药
START_QU: RET
;*****************************
START_STOP:
SETB 03H ;暂停状态
CLR 02H ;终止运行
CLR TR1 ;停止计时
MOV 30H,#0CEH ;显示暂停“PUSH”
MOV 31H,#7CH
MOV 32H,#0B6H
MOV 33H,#6EH
CLR 07H ;暂停状态秒闪
MOV 34H,#00H
CLR WUQI ;暂停关雾化
RET
;*****************************
START_GOTO:
SETB TR1 ;启动计时中断
SETB MOTOR ;启动风扇
SETB 02H ;运行状态
CLR 03H
RET
;*****************************
START_SELECT:
SETB EA
SETB TR1
SETB ET1
SETB 02H
CLR 03H
MOV A,MED_H
XRL A,#00H
JZ SELECT_1 ;如果高字节没有药量查个位
JMP SELECT_2
SELECT_1: MOV A,MED_L
XRL A,#00H
JZ SELECT_WATER ;如果高低字节都没有药量只得转化雾化水
SELECT_2: SETB WUZH ;在设定药量雾化药
JMP SELECT_QU
SELECT_WATER:
CLR WUZH ;雾化水
SELECT_QU:
RET
;*****************************************************************************************
;***************************************************
START_PUT:
MOV 70H,20H ;写状态标志位
MOV 71H,21H
MOV R0,#70H
MOV R6,#2
CALL WEEPROM ;写EEPROM雾化状态数据
CALL DELAY
MOV R0,#60H
MOV R6,#8
CALL WEEPROM
CALL DELAY
MOV R0,#68H
MOV R6,#8
CALL WEEPROM
MOV 30H,#02H ;第1位数码管内容
MOV 31H,#02H ;第2位数码管内容
MOV 32H,#02H ;第3位数码管内容
MOV 33H,#02H ;第4位数码管内容
MOV 34H,#00H ;秒闪亮与不亮
CALL DELAY
PUT_QU: RET
;************************************************************************************
ANT_ADD: JB 06H,ADD_QU ;防抖时间未到退出
MOV A,23H ;ADD查询子程序
MOV B,A
MOV C,P1.4 ;取样比较
MOV ACC.0,C
MOV 23H,A
XRL A,B
JZ ADD_QU ;没有变化退出
JB 18H,ADD_QU
CLR 01H ;按下键时必须亮数码管
MOV 72H,#0FFH ;置亮时限
MOV 73H,#2
MOV 5EH,#0FFH ;置连发时限
MOV 5FH,#3
SETB 06H
MOV 2EH,#0A0H ;置防抖时限
MOV 2FH,#01H ;置防抖延时限
CALL RETUN_EQU ;返回时间档延时时限
JB MED,ADD_MED ;药量调整
JB ALLTIME,ADD_QU
JB TEMP,ADD_TEM
JB INTEN,ADD_WU_INC
JB TIME,ADD_QU
JB TEMPTEST,ADD_QU
JB 02H,ADD_QU ;在运行时按下无效
MOV SECOND,#00H ;秒清零
;MOV A,MINUTE ;分个位清零,保留十位
;ANL A,#0F0H
;MOV MINUTE,A
MOV A,MINUTE ;分加10
ADD A,#1
DA A
MOV MINUTE,A
ANL A,#0F0H
XRL A,#60H
JNZ ADD_1
MOV MINUTE,#00H
MOV A,HOUR
ADD A,#01H
DA A
MOV HOUR,A
ADD_1: SETB 05H ;在暂停时有调整置标志
ADD_QU: RET
;ADD查询子程序结束
ADD_TEM:
MOV A,TEMPERATURE
INC A
DA A
MOV TEMPERATURE,A
CLR C
CJNE A,#40H,ADD_TEM1 ;温度单元不迢过40,不迢过按下才有效
ADD_TEM1: JC ADD_TEM_QU
MOV TEMPERATURE,#40H
ADD_TEM_QU: RET
;********************************************
ADD_WU_INC:
MOV A,INTENSITY
INC A
MOV INTENSITY,A
CLR C
CJNE A,#05H,ADD_INC_1
ADD_INC_1: JC ADD_INC_QU
MOV INTENSITY,#05H ;不迢过5,不迢过按下才有效
ADD_INC_QU:MOV 49H,#00H ;按下键雾化时间间隔计数清零
RET
;*********************************************
ADD_MED:
;CLR 00H ;开机在药量档按下加或减键终止待机状态
MOV A,MED_L
ADDC A,#10
DA A
MOV MED_L,A
MOV A,MED_H
ADDC A,#00H
DA A
MOV MED_H,A
XRL A,#1
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -