⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 idwrackey.asm

📁 空调控制程序,MCU 采用NEC D789189
💻 ASM
📖 第 1 页 / 共 2 页
字号:
;************************************************************************	
;	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 + -