📄 key.lis
字号:
.module key.c
.area text(rom, con, rel)
0000 .dbfile D:\ICCAVR~1\模块化~1\src\key.c
0000 .dbfunc e key_scan _key_scan fc
0000 ; keynum -> R12
0000 ; x -> R20
0000 ; keytemp -> R10
0000 ; y -> R22
.even
0000 _key_scan::
0000 0E940000 xcall push_xgsetF03C
0004 .dbline -1
0004 .dbline 13
0004 ; #include "common.h"
0004 ;
0004 ; unsigned char key_scan(void);
0004 ;
0004 ; /********************************************************************************************
0004 ; * 函数名称:key_scan()
0004 ; * 功 能:返回用户按下的键盘所对应的键盘号
0004 ; * 入口参数:无
0004 ; * 出口参数:返回0表示没有键盘被按动,返回1~24对应被按动的键盘
0004 ; * 说 明:用户可根据自己的键盘编号修改该函数
0004 ; *********************************************************************************************/
0004 ; unsigned char key_scan(void)
0004 ; {
0004 .dbline 17
0004 ; unsigned char x,y;
0004 ; unsigned char keynum;
0004 ; unsigned char keytemp;
0004 ; for(x=0;x<4;x++)
0004 4427 clr R20
0006 27C0 xjmp L5
0008 L2:
0008 .dbline 18
0008 ; {
0008 .dbline 19
0008 ; PORTB=~(1<<x);
0008 01E0 ldi R16,1
000A 142F mov R17,R20
000C 0E940000 xcall lsl8
0010 202E mov R2,R16
0012 2094 com R2
0014 28BA out 0x18,R2
0016 .dbline 20
0016 ; keytemp=PINE;
0016 A1B0 in R10,0x1
0018 .dbline 21
0018 ; for(y=0;y<4;y++)
0018 6627 clr R22
001A 1AC0 xjmp L9
001C L6:
001C .dbline 22
001C ; {
001C .dbline 23
001C ; if(((keytemp>>y)&0x01)!=0)
001C 0A2D mov R16,R10
001E 162F mov R17,R22
0020 0E940000 xcall lsr8
0024 802F mov R24,R16
0026 8170 andi R24,1
0028 91F0 breq L10
002A X0:
002A .dbline 24
002A ; {
002A .dbline 25
002A ; delay_nms(5);
002A 05E0 ldi R16,5
002C 10E0 ldi R17,0
002E 0E940000 xcall _delay_nms
0032 .dbline 26
0032 ; if(((keytemp>>y)&0x01)!=0)
0032 0A2D mov R16,R10
0034 162F mov R17,R22
0036 0E940000 xcall lsr8
003A 802F mov R24,R16
003C 8170 andi R24,1
003E 39F0 breq L12
0040 X1:
0040 .dbline 27
0040 ; {
0040 .dbline 28
0040 ; keynum=6*x+y;
0040 86E0 ldi R24,6
0042 849F mul R24,R20
0044 C02C mov R12,R0
0046 C60E add R12,R22
0048 .dbline 29
0048 ; return (keynum+1);
0048 0C2D mov R16,R12
004A 0F5F subi R16,255 ; addi 1
004C 06C0 xjmp L1
004E L12:
004E .dbline 31
004E ; }
004E ; }
004E L10:
004E .dbline 32
004E ; }
004E L7:
004E .dbline 21
004E 6395 inc R22
0050 L9:
0050 .dbline 21
0050 6430 cpi R22,4
0052 20F3 brlo L6
0054 X2:
0054 .dbline 33
0054 ; }
0054 L3:
0054 .dbline 17
0054 4395 inc R20
0056 L5:
0056 .dbline 17
0056 4430 cpi R20,4
0058 B8F2 brlo L2
005A X3:
005A .dbline -2
005A L1:
005A .dbline 0 ; func end
005A 0C940000 xjmp pop_xgsetF03C
005E .dbsym r keynum 12 c
005E .dbsym r x 20 c
005E .dbsym r keytemp 10 c
005E .dbsym r y 22 c
005E .dbend
005E ; }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -