📄 idwrackey.asm
字号:
;************************************************************************
; NAME SCAN,KEY,SEL,RMT
; $include (LT0219sym.INC)
; $include (LT0219RAM.INC)
;
;
; CSEG
; EXTRN OFF_COM
; EXTRN OUTcom
; EXTRN HEATctrl
; extrn BEEP1tms
;
; PUBLIC MODctrl
;========================================================================
;------------------------------------------------------------------------
;------------------------------------------------------------------------
; KEY DEFINE
;------------------------------------------------------------------------
; GOODman Indiea
n_KEYon EQU 0 ; * *
n_KEYtmr EQU 1 ; * *
n_KEYfilter EQU 2 ; * *
n_KEYmoney EQU 3 ;
n_KEYsleep EQU 3 ; *
n_KEYquick EQU 4 ; *
n_KEYdown EQU 5 ; * *
n_KEYup EQU 6 ; * *
n_KEYswing EQU 7 ; *
n_KEYmod EQU 8 ; * *
n_KEYfansp EQU 9 ; * *
;
n_KEYnone EQU 0ffh ;
;========================================================================
;************************************************************************
;* Module Name: SCANctrl *
;* Function: mode control *
;* Input: *
;* Output: *
;* Break: *
;* stack: *
;************************************************************************
; History:
;
;------------------------------------------------------------------------
SCANctrl:
CALL !SCANout
CALL !KEYcheck
RET
;========================================================================
;************************************************************************
;* Module Name: SCANout *
;* Function: *
;* Input: *
;* Output: *
;* Break: *
;* stack: *
;************************************************************************
; History:
;
;------------------------------------------------------------------------
SCANout:
di
SET1 o_COM1
SET1 o_COM2
ei
CLR1 o_COM3
CP D_SCANdata,#00000101b
JREQ NEXTscan
INC D_SCANdata
JRA DISPout1
NEXTscan:
LD D_SCANdata,#00000000B
DISPout1:
CP D_SCANdata,#00000100B
JREQ SCAN164
CP D_SCANdata,#00000101B
JREQ EEPchk
LD A,D_SCANdata
AND A,#011B
; DEC A
XCH A,X
XOR A,A
ADDW AX,#D_DSPram
MOVW HL,AX
MOV A,[HL]
CALL !OUT1byte
LD A,D_SCANdata
CP A,#0B
BEQ LEDcom0
CP A,#01B
BEQ LEDcom1
CP A,#011B
BEQ LEDcom3
LEDcom2:
; call !delay20us
di
SET1 o_COM2
CLR1 o_COM1
ei
RET
LEDcom1:
; Call !delay20us
di
SET1 o_COM1
CLR1 o_COM2
ei
RET
LEDcom0:
; Call !delay20us
di
CLR1 o_COM1
CLR1 o_COM2
ei
RET
LEDcom3:
; Call !delay20us
SET1 o_COM3
RET
;------------------------------------------------------------------------
;========================================================================
EEPchk:
CALL !TYPEsel
CALL !SAVEdat
;...wait
ret
;========================================================================
;------------------------------------------------------------------------
;========================================================================
SCAN164:
MOV A,#0FFH
CALL !OUT1byte
MOV D_KEYin1,#0ffH
MOV D_KEYin2,#0ffh
; MOV D_SELin,#0ffh
; MOV D_RMTin,#0ffh
LD A,#0FEH
LD X,#8
CLR1 CY
LOOPscan164:
CALL !OUT1bit
nop
; Call !delay20us
; Call !delay20us
; Call !delay20us
mov A,P1
RORC A,1
XCH A,D_KEYin1
ROLC A,1
XCH A,D_KEYin1
RORC A,1
XCH A,D_KEYin2
ROLC A,1
XCH A,D_KEYin2
NOkeyLINE:
SET1 CY
DEC X
JRNE LOOPscan164
RET
;------------------------------------------------------------------------
delay20us:
push BC
mov B,#10
DBNZ B,$$
pop BC
ret
;========================================================================
Delay1ms:
push BC
mov B,#30
call !delay20us
DBNZ B,$$-3
pop BC
ret
;------------------------------------------------------------------------
;************************************************************************
;* Module Name: KEYcheck *
;* Function: key input,stuff,continue,confirm *
;* Input: *
;* Output: *
;* Break: *
;* stack: *
;************************************************************************
;双键----等待双键计时时间到在处理
;连击----在键处理后设置C_KEYsame
;------------------------------------------------------------------------
;
; History:
;
;------------------------------------------------------------------------
KEYcheck:
BTJT f_KEY3125,$+4+1
ret
CLR1 f_KEY3125
KEYencode:
LD A,D_KEYin1
or A,#11100000b ;屏蔽最高3位选择口
LD x,#0FFH
LD b,#6
NEXTkeyCHK:
INC X
SET1 cy
RORC A,1
JRNC KEY1found
DBNZ B,$NEXTkeyCHK
BR ENDkeyC1
KEY1found:
CP A,#0ffh
BNE TWOkeyCHK
MOV A,D_KEYin2
; OR A,#11100000B
CMP A,#0FFH
BNE TWOkeyCHK
XCH A,X
BR KEYold2buf
ENDkeyC1:
LD A,D_KEYin2
LD b,#6
NEXTkeyCHK1:
SET1 cy
RORC A,1
JRNC KEY2found
INC X
DBNZ B,$NEXTkeyCHK1
BR NOkey
KEY2found:
CMP A,#0FFH
BNE TWOkeyCHK
XCH A,X
KEYold2buf:
CP A,D_KEYbuf
JRNE KEYnew
TNZ C_KEYsame
JREQ WAITrelease
DEC C_KEYsame
TNZ C_KEYsame
JREQ KEYconfirm
WAITrelease:
cmp C_KEY3s,#0
BEQ endkey3SEC
DEC C_KEY3s
CMP C_KEY3s,#0
BNE endkey3SEC
MOV A,D_KEYcod
cmp A,#n_KEYtmr
BNE endkey3SEC
call !BEEP1tms
call !clrTMR
endkey3SEC:
; TNZ C_KEYerr
; JREQ $+2+1
; RET
; LD A,D_KEYbuf
; XOR A,#0FFH
; OR A,D_KEYerr
; LD D_KEYerr,A
; BF D_KEYerr.1,$NOmodERR
; MOV M_MODset,#n_Mcool
;NOmodERR:
; SET1 f_ERRstuck
TWOkeyCHK:
RET
;------------------------------------------------------------------------
NOkey:
; BTJT f_KEYwait,KEYrelease
; BTJT f_KEYpress,KEYrelease
CLRkey:
; TNZ C_RMTchatt
; JRNE CLRkey1
MOV C_KEYroll,#1
LD A,#n_KEYnoise
LD C_KEYsame,A
LD A,#96
LD C_KEY3s,A
; LD A,#n_20s1s
; LD C_KEYerr,A
; LD A,D_KEYin
; XOR A,#0FFH
; LD D_KEYerr,A
; cmp A,#0
; BNZ $ERRstuck
;
; CLR1 f_ERRstuck
;ERRstuck:
; LD A,#0
; LD D_KEYbuf,A
KEYrelease:
BRES f_KEYwait
RET
;------------------------------------------------------------------------
KEYnew:
LD D_KEYbuf,A
LD A,#96
LD C_KEY3s,A
TNZ C_KEYsame
JRNE $+2+1
ret
LD A,#n_KEYnoise
LD C_KEYsame,A
RET
;------------------------------------------------------------------------
KEYconfirm:
BSET f_KEYpress
BSET f_KEYwait ;wait for keyrelease
RET
;========================================================================
;************************************************************************
;* Module Name: *
;* Function: *
;* Input: *
;* Output: *
;* Break: *
;* stack: *
;************************************************************************
; History:
;
;------------------------------------------------------------------------
KEYpress:
BT f_KEYpress,$$+4+1
ret
BRES f_KEYpress
mov A,f_FLGerr
CMP A,#0
BEQ keyEN
ret
keyEN:
LD A,D_KEYcod
rol A,1
xch A,x
xor A,A
addw AX,#T_KEYindex
MOVW HL,ax
mov A,[hl]
xch A,X
MOV A,[HL+1]
BR AX
T_KEYindex:
; GOODman Indiea
DW KEYon ;EQU 0 ; *---------------*
DW KEYtmr ;EQU 1 ; *---------------*
DW KEYfilter ;EQU 2 ; *---------------*
DW KEYsleep ;EQU 3 ; *----------------
DW KEYquick ;EQU 4 ; ----------------*
DW KEYdown ;EQU 5 ; *---------------*
DW KEYup ;EQU 6 ; *---------------*
DW KEYswing ;EQU 7 ; ----------------*
DW KEYmod ;EQU 8 ; *---------------*
DW KEYfansp ;EQU 9 ; *---------------*
;========================================================================
KEYup:
CALL !KEYroll
CMP M_LEDdigram,#n_DSPtonSET
BEQ TonSETup
BBC f_PWRon,skipUP
CMP M_LEDdigram,#n_TOFFset
BEQ ToffSETup
BT f_COOLquick,$skipUP
CMP M_MODset,#n_Mfan
BEQ skipUP
; CMP M_LEDdigram,#n_TMPset
; BNE SETtDSP
MOV M_LEDdigram,#n_TMPset
CALL !DSP3sec
MOV C_RMT1s,#n_2s125
BTJF f_DEGREEf,UPcDEGREE
CP D_TMPset,#90+n_TMPdsp ;88`F
JRULT $+2+1
RET
;------------------------------------------------------------------------
BF f_SLEEP,$ENDslpUP
CMP C_SLPstp,#2
BZ $ENDslpUP
MOV A,D_TMPrun
MOV D_TMPset,A
ENDslpUP:
;------------------------------------------------------------------------
ADD D_TMPset,#1
MOV A,D_TMPset
CALL !degreeF2C
LD D_TMPcset,A
MOV C_SLPstp,#2 ;sleep set to 7 step. each step count to 7min 掉电后睡眠重计时
MOV C_SLP1h,#n_1h1m ;count source 1min
SETtDSP:
call !BEEP1tms
MOV M_LEDdigram,#n_TMPset
CALL !DSP3sec
skipUP:
ret
UPcDEGREE:
LD A,D_TMPcset
CP A,#30+n_TMPdsp ;30
JRULT $+2+1
RET
;------------------------------------------------------------------------
BF f_SLEEP,$ENDslpUPC
CMP C_SLPstp,#2
BZ $ENDslpUPC
MOV A,D_TMPcRUN
MOV D_TMPcset,A
ENDslpUPC:
;------------------------------------------------------------------------
INC A
LD D_TMPcset,A
CALL !degreeC2F
LD D_TMPset,A
call !BEEP1tms
MOV C_SLPstp,#2 ;sleep set to 7 step. each step count to 7min 掉电后睡眠重计时
MOV C_SLP1h,#n_1h1m ;count source 1min
RET
;------------------------------------------------------------------------
TonSETup:
Call !BEEP1tms
MOVW HL,#D_TMRon
BRA TMRup
ToffSETup:
Call !BEEP1tms
MOVW HL,#D_TMRoff
; BRA TMRup
TMRup:
MOV A,[HL]
INC A
CMP A,#25
BC $$+2+3
mov A,#0
MOV [HL],A
MOV C_TMRmin,#n_1h1m-1
CALL !DSP10sec
RET
;========================================================================
KEYdown:
CALL !KEYroll
CMP M_LEDdigram,#n_DSPtonSET
BEQ TonSETdown
BBC f_PWRon,skipDOWN
CMP M_LEDdigram,#n_TOFFset
BEQ ToffSETdown
CMP M_MODset,#n_Mfan
BEQ skipDOWN
; CMP M_LEDdigram,#n_TMPset
; BNE SETtDSP
BT f_COOLquick,$skipDOWN
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -