📄 key.s
字号:
.module key.c
.area text(rom, con, rel)
.dbfile D:\ICCAVR~1\模块化~1\src\key.c
.dbfunc e key_scan _key_scan fc
; keynum -> R12
; x -> R20
; keytemp -> R10
; y -> R22
.even
_key_scan::
xcall push_xgsetF03C
.dbline -1
.dbline 13
; #include "common.h"
;
; unsigned char key_scan(void);
;
; /********************************************************************************************
; * 函数名称:key_scan()
; * 功 能:返回用户按下的键盘所对应的键盘号
; * 入口参数:无
; * 出口参数:返回0表示没有键盘被按动,返回1~24对应被按动的键盘
; * 说 明:用户可根据自己的键盘编号修改该函数
; *********************************************************************************************/
; unsigned char key_scan(void)
; {
.dbline 17
; unsigned char x,y;
; unsigned char keynum;
; unsigned char keytemp;
; for(x=0;x<4;x++)
clr R20
xjmp L5
L2:
.dbline 18
; {
.dbline 19
; PORTB=~(1<<x);
ldi R16,1
mov R17,R20
xcall lsl8
mov R2,R16
com R2
out 0x18,R2
.dbline 20
; keytemp=PINE;
in R10,0x1
.dbline 21
; for(y=0;y<4;y++)
clr R22
xjmp L9
L6:
.dbline 22
; {
.dbline 23
; if(((keytemp>>y)&0x01)!=0)
mov R16,R10
mov R17,R22
xcall lsr8
mov R24,R16
andi R24,1
breq L10
X0:
.dbline 24
; {
.dbline 25
; delay_nms(5);
ldi R16,5
ldi R17,0
xcall _delay_nms
.dbline 26
; if(((keytemp>>y)&0x01)!=0)
mov R16,R10
mov R17,R22
xcall lsr8
mov R24,R16
andi R24,1
breq L12
X1:
.dbline 27
; {
.dbline 28
; keynum=6*x+y;
ldi R24,6
mul R24,R20
mov R12,R0
add R12,R22
.dbline 29
; return (keynum+1);
mov R16,R12
subi R16,255 ; addi 1
xjmp L1
L12:
.dbline 31
; }
; }
L10:
.dbline 32
; }
L7:
.dbline 21
inc R22
L9:
.dbline 21
cpi R22,4
brlo L6
X2:
.dbline 33
; }
L3:
.dbline 17
inc R20
L5:
.dbline 17
cpi R20,4
brlo L2
X3:
.dbline -2
L1:
.dbline 0 ; func end
xjmp pop_xgsetF03C
.dbsym r keynum 12 c
.dbsym r x 20 c
.dbsym r keytemp 10 c
.dbsym r y 22 c
.dbend
; }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -