📄 kbscan.lis
字号:
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 + -