📄 matrixkey.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 + -