📄 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 OUT_K0 sbi(DDRA,0)
; #define OUT_K1 sbi(DDRA,1)
; #define OUT_K2 sbi(DDRA,2)
; #define OUT_K3 sbi(DDRA,3)
; #define IN_K4 cbi(DDRA,4)
; #define IN_K5 cbi(DDRA,5)
; #define IN_K6 cbi(DDRA,6)
; #define IN_K7 cbi(DDRA,7)
;
; #define SET_K0 sbi(PORTA,0)
; #define SET_K1 sbi(PORTA,1)
; #define SET_K2 sbi(PORTA,2)
; #define SET_K3 sbi(PORTA,3)
; #define CLR_K0 cbi(PORTA,0)
; #define CLR_K1 cbi(PORTA,1)
; #define CLR_K2 cbi(PORTA,2)
; #define CLR_K3 cbi(PORTA,3)
;
; #define SET_K4 sbi(PORTA,4)
; #define SET_K5 sbi(PORTA,5)
; #define SET_K6 sbi(PORTA,6)
; #define SET_K7 sbi(PORTA,7)
;
; #define GET_K4 gbi(PINA,4)
; #define GET_K5 gbi(PINA,5)
; #define GET_K6 gbi(PINA,6)
; #define GET_K7 gbi(PINA,7)
;
; void KeyBoard_setSta(uint8 status)
; {
; //SET_K4;
; //SET_K5;
; //SET_K6;
; //SET_K7;
;
; if( status&0x01 )
; SET_K0;
; else
; CLR_K0;
;
; if( status&0x02 )
; SET_K1;
; else
; CLR_K1;
;
; if( status&0x04 )
; SET_K2;
; else
; CLR_K2;
;
; if( status&0x08 )
; SET_K3;
; else
; CLR_K3;
; }
;
; uint8 KeyBoard_getSta()
; {
; uint8 status = 0xF0;
;
; if( !GET_K4 )
; status = 0xe0;
;
; if( !GET_K5 )
; status = 0xd0;
;
; if( !GET_K6 )
; status = 0xb0;
;
; if( !GET_K7 )
; status = 0x70;
;
.dbline 119
; return status;
; }
;
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
; /*
; #define KEY_DDR DDRA
; #define KEY_PORT PORTA
; #define KEY_PIN PINA
; */
; /*--------------------------------------------------------------------
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
.dbfile E:\ProductPro\M16SD\ICCAVR\MatrixKeyBoard\MatrixKeyBoard\MatrixKey_.c
.dbfunc e KeyBoard_setSta _KeyBoard_setSta fV
; status -> R16
.even
_KeyBoard_setSta::
.dbline -1
.dbline 74
.dbline 80
sbrs R16,0
rjmp L25
.dbline 81
sbi 0x1b,0
xjmp L26
L25:
.dbline 83
cbi 0x1b,0
L26:
.dbline 85
sbrs R16,1
rjmp L27
.dbline 86
sbi 0x1b,1
xjmp L28
L27:
.dbline 88
cbi 0x1b,1
L28:
.dbline 90
sbrs R16,2
rjmp L29
.dbline 91
sbi 0x1b,2
xjmp L30
L29:
.dbline 93
cbi 0x1b,2
L30:
.dbline 95
sbrs R16,3
rjmp L31
.dbline 96
sbi 0x1b,3
xjmp L32
L31:
.dbline 98
cbi 0x1b,3
L32:
.dbline -2
.dbline 99
L24:
.dbline 0 ; func end
ret
.dbsym r status 16 c
.dbend
.dbfunc e KeyBoard_getSta _KeyBoard_getSta fc
; status -> R16
.even
_KeyBoard_getSta::
.dbline -1
.dbline 102
.dbline 103
ldi R16,240
.dbline 105
sbic 0x19,4
rjmp L34
.dbline 106
ldi R16,224
L34:
.dbline 108
sbic 0x19,5
rjmp L36
.dbline 109
ldi R16,208
L36:
.dbline 111
sbic 0x19,6
rjmp L38
.dbline 112
ldi R16,176
L38:
.dbline 114
sbic 0x19,7
rjmp L40
.dbline 115
ldi R16,112
L40:
.dbline 117
.dbline -2
L33:
.dbline 0 ; func end
ret
.dbsym r status 16 c
.dbend
.area lit(rom, con, rel)
_setSta_::
.byte 254,253
.byte 251,247
.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
; i -> R20
; getSta -> R10
; j -> R22
.even
_GetKeyVal::
xcall push_gset4
.dbline -1
.dbline 144
; 函数名称:
; 函数功能:查询按键
; 注意事项:
; 提示说明:
; 输 入:
; 返 回:
; --------------------------------------------------------------------*/
; /*
; 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()
; {
.dbline 147
; uint8 i,j,getSta,keyVal;
;
; for(i=0;i<4;i++)
clr R20
xjmp L46
L43:
.dbline 148
; {
.dbline 150
; //KEY_PORT = setSta_[i];
; KeyBoard_setSta(setSta_[i]);
ldi R24,<_setSta_
ldi R25,>_setSta_
mov R30,R20
clr R31
add R30,R24
adc R31,R25
lpm R16,Z
xcall _KeyBoard_setSta
.dbline 151
; delay50us(1);
ldi R16,1
ldi R17,0
xcall _delay50us
.dbline 153
; //if(KEY_PIN!=setSta_[i])
; getSta = KeyBoard_getSta();
xcall _KeyBoard_getSta
mov R10,R16
.dbline 155
; //if( getSta!=setSta_[i] )
; if( getSta!=0xF0 )
cpi R16,240
breq L47
.dbline 156
; {
.dbline 159
; //getSta = KEY_PIN&0xf0;
; //getSta = KeyBoard_getSta();
; for(j=0;j<4;j++)
clr R22
xjmp L52
L49:
.dbline 160
; if(getSta==getSta_[j])
ldi R24,<_getSta_
ldi R25,>_getSta_
mov R30,R22
clr R31
add R30,R24
adc R31,R25
lpm R30,Z
cp R10,R30
brne L53
.dbline 161
; {
.dbline 162
; keyVal=j+i*4;
ldi R24,4
mul R24,R20
mov R12,R22
add R12,R0
.dbline 163
; return keyVal;
mov R16,R12
xjmp L42
L53:
L50:
.dbline 159
inc R22
L52:
.dbline 159
cpi R22,4
brlo L49
.dbline 165
; }
; }
L47:
.dbline 166
L44:
.dbline 147
inc R20
L46:
.dbline 147
cpi R20,4
brlo L43
.dbline 167
; }
; return 0xFF;
ldi R16,255
.dbline -2
L42:
xcall pop_gset4
.dbline 0 ; func end
ret
.dbsym r keyVal 12 c
.dbsym r i 20 c
.dbsym r getSta 10 c
.dbsym r j 22 c
.dbend
.dbfunc e KeyBoard_init _KeyBoard_init fV
.even
_KeyBoard_init::
.dbline -1
.dbline 178
; }
; /*--------------------------------------------------------------------
; 函数名称:
; 函数功能:
; 注意事项:
; 提示说明:
; 输 入:
; 返 回:
; --------------------------------------------------------------------*/
; void KeyBoard_init()
; {
.dbline 179
; OUT_K0;
sbi 0x1a,0
.dbline 180
; OUT_K1;
sbi 0x1a,1
.dbline 181
; OUT_K2;
sbi 0x1a,2
.dbline 182
; OUT_K3;
sbi 0x1a,3
.dbline 183
; IN_K4;
cbi 0x1a,4
.dbline 184
; IN_K5;
cbi 0x1a,5
.dbline 185
; IN_K6;
cbi 0x1a,6
.dbline 186
; IN_K7;
cbi 0x1a,7
.dbline 187
; SET_K4;
sbi 0x1b,4
.dbline 188
; SET_K5;
sbi 0x1b,5
.dbline 189
; SET_K6;
sbi 0x1b,6
.dbline 190
; SET_K7;
sbi 0x1b,7
.dbline -2
.dbline 191
; }
L55:
.dbline 0 ; func end
ret
.dbend
.dbfunc e main _main fV
; keyVal -> R20
.even
_main::
.dbline -1
.dbline 201
; /*--------------------------------------------------------------------
; 函数名称:
; 函数功能:
; 注意事项:
; 提示说明:
; 输 入:
; 返 回:
; --------------------------------------------------------------------*/
; void main()
; {
.dbline 203
; uint8 keyVal;
; LED_DDR = 0XFF;
ldi R24,255
out 0x17,R24
.dbline 204
; KeyBoard_init();
xcall _KeyBoard_init
xjmp L58
L57:
.dbline 206
; while(1)
; {
.dbline 207
; keyVal = GetKeyVal();
xcall _GetKeyVal
mov R20,R16
.dbline 208
; if( keyVal!=0xFF )
cpi R16,255
breq L60
.dbline 209
; LED_PORT = keyVal;
out 0x18,R16
L60:
.dbline 210
L58:
.dbline 205
xjmp L57
X1:
.dbline -2
.dbline 211
; }
; }
L56:
.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 + -