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

📄 keyboard.asm

📁 DSP的汇编程序
💻 ASM
字号:
		.include  "F2407REGS.H"		;引用头部文件
		.def      _c_int0    
		
		.sect     ".text"
		.data

DTABLE:	.word 00c0h, 00f9h, 00a4h, 00b0h, 0099h, 0092h, 0082h, 00f8h
		.word 0080h, 0090h, 0088h, 0083h, 00c6h, 00a1h, 0086h, 008eh  
		
ScanBits:	.word   00e0h,00d0h,00b0h,0070h

ScanTable0:	.word 	00h, 07h, 04h, 01h
ScanTable1:	.word 	0Ah, 08h, 05h, 02h
ScanTable2:	.word 	0Bh, 09h, 06h, 03h
ScanTable3:	.word 	0Ch, 0Dh, 0Eh, 0Fh		
TEMP	.word	0H
RESULT	.word	0H
		
		.text                                      
		
IO_LED	.set   	8000H 
IO_KEYS .set   	800BH               ;低4比特
IO_KEYV .set   	800AH  				;低4比特
IO_ST	.set	800BH  
IO_SEG0	.set  	8002H
IO_SEG1	.set  	8003H
IO_SEG2	.set  	8004H
IO_SEG3	.set  	8005H
IO_SEG4	.set  	8006H
IO_SEG5	.set  	8007H
IO_SEGD	.set  	8001H
		
_c_int0    							;相当于主程序的入口
		CALL	SYSINIT 			;调系统初始化程序   
		CALL	KEYBOARD_INIT
		
LOOP:
		CALL    SCAN_KEYBOARD
		CALL	DISP_KEY   

		B		LOOP  
		
KEYBOARD_INIT:   
		LDP		#DP_B01  
		
		LACC	#0FFFFH
		SACL	TEMP
		
		OUT		TEMP, IO_SEGD		
		OUT		TEMP, IO_SEG0
		OUT		TEMP, IO_SEG1
		OUT		TEMP, IO_SEG2
		OUT		TEMP, IO_SEG3
		OUT		TEMP, IO_SEG4
		
		LACC	#0000H
		SACL	TEMP
		OUT		TEMP, IO_SEG0
		OUT		TEMP, IO_SEG1
		OUT		TEMP, IO_SEG2
		OUT		TEMP, IO_SEG3
		OUT		TEMP, IO_SEG4
		OUT		TEMP, IO_SEG5
		
		LACC	#0FFFFH
		SACL	TEMP
		OUT		TEMP, IO_KEYS    
		IN		RESULT, IO_KEYV 
		
		RET		
		
SCAN_KEYBOARD:  
		
		LDP		#DP_B01  			;init keyboard   
		
		LACC	#0FFFFH
		SACL	RESULT
		                
		LAR		AR1,  #ScanBits  
		LAR		AR2,  #0
NEXT:		
		LACC	#0FFFFH
		SACL	TEMP  
		OUT		TEMP, IO_KEYS   
		CALL	DELAY   
		
		MAR		*, AR1
		OUT		*+,IO_KEYS
		
		CALL	DELAY      
		IN		TEMP, IO_KEYV

		MAR		*, AR2		
		
		LACC	TEMP
		AND		#000FH
		XOR		#000FH
		
		BCND	PRESSED, NEQ		; 有键按下
		
		;MAR		*, AR2
		LAR		AR0, #4
		ADRK	#1
		CMPR	00
		BCND	NEXT, NTC    
		
		LACC	#0FFFFH
		SACL	TEMP    
		
PRESSED:
		;SBRK	#1     
		;SAR	AR2, TEMP
		BIT		TEMP, BIT0
		BCND	ZERO_BIT0, NTC
		BIT		TEMP, BIT1
		BCND	ZERO_BIT1, NTC
		BIT		TEMP, BIT2
		BCND	ZERO_BIT2, NTC		
		BIT		TEMP, BIT3
		BCND	ZERO_BIT3, NTC  
		B		QUIT

ZERO_BIT0:  
		LAR		AR0, #0 
		;LAR		AR2, #ScanTable0
		B		TRANS
ZERO_BIT1: 
		LAR		AR0, #1 
		;LAR		AR2, #ScanTable1
		B		TRANS
ZERO_BIT2:
		LAR		AR0, #2    
		;LAR		AR2, #ScanTable2
		B		TRANS
ZERO_BIT3:
		LAR		AR0, #3 
		;LAR		AR2, #ScanTable3
		B		TRANS
TRANS:        
		;SBRK	#1
		SAR		AR2, TEMP
		LACC	TEMP, 2      
		ADD		#ScanTable0
		SACL	TEMP
		LAR		AR2, TEMP
		MAR		*0+
		LACC	*
		SACL	RESULT
QUIT:
		RET
		
;****************************************************************************
;数码管显示函数,要求显示前将待显示数据的保存在RESULT中
;****************************************************************************
DISP_KEY:
		LDP		#DP_B01
		MAR		*, AR1 
		LAR		AR1,RESULT
		LAR		AR0,#0FFFFH
		CMPR	00
		BCND	NOTHING, TC
		
		LAR		AR0, #DTABLE		
		MAR		*0+
		OUT		*, IO_SEGD
NOTHING:
		RET		

*系统初始化程序*

SYSINIT:
		SETC 	INTM
		CLRC 	SXM
		CLRC 	OVM
		CLRC 	CNF					;B0 被配置为数据存储空间
		LDP 	#0E0H
		SPLK 	#81FEH, SCSR1  		;CLKIN=6 M, CLKOUT=24 M 
		SPLK	#0E8H,  WDCR		;不使能WDT
		LDP		#0
		SPLK	#0000H, IMR			;不使能
		SPLK	#0FFFFH, IFR		;清全部中断标志
		RET
		
*软件延时程序*

DELAY:
		MAR 	*,   AR4
		LAR		AR4, #0800H
		LAR		AR0, #00H
		
DELAY1: SBRK	#1
		NOP
		CMPR	00
		BCND	DELAY1, NTC  
		  
		RET

		END

⌨️ 快捷键说明

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