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

📄 getkey.lis

📁 4X4键盘扫描程序
💻 LIS
📖 第 1 页 / 共 2 页
字号:
 00F8 09F4              brne X5
 00FA 49C0              xjmp L27
 00FC           X5:
 00FC                   .dbline 76
 00FC           ;               {
 00FC                   .dbline 77
 00FC           ;                       delay_nms(15);//延时消抖动
 00FC 0FE0              ldi R16,15
 00FE 10E0              ldi R17,0
 0100 6BD0              xcall _delay_nms
 0102                   .dbline 78
 0102           ;                       tem=key_port_pin&0xf0;//再读键盘
 0102 80B3              in R24,0x10
 0104 807F              andi R24,240
 0106 A82E              mov R10,R24
 0108                   .dbline 79
 0108           ;                       if(tem!=0xf0)//确认按键按下
 0108 803F              cpi R24,240
 010A 09F4              brne X6
 010C 40C0              xjmp L29
 010E           X6:
 010E                   .dbline 80
 010E           ;                       {
 010E                   .dbline 81
 010E           ;                               tem&=0xf0;
 010E 807F              andi R24,240
 0110 A82E              mov R10,R24
 0112                   .dbline 82
 0112           ;                               switch(tem)//计算键值
 0112 482F              mov R20,R24
 0114 5527              clr R21
 0116 403B              cpi R20,176
 0118 E0E0              ldi R30,0
 011A 5E07              cpc R21,R30
 011C F9F0              breq L35
 011E 80EB              ldi R24,176
 0120 90E0              ldi R25,0
 0122 8417              cp R24,R20
 0124 9507              cpc R25,R21
 0126 2CF0              brlt L39
 0128           L38:
 0128 4037              cpi R20,112
 012A E0E0              ldi R30,0
 012C 5E07              cpc R21,R30
 012E 71F0              breq L34
 0130 2CC0              xjmp L32
 0132           L39:
 0132 403D              cpi R20,208
 0134 E0E0              ldi R30,0
 0136 5E07              cpc R21,R30
 0138 C9F0              breq L36
 013A 403D              cpi R20,208
 013C E0E0              ldi R30,0
 013E 5E07              cpc R21,R30
 0140 24F1              brlt L32
 0142           L40:
 0142 403E              cpi R20,224
 0144 E0E0              ldi R30,0
 0146 5E07              cpc R21,R30
 0148 C9F0              breq L37
 014A 1FC0              xjmp L32
 014C           X4:
 014C                   .dbline 83
 014C           ;                               {
 014C           L34:
 014C                   .dbline 84
 014C           ;                                       case 0x70:tem=15-(3-i)*4;break;//这里可以改tem=11-(2-i)*4,不过一改4*4键就不适用了^___^
 014C 13E0              ldi R17,3
 014E 161B              sub R17,R22
 0150 04E0              ldi R16,4
 0152 0102              muls R16,R17
 0154 8FE0              ldi R24,15
 0156 A82E              mov R10,R24
 0158 A018              sub R10,R0
 015A                   .dbline 84
 015A 17C0              xjmp L32
 015C           L35:
 015C                   .dbline 85
 015C           ;                                       case 0xb0:tem=14-(3-i)*4;break;
 015C 13E0              ldi R17,3
 015E 161B              sub R17,R22
 0160 04E0              ldi R16,4
 0162 0102              muls R16,R17
 0164 8EE0              ldi R24,14
 0166 A82E              mov R10,R24
 0168 A018              sub R10,R0
 016A                   .dbline 85
 016A 0FC0              xjmp L32
 016C           L36:
 016C                   .dbline 86
 016C           ;                                       case 0xd0:tem=13-(3-i)*4;break;
 016C 13E0              ldi R17,3
 016E 161B              sub R17,R22
 0170 04E0              ldi R16,4
 0172 0102              muls R16,R17
 0174 8DE0              ldi R24,13
 0176 A82E              mov R10,R24
 0178 A018              sub R10,R0
 017A                   .dbline 86
 017A 07C0              xjmp L32
 017C           L37:
 017C                   .dbline 87
 017C           ;                                       case 0xe0:tem=12-(3-i)*4;break;
 017C 13E0              ldi R17,3
 017E 161B              sub R17,R22
 0180 04E0              ldi R16,4
 0182 0102              muls R16,R17
 0184 8CE0              ldi R24,12
 0186 A82E              mov R10,R24
 0188 A018              sub R10,R0
 018A                   .dbline 87
 018A                   .dbline 88
 018A           ;                                       default:break;
 018A           L32:
 018A                   .dbline 90
 018A           ;                                       }
 018A           ;                                       return tem;//返回0~11号键
 018A 0A2D              mov R16,R10
 018C 07C0              xjmp L22
 018E           L29:
 018E                   .dbline 92
 018E           ;                               }
 018E           ;                       }
 018E           L27:
 018E                   .dbline 93
 018E 8FEF              ldi R24,255
 0190 82BB              out 0x12,R24
 0192                   .dbline 94
 0192           L24:
 0192                   .dbline 70
 0192 6395              inc R22
 0194           L26:
 0194                   .dbline 70
 0194 6330              cpi R22,3
 0196 08F4              brsh X7
 0198 A1CF              xjmp L23
 019A           X7:
 019A                   .dbline 95
 019A           ;                       key_port=0xff;
 019A           ;               }
 019A           ;               return 0xff;//无按键按下则返回0xff
 019A 0FEF              ldi R16,255
 019C                   .dbline -2
 019C           L22:
 019C 0E940000          xcall pop_gset3
 01A0                   .dbline 0 ; func end
 01A0 0895              ret
 01A2                   .dbsym r i 22 c
 01A2                   .dbsym r tem 10 c
 01A2                   .dbend
 01A2                   .dbfunc e delay_1us _delay_1us fV
                        .even
 01A2           _delay_1us::
 01A2                   .dbline -1
 01A2                   .dbline 101
 01A2           ;       }
 01A2           ; 
 01A2           ; /*--------------------------------------------延时函数------------------------------------*/                                  
 01A2           ; //1us延时函数
 01A2           ; void delay_1us(void)
 01A2           ; {
 01A2                   .dbline 102
 01A2           ;       NOP();
 01A2 0000              nop
 01A4                   .dbline -2
 01A4           L41:
 01A4                   .dbline 0 ; func end
 01A4 0895              ret
 01A6                   .dbend
 01A6                   .dbfunc e delay_nus _delay_nus fV
 01A6           ;              i -> R20,R21
 01A6           ;              n -> R22,R23
                        .even
 01A6           _delay_nus::
 01A6 0E940000          xcall push_gset2
 01AA B801              movw R22,R16
 01AC                   .dbline -1
 01AC                   .dbline 107
 01AC           ; }
 01AC           ; 
 01AC           ; //n us 延时函数
 01AC           ; void delay_nus(unsigned int n)
 01AC           ; {
 01AC                   .dbline 109
 01AC 4427              clr R20
 01AE 5527              clr R21
 01B0 03C0              xjmp L46
 01B2           L43:
 01B2                   .dbline 109
 01B2 F7DF              xcall _delay_1us
 01B4           L44:
 01B4                   .dbline 109
 01B4 4F5F              subi R20,255  ; offset = 1
 01B6 5F4F              sbci R21,255
 01B8           L46:
 01B8                   .dbline 109
 01B8           ;       unsigned int i;
 01B8           ;       for(i=0;i<n;i++)delay_1us();
 01B8 4617              cp R20,R22
 01BA 5707              cpc R21,R23
 01BC D0F3              brlo L43
 01BE                   .dbline -2
 01BE           L42:
 01BE 0E940000          xcall pop_gset2
 01C2                   .dbline 0 ; func end
 01C2 0895              ret
 01C4                   .dbsym r i 20 i
 01C4                   .dbsym r n 22 i
 01C4                   .dbend
 01C4                   .dbfunc e delay_1ms _delay_1ms fV
 01C4           ;              i -> R16,R17
                        .even
 01C4           _delay_1ms::
 01C4                   .dbline -1
 01C4                   .dbline 114
 01C4           ; }
 01C4           ; 
 01C4           ; //1ms延时函数
 01C4           ; void delay_1ms(void)
 01C4           ; {
 01C4                   .dbline 116
 01C4 0027              clr R16
 01C6 1127              clr R17
 01C8 02C0              xjmp L51
 01CA           L48:
 01CA                   .dbline 116
 01CA           L49:
 01CA                   .dbline 116
 01CA 0F5F              subi R16,255  ; offset = 1
 01CC 1F4F              sbci R17,255
 01CE           L51:
 01CE                   .dbline 116
 01CE           ;       unsigned int i;
 01CE           ;       for(i=0;i<600;i++);
 01CE 0835              cpi R16,88
 01D0 E2E0              ldi R30,2
 01D2 1E07              cpc R17,R30
 01D4 D0F3              brlo L48
 01D6                   .dbline -2
 01D6           L47:
 01D6                   .dbline 0 ; func end
 01D6 0895              ret
 01D8                   .dbsym r i 16 i
 01D8                   .dbend
 01D8                   .dbfunc e delay_nms _delay_nms fV
 01D8           ;              i -> R20,R21
 01D8           ;              n -> R22,R23
                        .even
 01D8           _delay_nms::
 01D8 0E940000          xcall push_gset2
 01DC B801              movw R22,R16
 01DE                   .dbline -1
 01DE                   .dbline 121
 01DE           ; }
 01DE           ; 
 01DE           ; //n ms延时函数
 01DE           ; void delay_nms(unsigned int n)
 01DE           ; {
 01DE                   .dbline 123
 01DE 4427              clr R20
 01E0 5527              clr R21
 01E2 03C0              xjmp L56
 01E4           L53:
 01E4                   .dbline 123
 01E4 EFDF              xcall _delay_1ms
 01E6           L54:
 01E6                   .dbline 123
 01E6 4F5F              subi R20,255  ; offset = 1
 01E8 5F4F              sbci R21,255
 01EA           L56:
 01EA                   .dbline 123
 01EA           ;       unsigned int i;
 01EA           ;       for(i=0;i<n;i++)delay_1ms();
 01EA 4617              cp R20,R22
 01EC 5707              cpc R21,R23
 01EE D0F3              brlo L53
 01F0                   .dbline -2
 01F0           L52:
 01F0 0E940000          xcall pop_gset2
 01F4                   .dbline 0 ; func end
 01F4 0895              ret
 01F6                   .dbsym r i 20 i
 01F6                   .dbsym r n 22 i
 01F6                   .dbend

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -