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

📄 按键测试.txt

📁 用三星9488实现按键扫描的汇编语言程序.先判断是否有按键按下
💻 TXT
字号:
;===================================================
; =====      Key  Scan  Service  Routine      =====
;===================================================
;S3f9488 , Fosc = 6 MHz , subFosc=32768 KHz
.include  "s3c9488.reg"
;---------------------------------------------------------------
; Register Definition , Pin Configuration , Variety Definition
; Key Inputs : P3.0 , P3.5(SDAT) , P3.6(SCLK)		Input mode with external pull-up resistor
; Key Outputs: P1.0 , P1.2 , P1.3
Key_Down	EQU	0009H			
;sKey1		EQU	0010H
;sKey2		EQU	0011H
;sKey3		EQU	0012H
;oldKeyin	EQU	0013H
;Key_Flag	EQU	11		;r11
;KeyIN		EQU	10		;r10
;---------------------------------------------------------------
;Interrupt Vector Address
.ORG 	0000H
        VECTOR  00H,	F9488_INT
; --------------------------------------------------------------
; Smart Option 003CH-003FH
.ORG	003CH
        DB	0FFH
        DB	0FFH
        DB	7FH
        DB	0FBH
;---------------------------------------------------------------
;Initialize system and peripheral
.ORG 0100H
RESET:  DI
	LD	OSCCON,	#0		;主/次晶振启用,选主晶振
	LD	BTCON,	#0BH		;输入频率:Fxx/128
	LD	WDTCON,	#90H		;禁用Watchtime Dog
	LD	CLKCON,	#18H		;时钟控制器不分频
	LD	SP,	#0C0H		;设置堆栈首地址
	LD	SYM,	#0		
	LD	STPCON,	#00H		;禁止STOP指令

	LD	P0CONH,	#10101000B	;P0.7,0.6,0.5为普通输出口
	LD	P0PUR,	#00000000B	;不使用上拉电阻
	LD	P1CONH,	#11111111B	;取P1.7-1.4为COM0-COM3
	LD	P1CONL,	#10011010B	;P1.1为BUZ输出,P1.3,1.2,1.0为普通输出口
	LD	P1PUR,	#00000000B	;不使用上拉电阻
	LD	P2CONH,	#11111111B
	LD	P2CONL,	#11111111B	;P2作为SEG3-10
	LD	P3CONH,	#01011010B	;P3.6,3.5普通输入,3.4,3.3上拉电阻输出
	LD	P3CONL,	#01100101B	;使用TXD(输出)和RXD(输入),P3.0普通输入
	LD	P4CONH,	#00011111B	;P4.6作为普通输出口
	LD	P4CONL,	#11111111B	;P4.5-4.0作为SEG0-2,11-13

	LD	TACON,	#00001000B	;TA,fxx/1024,关中断
	LD	TBCON,	#11100011B	;TB未使用
;LD	sKey3,	#0CH
;LD	sKey2,	#09H
;LD	sKey1,	#05h		;扫描数值
;---------------------------------------------------------------
MAIN:   
	EI
	NOP
	NOP
	LD	Key_Down,	#55H
	CALL	Key_Scan
	NOP
	NOP
	JP	MAIN
;--------------------------------------------------------------- 按键扫描模块
Key_Scan:
	TM	Key_Down,	#0AAH
	JR	NZ,Key_ScanEND
	NOP
	CALL	K_Scan1
	NOP
	CALL	Delay10mS
	NOP
	CALL	K_Scan2
Key_ScanEND:
	RET
;---------------------------------------------------------------
K_Scan1:
	;LD	P1,	sKey1
        AND     P1,#11110111B
	NOP
	NOP
	TM	P3,	#01100001B
	JP	NZ,	Line1
	LD	Key_Down,	#01H	;置位有按键标志位
Line1:	
	;LD	P1,	sKey2
        AND     P1,#11111011B
	NOP
	NOP
	TCM	P3,	#01100001B
	JP	NZ,	Line2
	LD	Key_Down,	#01H
Line2:	
	;LD	P1,	sKey3
        AND     P1,#11111110B
	NOP
	NOP
	TCM	P3,	#01100001B
	JP	NZ,	Scan1End
	LD	Key_Down,	#01H
Scan1End:	
	RET
;---------------------------------------------------------------
K_Scan2:
	CP	Key_Down,	#01H
	JP	NE,	Scan2End
	LD	P0,	sKey1
	NOP
	NOP
	TM	P3,	#00000001B	;检测P3.0
	JP	Z,	Key_ONOFF
	TM	P3,	#00100000B	;检测P3.5
	JP	Z,	Key_workMD
	TM	P3,	#01000000B	;检测P3.6
	JP	Z,	Key_TeInc

	LD	P0,	sKey2
	NOP
	NOP
	TM	P3,	#00000001B	;检测P3.0
	JP	Z,	Key_TeDec
	TM	P3,	#00100000B	;检测P3.5
	JP	Z,	Key_TiINC
	TM	P3,	#01000000B	;检测P3.6
	JP	Z,	Key_TiDec

	LD	P0,	sKey3
	NOP
	NOP
	TM	P3,	#00000001B	;检测P3.0
	JP	Z,	Key_TiMD
	TM	P3,	#00100000B	;检测P3.5
	JP	Z,	Key_WindSP
	TM	P3,	#01000000B	;检测P3.6
	JP	Z,	Key_SP
Scan2End:	
	LD	Key_Down,	#00H	;清有按键标志位
	RET
;---------------------------------------------------------------  按键处理模块
Key_ONOFF:				;点亮P4.6
	LD	P4,	#0BFH		
	CALL	Delay2S
	LD	P4,	#0FFH
	JP	Scan2End
Key_workMD:				;点亮P0.5
	LD	P0,	#0D8H		
	CALL	Delay2S
	LD	P0,	#0F8H
	JP	Scan2End
Key_TeInc:				;点亮P0.6
	LD	P0,	#0B8H		
	CALL	Delay2S
	LD	P0,	#0F8H
	JP	Scan2End
Key_TeDec:				;点亮P0.7
	LD	P0,	#78H		
	CALL	Delay2S
	LD	P0,	#0F8H
	JP	Scan2End
Key_TiINC:				;点亮P4.6+P0.5
	LD	P4,	#0BFH
	LD	P0,	#0D8H
	CALL	Delay2S
	LD	P4,	#0FFH
	LD	P0,	#0F8H
	JP	Scan2End
Key_TiDec:				;点亮P0.5+P0.6
	LD	P0,	#98H
	CALL	Delay2S
	LD	P0,	#0F8H
	JP	Scan2End
Key_TiMD:				;点亮P0.6+P0.7
	LD	P0,	#38H
	CALL	Delay2S
	LD	P0,	#0F8H
	JP	Scan2End
Key_WindSP:				;点亮P4.6+P0.5+P0.6
	LD	P4,	#0BFH
	LD	P0,	#98H
	CALL	Delay2S
	LD	P4,	#0FFH
	LD	P0,	#0F8H
	JP	Scan2End
Key_SP:					;点亮P0.5+P0.6+P0.7
	LD	P0,	#18H
	CALL	Delay2S
	LD	P0,	#0F8H
	JP	Scan2End
;---------------------------------------------------------------
Delay10mS:				;延时10mS
	LD	TADATA,	#3AH 
	OR	TACON,	#01H
TaWait:	
	CP	TACNT,	#3AH
	JP	ULE,	TaWait
	AND	TACON,	#0FEH
	RET
;---------------------------------------------------------------
Delay2S:
	LD	r0,	#2DH		;延时2S
TaFull:	
	LD	TADATA,	#0FFH 		;43.52mS
	OR	TACON,	#01H
TFcnt:	
	CP	TACNT,	#0FFH
	JP	ULE,	TFcnt
	AND	TACON,	#0FEH
	DEC	r0
	CP	r0,	#2DH
	JP	ULE,	TaFull
	RET
;---------------------------------------------------------------
F9488_INT:
        NOP
        NOP
        IRET
;---------------------------------------------------------------
.END

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -