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

📄 matrixkey.s

📁 ATmega16应用例子
💻 S
字号:
	.module MatrixKey.c
	.area text(rom, con, rel)
	.dbfile E:\ICC_H\SoftExt.H
	.dbfunc e speaData _speaData fV
;              y -> y+4
;              j -> y+0
;              i -> R10
;            len -> R12
;            dat -> y+16
	.even
_speaData::
	xcall push_arg4
	xcall push_gset4
	sbiw R28,8
	ldd R12,y+20
	.dbline -1
	.dbline 116
; /*********************************************************************
; 	微 雪 电 子   WaveShare   http://www.waveShare.net	
; 
; 功能目的:   测试"MatrixKeyBoard"模块
; 
; 目标系统:   基于任何AVR单片机
; 
; 应用软件:   ICCAVR                                               
; 
; 版    本:   Version 1.0
; 
; 圆版时间:   2005-03-01
; 
; 开发人员:   SEE
; 
; 说    明:   若用于商业用途,请保留此段文字或注明代码来源 
; 
; 	深 圳 微 雪 电 子 保 留 所 有 的 版 权
; *********************************************************************/
; 
; /*01010101010101010101010101010101010101010101010101010101010101010101
; ----------------------------------------------------------------------
; 版本更新记录:
; 
; ----------------------------------------------------------------------
; 接入模块: MatrixKeyBoard
; 接口说明: MatrixKeyBoard	M16SmartGuider	   		
; 				K0	---------     PD0
;                 K1	---------     PD1
; 		 	    		.	
; 			    		.
; 				K7  ---------     PD7
; ----------------------------------------------------------------------
; 注意事项:
; 		* 
; ----------------------------------------------------------------------
; 10101010101010101010101010101010101010101010101010101010101010101010*/
; 
; #include <iom16v.H>
; #include "E:\ICC_H\CmmICC.H"
; 
; #define LED_DDR 	DDRB
; #define LED_PORT 	PORTB
; #define KEY_DDR 	DDRA
; #define KEY_PORT 	PORTA
; #define KEY_PIN  	PINA
; 
; /*--------------------------------------------------------------------
; 函数名称:
; 函数功能:查询按键
; 注意事项:
; 提示说明:
; 输    入:
; 返    回:
; --------------------------------------------------------------------*/
; /*
; 	K4-----K5-----K6-----K7
;      |      |      |      |
; 	03H----02H----01H----00H -K0
; 	07H----06H----05H----04H -K1
; 	0BH----0AH----09H----08H -K2
; 	0FH----0EH----0DH----0CH -K3
; */
; const uint8 setSta_[4]={0xfe,0xfd,0xfb,0xf7};		
; const uint8 getSta_[4]={0x70,0xb0,0xd0,0xe0};  
; uint8 GetKeyVal()
; {
; 	uint8 i,j,getSta,keyVal;
; 	
; 	for(i=0;i<4;i++)              
; 	{							
; 		KEY_PORT = setSta_[i];
; 		delay50us(1);       
; 		if(KEY_PIN!=setSta_[i])
; 		{
; 			getSta=KEY_PIN&0xf0;
; 			for(j=0;j<4;j++)    
; 				if(getSta==getSta_[j])                                 
; 				{
; 					keyVal=j+i*4;
; 					return keyVal;
; 				}
; 		}
; 	}
; 	return 0xFF;
; }
; /*--------------------------------------------------------------------
; 函数名称:
; 函数功能:
; 注意事项:
; 提示说明:
; 输    入:
; 返    回:
; --------------------------------------------------------------------*/
; void main()
; {
;  	uint8 keyVal;
; 	LED_DDR = 0XFF;
; 	KEY_DDR = 0X0F;		
; 	while(1)
; 	{
; 	 	keyVal = GetKeyVal();
; 		if( keyVal!=0xFF )		
; 			LED_PORT = keyVal;
; 	}
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
	.dbline 119
; }
; }
; }
	clr R10
	ldi R20,1
	ldi R21,0
	ldi R22,0
	ldi R23,0
	movw R30,R28
	std z+0,R20
	std z+1,R21
	std z+2,R22
	std z+3,R23
	xjmp L5
L2:
	.dbline 120
	.dbline 121
	movw R30,R28
	ldd R2,z+0
	ldd R3,z+1
	ldd R4,z+2
	ldd R5,z+3
	movw R30,R28
	ldd R6,z+16
	ldd R7,z+17
	ldd R8,z+18
	ldd R9,z+19
	st -y,R5
	st -y,R4
	st -y,R3
	st -y,R2
	movw R16,R6
	movw R18,R8
	xcall div32u
	movw R30,R28
	std z+4,R16
	std z+5,R17
	std z+6,R18
	std z+7,R19
	.dbline 122
	ldi R20,10
	ldi R21,0
	ldi R22,0
	ldi R23,0
	movw R30,R28
	ldd R2,z+4
	ldd R3,z+5
	ldd R4,z+6
	ldd R5,z+7
	st -y,R23
	st -y,R22
	st -y,R21
	st -y,R20
	movw R16,R2
	movw R18,R4
	xcall mod32u
	ldi R24,<_dataElem
	ldi R25,>_dataElem
	mov R30,R10
	clr R31
	add R30,R24
	adc R31,R25
	std z+0,R16
	.dbline 123
	movw R30,R28
	ldd R2,z+0
	ldd R3,z+1
	ldd R4,z+2
	ldd R5,z+3
	ldi R20,10
	ldi R21,0
	ldi R22,0
	ldi R23,0
	st -y,R5
	st -y,R4
	st -y,R3
	st -y,R2
	movw R16,R20
	movw R18,R22
	xcall empy32u
	movw R30,R28
	std z+0,R16
	std z+1,R17
	std z+2,R18
	std z+3,R19
	.dbline 124
L3:
	.dbline 119
	inc R10
L5:
	.dbline 119
	cp R10,R12
	brsh X0
	xjmp L2
X0:
	.dbline -2
	.dbline 125
; }
; }
; }
; }
; }
; }
L1:
	adiw R28,8
	xcall pop_gset4
	adiw R28,4
	.dbline 0 ; func end
	ret
	.dbsym l y 4 l
	.dbsym l j 0 l
	.dbsym r i 10 c
	.dbsym r len 12 C
	.dbsym l dat 16 l
	.dbend
	.dbfile E:\ICC_H\HardExt.H
	.dbfunc e delay50us _delay50us fV
;              j -> R20
;              t -> R16,R17
	.even
_delay50us::
	xcall push_gset1
	.dbline -1
	.dbline 98
	.dbline 100
	xjmp L10
L7:
	.dbline 101
	clr R20
	xjmp L14
L11:
	.dbline 102
L12:
	.dbline 101
	inc R20
L14:
	.dbline 101
	cpi R20,70
	brlo L11
L8:
	.dbline 100
	subi R16,1
	sbci R17,0
L10:
	.dbline 100
	clr R2
	clr R3
	cp R2,R16
	cpc R3,R17
	brlt L7
	.dbline -2
	.dbline 103
L6:
	xcall pop_gset1
	.dbline 0 ; func end
	ret
	.dbsym r j 20 c
	.dbsym r t 16 I
	.dbend
	.dbfunc e delay50ms _delay50ms fV
;              i -> R20,R21
;              t -> R16,R17
	.even
_delay50ms::
	xcall push_gset1
	.dbline -1
	.dbline 113
	.dbline 115
	xjmp L19
L16:
	.dbline 116
	clr R20
	clr R21
	xjmp L23
L20:
	.dbline 117
L21:
	.dbline 116
	subi R20,255  ; offset = 1
	sbci R21,255
L23:
	.dbline 116
	cpi R20,162
	ldi R30,205
	cpc R21,R30
	brlo L20
L17:
	.dbline 115
	subi R16,1
	sbci R17,0
L19:
	.dbline 115
	clr R2
	clr R3
	cp R2,R16
	cpc R3,R17
	brlt L16
	.dbline -2
	.dbline 118
L15:
	xcall pop_gset1
	.dbline 0 ; func end
	ret
	.dbsym r i 20 i
	.dbsym r t 16 I
	.dbend
	.area lit(rom, con, rel)
_setSta_::
	.byte 254,253
	.byte 251,247
	.dbfile E:\ProductPro\M16SD\ICCAVR\MatrixKeyBoard\MatrixKeyBoard\MatrixKey.c
	.dbsym e setSta_ _setSta_ A[4:4]kc
_getSta_::
	.byte 'p,176
	.byte 208,224
	.dbsym e getSta_ _getSta_ A[4:4]kc
	.area text(rom, con, rel)
	.dbfile E:\ProductPro\M16SD\ICCAVR\MatrixKeyBoard\MatrixKeyBoard\MatrixKey.c
	.dbfunc e GetKeyVal _GetKeyVal fc
;         keyVal -> R12
;         getSta -> R10
;              i -> R20
;              j -> R22
	.even
_GetKeyVal::
	xcall push_gset4
	.dbline -1
	.dbline 67
	.dbline 70
	clr R20
	xjmp L28
L25:
	.dbline 71
	.dbline 72
	ldi R24,<_setSta_
	ldi R25,>_setSta_
	mov R30,R20
	clr R31
	add R30,R24
	adc R31,R25
	lpm R30,Z
	out 0x1b,R30
	.dbline 73
	ldi R16,1
	ldi R17,0
	xcall _delay50us
	.dbline 74
	ldi R24,<_setSta_
	ldi R25,>_setSta_
	mov R30,R20
	clr R31
	add R30,R24
	adc R31,R25
	lpm R30,Z
	in R2,0x19
	cp R2,R30
	breq L29
	.dbline 75
	.dbline 76
	in R24,0x19
	andi R24,240
	mov R10,R24
	.dbline 77
	clr R22
	xjmp L34
L31:
	.dbline 78
	ldi R24,<_getSta_
	ldi R25,>_getSta_
	mov R30,R22
	clr R31
	add R30,R24
	adc R31,R25
	lpm R30,Z
	cp R10,R30
	brne L35
	.dbline 79
	.dbline 80
	ldi R24,4
	mul R24,R20
	mov R12,R22
	add R12,R0
	.dbline 81
	mov R16,R12
	xjmp L24
L35:
L32:
	.dbline 77
	inc R22
L34:
	.dbline 77
	cpi R22,4
	brlo L31
	.dbline 83
L29:
	.dbline 84
L26:
	.dbline 70
	inc R20
L28:
	.dbline 70
	cpi R20,4
	brlo L25
	.dbline 85
	ldi R16,255
	.dbline -2
L24:
	xcall pop_gset4
	.dbline 0 ; func end
	ret
	.dbsym r keyVal 12 c
	.dbsym r getSta 10 c
	.dbsym r i 20 c
	.dbsym r j 22 c
	.dbend
	.dbfunc e main _main fV
;         keyVal -> R20
	.even
_main::
	.dbline -1
	.dbline 96
	.dbline 98
	ldi R24,255
	out 0x17,R24
	.dbline 99
	ldi R24,15
	out 0x1a,R24
	xjmp L39
L38:
	.dbline 101
	.dbline 102
	xcall _GetKeyVal
	mov R20,R16
	.dbline 103
	cpi R16,255
	breq L41
	.dbline 104
	out 0x18,R16
L41:
	.dbline 105
L39:
	.dbline 100
	xjmp L38
X1:
	.dbline -2
	.dbline 106
L37:
	.dbline 0 ; func end
	ret
	.dbsym r keyVal 20 c
	.dbend
	.area bss(ram, con, rel)
	.dbfile E:\ProductPro\M16SD\ICCAVR\MatrixKeyBoard\MatrixKeyBoard\MatrixKey.c
_dataElem::
	.blkb 6
	.dbfile E:\ICC_H\SoftExt.H
	.dbsym e dataElem _dataElem A[6:6]c

⌨️ 快捷键说明

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