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

📄 kbscan.lis

📁 用ICC写的ATMega8的4X4键盘驱动程序
💻 LIS
📖 第 1 页 / 共 2 页
字号:
 0082           ;                       /*行坐标*/
 0082           ;                       switch(row)
 0082 A62E              mov R10,R22
 0084 BB24              clr R11
 0086 C501              movw R24,R10
 0088 803B              cpi R24,176
 008A E0E0              ldi R30,0
 008C 9E07              cpc R25,R30
 008E E9F0              breq L25
 0090 80EB              ldi R24,176
 0092 8A15              cp R24,R10
 0094 9B05              cpc R25,R11
 0096 34F0              brlt L28
 0098           L27:
 0098 C501              movw R24,R10
 009A 8037              cpi R24,112
 009C E0E0              ldi R30,0
 009E 9E07              cpc R25,R30
 00A0 B1F0              breq L26
 00A2 17C0              rjmp L20
 00A4           L28:
 00A4 C501              movw R24,R10
 00A6 803D              cpi R24,208
 00A8 E0E0              ldi R30,0
 00AA 9E07              cpc R25,R30
 00AC 61F0              breq L24
 00AE 803D              cpi R24,208
 00B0 E0E0              ldi R30,0
 00B2 9E07              cpc R25,R30
 00B4 74F0              brlt L20
 00B6           L29:
 00B6 C501              movw R24,R10
 00B8 803E              cpi R24,224
 00BA E0E0              ldi R30,0
 00BC 9E07              cpc R25,R30
 00BE 09F0              breq L23
 00C0 08C0              rjmp L20
 00C2           X0:
 00C2                   .dbline 81
 00C2           ;                       {
 00C2           L23:
 00C2                   .dbline 82
 00C2           ;                       case 0xe0: row = 0;
 00C2 6627              clr R22
 00C4                   .dbline 83
 00C4           ;                               break;
 00C4 07C0              rjmp L21
 00C6           L24:
 00C6                   .dbline 84
 00C6           ;                       case 0xd0: row = 1;
 00C6 61E0              ldi R22,1
 00C8                   .dbline 85
 00C8           ;                               break;
 00C8 05C0              rjmp L21
 00CA           L25:
 00CA                   .dbline 86
 00CA           ;                       case 0xb0: row = 2;
 00CA 62E0              ldi R22,2
 00CC                   .dbline 87
 00CC           ;                               break;
 00CC 03C0              rjmp L21
 00CE           L26:
 00CE                   .dbline 88
 00CE           ;                       case 0x70: row = 3;
 00CE 63E0              ldi R22,3
 00D0                   .dbline 89
 00D0           ;                               break;
 00D0 01C0              rjmp L21
 00D2           L20:
 00D2                   .dbline 90
 00D2           ;                       default: row=4; //未知数值
 00D2 64E0              ldi R22,4
 00D4                   .dbline 91
 00D4           ;                       }
 00D4           L21:
 00D4                   .dbline 93
 00D4           ;                       /*列坐标*/
 00D4           ;                       switch(col)
 00D4 A42E              mov R10,R20
 00D6 BB24              clr R11
 00D8 C501              movw R24,R10
 00DA 8730              cpi R24,7
 00DC E0E0              ldi R30,0
 00DE 9E07              cpc R25,R30
 00E0 99F0              breq L36
 00E2 8B30              cpi R24,11
 00E4 E0E0              ldi R30,0
 00E6 9E07              cpc R25,R30
 00E8 69F0              breq L35
 00EA 8D30              cpi R24,13
 00EC E0E0              ldi R30,0
 00EE 9E07              cpc R25,R30
 00F0 39F0              breq L34
 00F2 8E30              cpi R24,14
 00F4 E0E0              ldi R30,0
 00F6 9E07              cpc R25,R30
 00F8 09F0              breq L33
 00FA 08C0              rjmp L30
 00FC           X1:
 00FC                   .dbline 94
 00FC           ;                       {
 00FC           L33:
 00FC                   .dbline 95
 00FC           ;                       case 0x0e: col = 0;
 00FC 4427              clr R20
 00FE                   .dbline 96
 00FE           ;                               break;
 00FE 07C0              rjmp L31
 0100           L34:
 0100                   .dbline 97
 0100           ;                       case 0x0d: col = 1;
 0100 41E0              ldi R20,1
 0102                   .dbline 98
 0102           ;                               break;
 0102 05C0              rjmp L31
 0104           L35:
 0104                   .dbline 99
 0104           ;                       case 0x0b: col = 2;
 0104 42E0              ldi R20,2
 0106                   .dbline 100
 0106           ;                               break;
 0106 03C0              rjmp L31
 0108           L36:
 0108                   .dbline 101
 0108           ;                       case 0x07: col = 3;
 0108 43E0              ldi R20,3
 010A                   .dbline 102
 010A           ;                               break;
 010A 01C0              rjmp L31
 010C           L30:
 010C                   .dbline 103
 010C           ;                       default: col=4; //未知数值
 010C 44E0              ldi R20,4
 010E                   .dbline 104
 010E           ;                       }
 010E           L31:
 010E                   .dbline 105
 010E           ;               }
 010E           L16:
 010E                   .dbline 106
 010E           ;       }
 010E           L14:
 010E                   .dbline 107
 010E           ;       if((row!=4)&(col!=4))
 010E 6430              cpi R22,4
 0110 21F0              breq L39
 0112 81E0              ldi R24,1
 0114 90E0              ldi R25,0
 0116 6C01              movw R12,R24
 0118 02C0              rjmp L40
 011A           L39:
 011A CC24              clr R12
 011C DD24              clr R13
 011E           L40:
 011E 4430              cpi R20,4
 0120 21F0              breq L41
 0122 81E0              ldi R24,1
 0124 90E0              ldi R25,0
 0126 5C01              movw R10,R24
 0128 02C0              rjmp L42
 012A           L41:
 012A AA24              clr R10
 012C BB24              clr R11
 012E           L42:
 012E 1601              movw R2,R12
 0130 2A20              and R2,R10
 0132 3B20              and R3,R11
 0134 2220              tst R2
 0136 11F4              brne X2
 0138 3320              tst R3
 013A 29F0              breq L37
 013C           X2:
 013C                   .dbline 108
 013C           ;               return row*4+col;
 013C 84E0              ldi R24,4
 013E 869F              mul R24,R22
 0140 002D              mov R16,R0
 0142 040F              add R16,R20
 0144 01C0              rjmp L13
 0146           L37:
 0146                   .dbline 109
 0146           ;       else return 16; //错误返回
 0146 00E1              ldi R16,16
 0148                   .dbline -2
 0148           L13:
 0148 00D0              rcall pop_gset4
 014A                   .dbline 0 ; func end
 014A 0895              ret
 014C                   .dbsym r col 20 c
 014C                   .dbsym r row 22 c
 014C                   .dbend
 014C                   .dbfunc e main _main fV
 014C           ;            key -> R20
                        .even
 014C           _main::
 014C                   .dbline -1
 014C                   .dbline 114
 014C           ; }
 014C           ; 
 014C           ; /*MAIN*/
 014C           ; void main(void)
 014C           ; {
 014C                   .dbline 116
 014C           ;       UCHAR key;
 014C           ;       DDRD = 0xff;
 014C 8FEF              ldi R24,255
 014E 81BB              out 0x11,R24
 0150 0DC0              rjmp L45
 0152           L44:
 0152                   .dbline 117
 0152           ;       while(1){
 0152                   .dbline 118
 0152           ;               key = kbscan();
 0152 7DDF              rcall _kbscan
 0154 402F              mov R20,R16
 0156                   .dbline 119
 0156           ;               if(key!=16)
 0156 0031              cpi R16,16
 0158 49F0              breq L47
 015A                   .dbline 120
 015A           ;                       PORTD = ~digital[key];  //数码管输出相应数字
 015A 80E0              ldi R24,<_digital
 015C 90E0              ldi R25,>_digital
 015E E42F              mov R30,R20
 0160 FF27              clr R31
 0162 E80F              add R30,R24
 0164 F91F              adc R31,R25
 0166 E491              lpm R30,Z
 0168 E095              com R30
 016A E2BB              out 0x12,R30
 016C           L47:
 016C                   .dbline 121
 016C           L45:
 016C                   .dbline 117
 016C F2CF              rjmp L44
 016E           X5:
 016E                   .dbline -2
 016E           L43:
 016E                   .dbline 0 ; func end
 016E 0895              ret
 0170                   .dbsym r key 20 c
 0170                   .dbend

⌨️ 快捷键说明

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