📄 keyscan.lis
字号:
.module keyscan.c
.area lit(rom, con, rel)
0000 _Convert::
0000 0001 .byte 0,1
0002 0407 .byte 4,7
0004 0A02 .byte 10,2
0006 0508 .byte 5,8
0008 0B03 .byte 11,3
000A 0609 .byte 6,9
000C 0C .byte 12
000D .dbfile D:\StudyRoom\学习AVR\3510测试ICC版\keyscan.c
000D .dbsym e Convert _Convert A[13:13]kc
.area text(rom, con, rel)
0000 .dbfile D:\StudyRoom\学习AVR\3510测试ICC版\keyscan.c
0000 .dbfunc e Get_Key_Value _Get_Key_Value fc
0000 ; keynum -> y+0
0000 ; keyvalue -> R14
0000 ; i -> R12
.even
0000 _Get_Key_Value::
0000 0E940000 xcall push_gset5x
0004 2197 sbiw R28,1
0006 .dbline -1
0006 .dbline 35
0006 ; /*--------------------------------------------------------------------------------
0006 ; **工程名称:3*4键盘扫描测试程序
0006 ; **编译器:ICCAVR6.31A pro
0006 ; **日期:2005.10.10
0006 ; **作者:coole
0006 ;
0006 ; **芯片类型:M16
0006 ; **时钟频率:内部8M
0006 ;
0006 ; ---------------------------------------------------------------------------------*/
0006 ; #include "keyscan.h"
0006 ; #include "3510i.h"
0006 ; #include "buzzpr.h"
0006 ;
0006 ; extern uchar fBuzzring;
0006 ; extern uchar BuzzringCnt;
0006 ; extern uchar BuzzringTime;
0006 ; extern LCD_BGColor;
0006 ;
0006 ; //**************************************************************
0006 ; const uchar Convert[]={0,1,4,7,10,2,5,8,11,3,6,9,12};
0006 ; uchar flag1;
0006 ; #define fkeyreq 0 //按键请求
0006 ; #define fkeyeff 1 //按键有效
0006 ; #define fkeyhid 2 //按键屏蔽
0006 ; #define fkeysucc 3 //连键判断
0006 ; #define finputeff 4 //按键输入有效
0006 ;
0006 ; uchar MenuLevel;
0006 ; uchar MenuItemMax;
0006 ; uchar MenuSelect[3];
0006 ;
0006 ; uchar KeyNow,KeyOld,KeyCode,KeyCnt;
0006 ; uchar Get_Key_Value(void)
0006 ; {
0006 .dbline 37
0006 ; uchar i,keyvalue,keynum;
0006 ; keynum=0xff;
0006 8FEF ldi R24,255
0008 8883 std y+0,R24
000A .dbline 38
000A ; DDRD = 0xf0;//低四位为输入,高四位为输出
000A 80EF ldi R24,240
000C 81BB out 0x11,R24
000E .dbline 39
000E ; for(i=0;i<3;i++)
000E CC24 clr R12
0010 48C0 xjmp L5
0012 L2:
0012 .dbline 40
0012 ; {
0012 .dbline 41
0012 ; PORTD = 0xff;
0012 8FEF ldi R24,255
0014 82BB out 0x12,R24
0016 .dbline 42
0016 ; clr_bit(PORTD,4+i);//将第i列输出低电平
0016 1C2D mov R17,R12
0018 1C5F subi R17,252 ; addi 4
001A 01E0 ldi R16,1
001C 0E940000 xcall lsl8
0020 202E mov R2,R16
0022 2094 com R2
0024 32B2 in R3,0x12
0026 3220 and R3,R2
0028 32BA out 0x12,R3
002A .dbline 43
002A ; delay_nus(20);
002A 04E1 ldi R16,20
002C 10E0 ldi R17,0
002E F5D1 xcall _delay_nus
0030 .dbline 44
0030 ; keyvalue=PIND&0x0f;
0030 80B3 in R24,0x10
0032 8F70 andi R24,15
0034 E82E mov R14,R24
0036 .dbline 45
0036 ; if(keyvalue!=0x0f)
0036 8F30 cpi R24,15
0038 99F1 breq L6
003A .dbline 46
003A ; {
003A .dbline 47
003A ; switch(keyvalue)
003A A82E mov R10,R24
003C BB24 clr R11
003E C501 movw R24,R10
0040 8730 cpi R24,7
0042 E0E0 ldi R30,0
0044 9E07 cpc R25,R30
0046 29F1 breq L14
0048 8B30 cpi R24,11
004A E0E0 ldi R30,0
004C 9E07 cpc R25,R30
004E C9F0 breq L13
0050 8D30 cpi R24,13
0052 E0E0 ldi R30,0
0054 9E07 cpc R25,R30
0056 69F0 breq L12
0058 8E30 cpi R24,14
005A E0E0 ldi R30,0
005C 9E07 cpc R25,R30
005E 09F0 breq L11
0060 1FC0 xjmp L9
0062 X0:
0062 .dbline 48
0062 ; {
0062 L11:
0062 .dbline 49
0062 ; case 0x0e:keynum=13-(3-i)*4;break;
0062 13E0 ldi R17,3
0064 1C19 sub R17,R12
0066 04E0 ldi R16,4
0068 0102 muls R16,R17
006A 8DE0 ldi R24,13
006C 8019 sub R24,R0
006E 8883 std y+0,R24
0070 .dbline 49
0070 17C0 xjmp L9
0072 L12:
0072 .dbline 50
0072 ; case 0x0d:keynum=14-(3-i)*4;break;
0072 13E0 ldi R17,3
0074 1C19 sub R17,R12
0076 04E0 ldi R16,4
0078 0102 muls R16,R17
007A 8EE0 ldi R24,14
007C 8019 sub R24,R0
007E 8883 std y+0,R24
0080 .dbline 50
0080 0FC0 xjmp L9
0082 L13:
0082 .dbline 51
0082 ; case 0x0b:keynum=15-(3-i)*4;break;
0082 13E0 ldi R17,3
0084 1C19 sub R17,R12
0086 04E0 ldi R16,4
0088 0102 muls R16,R17
008A 8FE0 ldi R24,15
008C 8019 sub R24,R0
008E 8883 std y+0,R24
0090 .dbline 51
0090 07C0 xjmp L9
0092 L14:
0092 .dbline 52
0092 ; case 0x07:keynum=16-(3-i)*4;break;
0092 13E0 ldi R17,3
0094 1C19 sub R17,R12
0096 04E0 ldi R16,4
0098 0102 muls R16,R17
009A 80E1 ldi R24,16
009C 8019 sub R24,R0
009E 8883 std y+0,R24
00A0 .dbline 52
00A0 .dbline 53
00A0 ; default:break;
00A0 L9:
00A0 .dbline 56
00A0 ; }
00A0 ;
00A0 ; }
00A0 L6:
00A0 .dbline 57
00A0 L3:
00A0 .dbline 39
00A0 C394 inc R12
00A2 L5:
00A2 .dbline 39
00A2 8C2D mov R24,R12
00A4 8330 cpi R24,3
00A6 08F4 brsh X1
00A8 B4CF xjmp L2
00AA X1:
00AA .dbline 58
00AA ; }
00AA ; DDRD = 0xff;
00AA 8FEF ldi R24,255
00AC 81BB out 0x11,R24
00AE .dbline 59
00AE ; PORTD = 0xff;
00AE 82BB out 0x12,R24
00B0 .dbline 60
00B0 ; return keynum;//return 0xff;
00B0 0881 ldd R16,y+0
00B2 .dbline -2
00B2 L1:
00B2 2196 adiw R28,1
00B4 0E940000 xcall pop_gset5x
00B8 .dbline 0 ; func end
00B8 0895 ret
00BA .dbsym l keynum 0 c
00BA .dbsym r keyvalue 14 c
00BA .dbsym r i 12 c
00BA .dbend
00BA .dbfunc e Key_Scan _Key_Scan fV
00BA ; temp -> R10
.even
00BA _Key_Scan::
00BA 0E940000 xcall push_gset3x
00BE .dbline -1
00BE .dbline 73
00BE ; }
00BE ;
00BE ; //**************************************//
00BE ; // 函数名称:void Key_Scan()
00BE ; // 输--入:无
00BE ; // 输--出:无
00BE ; // 功--能:按键扫描
00BE ; // 影响标志:
00BE ; // 创--建:
00BE ; // 修--改:
00BE ; //**************************************//
00BE ; void Key_Scan(void)
00BE ; {
00BE .dbline 75
00BE ; uchar temp;
00BE ; temp=Get_Key_Value();
00BE A0DF xcall _Get_Key_Value
00C0 A02E mov R10,R16
00C2 .dbline 76
00C2 ; if(temp!=0xff)
00C2 0F3F cpi R16,255
00C4 51F0 breq L16
00C6 .dbline 77
00C6 ; {
00C6 .dbline 78
00C6 ; KeyNow=Convert[temp];
00C6 80E0 ldi R24,<_Convert
00C8 90E0 ldi R25,>_Convert
00CA EA2D mov R30,R10
00CC FF27 clr R31
00CE E80F add R30,R24
00D0 F91F adc R31,R25
00D2 E491 lpm R30,Z
00D4 E0930300 sts _KeyNow,R30
00D8 .dbline 80
00D8 ; //LCD_WriteEnglishChar((KeyNow+48),10 , 50);
00D8 ; }
00D8 07C0 xjmp L17
00DA L16:
00DA .dbline 82
00DA ; else
00DA ; {
00DA .dbline 83
00DA ; KeyNow=0;
00DA 2224 clr R2
00DC 20920300 sts _KeyNow,R2
00E0 .dbline 84
00E0 ; KeyCode=0;
00E0 20920100 sts _KeyCode,R2
00E4 .dbline 85
00E4 ; KeyOld=0;
00E4 20920200 sts _KeyOld,R2
00E8 .dbline 86
00E8 ; }
00E8 L17:
00E8 .dbline 87
00E8 ; if(KeyNow)
00E8 20900300 lds R2,_KeyNow
00EC 2220 tst R2
00EE F9F0 breq L18
00F0 .dbline 88
00F0 ; {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -