⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 keyscan.lis

📁 3510 TFT彩屏的测试程序
💻 LIS
📖 第 1 页 / 共 4 页
字号:
                        .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 + -