📄 keyjob.asm
字号:
;******************************************
key_scan:
call KBkey_convert ;
call KBCont_convert ;
ret
;*****************************************************
keyjob:
snz KJ_key_f ;
jmp mainloop ;
clr KJ_key_f ;
sz power_f ;
jmp keyjob_power ;
sz wait_f ;
jmp mainloop ;wait 3 seconds.
mov a, KB_keycode ;
xor a, cPOWER ;
snz z ;
jmp mainloop ;
jmp kPOWER ;
keyjob_power:
; sz pot_f ;no pot, only response to POWER key.
; jmp keyjmp ;
; snz KB_keycode.6 ;
; jmp mainloop ;
keyjmp:
mov a, KB_keycode ;
and a, 0fh ;
addm a, pcl ;
jmp kPOWER ;00h
jmp kPRESET ;01h
jmp k1 ;02H
jmp k10 ;03H
jmp kMODE0 ;04h
jmp kMODE1 ;05h
jmp kMODE2 ;06h
jmp kMODE3 ;07h
jmp kMODE4 ;08h
jmp kMODE5 ;09h
jmp kUP ;0ah
jmp kDN ;0bh
jmp kNOP ;0ch
jmp kNOP ;0dh
jmp kNOP ;0eh
jmp kNOP ;0fh
;********************************************************************
kPRESET:
call SetBuzOnce ;
mov a, disp_mode ;
xor a, DISP_BLINK ;
snz z ;
jmp preset_1st ;
clr disp_mode ;
call FillTimeValue ;
jmp mainloop ;
preset_1st:
mov a, DISP_BLINK ;
mov disp_mode, a ;
mov a, 1 ;
mov timer_disp, a ;
clr time_shadow ;clear the time_preset value first.
mov a, TOTAL_BLINK_TIMES ;total blink times.
mov disp_state, a ;
jmp mainloop ;
;********************************************************************
kMODE0:
kMODE1:
kMODE2:
kMODE3:
kMODE4:
kMODE5:
;********************************************************************
mov a, KB_keycode ;
sub a, cMODE0 ;
mov mode_state, a ;
call SetMode ;
call DispModeLED ;
call DispForceLED ;
call SetBuzOnce ;
call disp2idle ;
jmp mainloop ;
;************************************
SetMode:
mov a, mode_state ;
add a, low(ModeValueTbl) ;
mov tblp, a ;
tabrdl force_preset ;
mov a, tblh ;
mov temp_preset, a ;
mov a, mode_state ;
add a, low(ModeTimeTbl) ;
mov tblp, a ;
tabrdl acc ;
mov time_preset, a ;
mov time_shadow, a ;
clr timer_minute ;
;force changed.
SetForceChange:
mov a, force_preset ;
sub a, force_now ;
sz c ;
ret ;c=1, force_preset >= force_now
mov a, force_preset ;
mov force_now, a ;
ret ;
;********************************************************************
kPOWER:
;********************************************************************
snz power_f ;
jmp kpon ;
kpoff:
call power_off ;
call SetBuzOnce ;
jmp mainloop ;
kpon:
clr disp_mode ;
clr vLED_POWER0 ;
clr vLED_POWER1 ;
set power_f ;
set _fan ;
set fan_f ;
clr pot_f ;
call SetBuzOnce ;
call disp_nopot ;
mov a, MODE_INITVALUE ;
mov mode_state, a ;
clr force_now ;
call SetMode ;
sz error_flag ;
jmp kpon_error ;
; wait for 3 seconds, pot will be checked.
;
clr timer_3s ;
jmp mainloop ;
kpon_error:
clr disp_mode ;
set error_f ;
clr _switch ;
clr _pwm ;
mov a, PWM_POTCHECK ;
mov pwm, a ;
clr s3_f ;sometimes, power on voltage noise.(don't know why)
clr timer_3s ;
jmp mainloop ;
;***********************************
power_off:
set wait_f ;after power off, wait for at least 3 seconds before power on again.
mov a, TIME_WAIT ;
mov timer_wait, a ;
clr _switch ;
clr _pwm ;
mov a, PWM_POTCHECK ;
mov pwm, a ;
set fan_f ;
clr timer_fan ;
clr power_f ;
clr pot_f ;assume no pot.
clr force_now ;
clr pot_check_f ;
clr vi_counter ;
clr vad_temp ;
clr iad_temp ;
clr iad_data ;
mov a, 99 ;assume it's 220V
mov vad_data, a ;
clr temp_counter ;`
clr temp_hi ;
clr temp_lo ;
clr IGBT_volt_f ;
; clr _buzzer ;
; clr buz_once_f ;
clr disp_buf0 ;
clr disp_buf1 ;
clr disp_buf2 ;
clr LED_buf0 ;
clr LED_buf1 ;
clr vLED_HUOGUO ;
clr vLED_ZENDUN ;
mov a, DISP_POFF ;
mov disp_mode, a ;
mov a, 1 ;
mov timer_disp, a ;
clr disp_state ;
set vLED_POWER0 ;
set vLED_POWER1 ;
clr shifter0 ;
clr shifter1 ;
call disp_update ;display off.
set timer_ms ;
clr timer_100ms ;
clr timer_3s ;
clr timer_minute ;
clr timer_120m ;
clr timer_PotChk ;
ret ;
;********************************************************************
kUP:
;********************************************************************
mov a, MAX_FORCE ;
mov w0, a ;
mov a, offset force_preset ;
call valueUp ;
sz force_preset ;
jmp force_com ;
clr pot_f ;
clr s3_f ;
set timer_3s ;so the next 2.5ms, pot will be checked.
jmp force_com ;
;********************************************************************
kDN:
;********************************************************************
mov a, OFFSET force_preset ;
call ValueDn ;
sz force_preset ;
jmp force_com ;
call SetForce00 ;
force_com:
call SetBuzOnce ;
clr timer_120m ;120 minutes no key operation, off.
call DispForceLED ;
call SetForceChange ;
jmp mainloop ;
;************************************
SetForce00:
clr pwm_on_f ;
clr _switch ;
clr _pwm ;
clr timer_3s ;
clr s3_f ;
mov a, 1 ;
mov timer_jianxie, a ;
ret ;
;********************************************************************
k10:
;********************************************************************
mov a, disp_mode ;
xor a, DISP_BLINK ;
snz z ;
jmp mainloop ;
call Time10 ;
jmp time_com ;
;********************************************************************
k1:
;********************************************************************
mov a, disp_mode ;
xor a, DISP_BLINK ;
snz z ;
jmp mainloop ;
call Time1 ;
time_com:
mov a, time_shadow ;
mov time_preset, a ;
call FillTimeValue ;
call SetBuzOnce ;
clr timer_120m ;120 minutes no key operation, off.
mov a, TOTAL_BLINK_TIMES ;
sz disp_state.0 ;
mov a, TOTAL_BLINK_TIMES-1 ;
mov disp_state, a ;
jmp mainloop ;
;***********************************
Time10:
clr timer_minute ;
mov a, 10 ;
addm a, time_shadow ;
mov a, time_shadow ;
add a, 256-MAX_TIME ;
snz c ;
ret ;
mov a, MAX_TIME ;
mov time_shadow, a ;
ret ;
;***********************************
Time1:
clr timer_minute ;
mov a, 1 ;
addm a, time_shadow ;
mov a, time_shadow ;
add a, 256-MAX_TIME ;
snz c ;
ret ;
mov a, MAX_TIME ;
mov time_shadow, a ;
ret ;
;********************************************************************
kNOP:
;********************************************************************
jmp mainloop ;
;******************************************************************
; do it only when power_on
error_process:
snz power_f ;
ret ;
snz ms100_f ;
ret ;
sz error_flag ;
jmp $+3 ;
clr error_f ;
ret ;
sz error_f ;
jmp ep_not1st ;not the first time, just display it.
set error_f ;
clr disp_mode ;
jmp error_response ;
ep_not1st:
; snz s3_f ;
; ret ;
jmp disp_error ;update error state every 3 seconds.
;***********************************
error_response:
snz power_f ;
ret ;
clr _switch ;
clr _pwm ;
mov a, PWM_POTCHECK ;
mov pwm, a ;
mov a, 1 ;
mov force_now, a ;
disp_error:
clr pot_f ;
clr w2 ;
mov a, 0eh ;display "e0x"
mov w1,a ;
mov a, 8 ;loop counter.
mov w0, a ;
mov a, error_flag ;
de_loop:
rrc acc ;
sz c ;
jmp de_ok ;
sdz w0 ;
jmp de_loop ;
de_ok:
mov a, 9 ;
subm a, w0 ;
jmp FillValue ;
;***********************************
ValueUp:
mov mp0, a ;
inc r0 ;
mov a, w0 ;
sub a, r0 ;
sz c ;
ret ;C=1; w0(MAX) >= R0
mov a, w0 ;
mov r0, a ;
ret ;
;******************************************************************
ValueDn:
mov mp0, a ;
sz r0 ;
dec r0 ;
ret ;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -