📄 dfb0829.asm
字号:
jmp PreTime_loop_2
preTime_chk_2:
dec preset_hour
mov a,59
mov preset_min,a
preTime_scankey:
call ScanKey
sz key_get
jmp preTime_get_key
preTime_loop_2:
mov a,preset_min
mov min,a
mov a,preset_hour
mov Hour,a
call Time_hex_bcd
call Display
jmp preTime_loop
preTime_get_key:
clr key_get
mov a,key_data
xor a,01111111b
sz Z
jmp Cancel_preTime
jmp preTime_loop
;-------------------------------
Cancel_preTime:
clr flag_action
clr preset_min
clr preset_hour
clr press_time
jmp str
;===================================================================
; 工作模式:保压
;===================================================================
keep_press:
call buzze
set flag_action
clr Led_flash
clr msec_cnt1
Clr msec_cnt2
clr flag_min ;reset timer
mov a,0dh
mov disp_ram1,a
mov disp_ram2,a
mov disp_ram3,a
mov disp_ram4,a
;-------------------------------------------压力开关60分钟检测
press_60m_loop:
snz flag_1ms
jmp press_60m_loop
clr flag_1ms
sz press_sw
jmp str_keep_press ;打开时开始保压计时
snz flag_min
jmp press_60m_scankey
clr flag_min
jmp press_60m_next
press_60m_scankey:
call scankey
sz key_get
jmp press_60m_getkey
call display
jmp press_60m_loop
press_60m_getkey:
clr key_get
mov a,key_data
xor a,07fh
sz Z
jmp Cancel_keep_press
jmp press_60m_loop
press_60m_next:
inc min_cnt
mov a,min_cnt
sub a,60 ;超过60分钟
sz c
jmp press_60m_alarm
jmp press_60m_loop
;-------------------------------------------保压计时
str_keep_press:
clr flag_action
keep_press_cnt:
snz flag_1ms
jmp keep_press_cnt
clr flag_1ms
sz press_sw
jmp keep_press_0
jmp keep_press_1
keep_press_0:
clr flag_action
jmp keep_press_next
keep_press_1:
set flag_action
keep_press_next:
snz flag_min
jmp keep_press_scankey
clr flag_min
dec press_time
sz press_time
jmp keep_press_cnt
clr flag_action ;完成保压/断开继电器
clr pac
clr pa
mov a,11110000b
mov pb,a
call spk_sec
call delay_sec
call spk_sec
call delay_sec
call spk_sec
jmp heat_preservation
keep_press_scankey:
call ScanKey
sz key_get
jmp keep_press_getkey
keep_press_loop2:
mov a,press_time
mov min,a
call Time_hex_bcd
mov a,0dh
mov disp_ram1,a
mov disp_ram2,a
call Display
jmp keep_press_cnt
keep_press_getkey:
clr key_get
mov a,key_data
xor a,07fh
sz Z
jmp Cancel_keep_press
jmp keep_press_cnt
;-------------------------------压力开关超过60m不动作:报警
press_60m_alarm:
clr pac
clr pa
mov a,11110000b
mov pb,a
alarm_spk_loop:
call spk_sec
mov a,00001000b
xorm a,pb
call delay_sec
mov a,00001000b
xorm a,pb
jmp alarm_spk_loop
;-------------------------------退出保压
Cancel_keep_press:
clr flag_action
clr press_time
jmp str
;===================================================================
; 工作模式: 保温
;===================================================================
heat_preservation:
call buzze
clr flag_action
clr flag_relay
clr led_flash
mov a,0ch
mov disp_ram1,a
mov disp_ram2,a
mov disp_ram3,a
mov disp_ram4,a ;数码管显示"0000"
mov a,11011111b
mov disp_ram5,a
temp_chk_loop:
clr rt_ad
test_rt_fd0:
clr pcc.0 ;放电
clr pcc.1
clr pgc.0
clr re_r
clr rt_r
clr v_chk
clr tmrc.4
mov a,06h
mov tmr,a
set tmrc.4
clr flag_1ms
test_rt_fd1:
snz flag_1ms
jmp test_rt_fd1
clr flag_1ms
call ScanKey
sz key_get
jmp temp_chk_getkey
call display
set pcc.0 ;充电
set pgc.0
clr pcc.1
clr tmrc.4
mov a,06h
mov tmr,a
set tmrc.4
clr flag_1ms
set rt_r
test_rt_loop1:
sz flag_1ms
jmp test_rt_loop2
snz v_chk
jmp test_rt_loop1
mov a,tmr
jmp test_rt_loop3
test_rt_loop2:
clr flag_1ms
call display
mov a,255
test_rt_loop3:
sub a,06h
mov rt_ad,a
sz flag_action
jmp temp_chk_a1
jmp temp_chk_a2
temp_chk_a1:
mov a,rt_ad
sub a,2eh ;80度时AD值
snz c
clr flag_action
jmp temp_chk_loop
temp_chk_a2:
mov a,rt_ad
sub a,4eh ;60度时AD值
sz c
set flag_action
jmp temp_chk_loop
temp_chk_getkey:
clr key_get
mov a,key_data
xor a,01111111b
sz Z
jmp Cancel_temp_chk
jmp temp_chk_loop
Cancel_temp_chk:
clr flag_action
jmp str
;************************************************************************
; Function : 定时中断程序
; Description : 1ms中断一次
;************************************************************************
SystemClock:
mov a_Save,a
mov a,status
mov Status_Save,a
set flag_1ms
snz flag_action
jmp act_nowork
jmp act_working
act_nowork:
clr act
jmp SystemClock1
act_working:
mov a,00000100b
xorm a,pb ;继电器动作(500HZ)
SystemClock1:
snz key_press
jmp SystemClock_2
inc key_time
SystemClock_2:
inc msec_cnt1
mov a,msec_cnt1
sub a,250
snz c
jmp SystemClock_reti
set flag_quaSec
clr msec_cnt1
sz Led_flash
jmp led_cpl
set led_con
jmp SystemColck_3
led_cpl:
mov a,10000000b
xorm a,flag_con
SystemColck_3:
inc msec_cnt2
mov a,msec_cnt2
sub a,240
snz c
jmp SystemClock_reti
set flag_min
clr msec_cnt2
SystemClock_reti:
mov a,Status_Save
mov status,a
mov a,a_Save
reti
;************************************************************************
; Function : 预置时间转化为十进制显示
;************************************************************************
Time_hex_bcd proc
clr disp_ram3
mov a,min
mov disp_ram4,a
min_h2b:
sub a,10
snz C
jmp min_h2b_ok
inc disp_ram3
mov disp_ram4,a
jmp min_h2b
min_h2b_ok:
clr disp_ram1
mov a,Hour
mov disp_ram2,a
hour_h2b:
sub a,10
snz C
jmp hour_h2b_ok
inc disp_ram1
mov disp_ram2,a
jmp hour_h2b
hour_h2b_ok:
ret
Time_hex_bcd endp
;************************************************************************
; Function : 蜂鸣器
;************************************************************************
buzze proc
mov a,08fh
mov bz_length,a
bz_loop0:
mov a,1ch
mov bz_freq,a
set pb.1
bz_loop1:
dec bz_freq
sz bz_freq
jmp bz_loop1
mov a,20h
mov bz_freq,a
clr pb.1
bz_loop2:
dec bz_freq
sz bz_freq
jmp bz_loop2
dec bz_length
sz bz_length
jmp bz_loop0
nop
ret
buzze endp
;************************************************************************
; Function : 响1秒
;************************************************************************
spk_sec proc
clr flag_quaSec
spk_loop:
call buzze
snz flag_quaSec
jmp spk_loop
clr flag_quaSec
inc bz_delay
mov a,bz_delay
sub a,04h
snz c
jmp spk_loop
clr bz_delay
ret
spk_sec endp
;************************************************************************
; Function : 显示“----”
;************************************************************************
dispRail proc
mov a,0ah
mov disp_ram1,a
mov disp_ram2,a
mov disp_ram3,a
mov disp_ram4,a
ret
disprail endp
;************************************************************************
; Function : 延迟1秒
;************************************************************************
delay_sec proc
clr flag_quaSec
delay_loop:
snz flag_quaSec
jmp delay_loop
clr flag_quaSec
inc time_delay
mov a,time_delay
sub a,04h
snz c
jmp delay_loop
clr time_delay
ret
delay_sec endp
;************************************************************************
; 查表区
;========================================================================
org 700h
table:
;========================================================================
dw 0c0h,0f9h,0a4h,0b0h,99h,92h,82h,0f8h,80h,90h,0bfh,0ffh,0c0h,8ch
; 0 1 2 3 4 5 6 7 8 9 - (NA) 0 P
;************************************************************************
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -