📄 keyboard.lst
字号:
(0129) }
(0130) default:{
(0131) if (shift==0)
018D 9020007A LDS R2,0x7A
018F 2022 TST R2
0190 F529 BNE 0x01B6
(0132) {
(0133) for(i = 0;unshifted[i][0]!=sc && unshifted[i][0]; i++);
0191 24AA CLR R10
0192 C001 RJMP 0x0194
0193 94A3 INC R10
0194 E082 LDI R24,2
0195 9D8A MUL R24,R10
0196 01F0 MOVW R30,R0
0197 E584 LDI R24,0x54
0198 E090 LDI R25,0
0199 0FE8 ADD R30,R24
019A 1FF9 ADC R31,R25
019B 9024 LPM R2,0(Z)
019C 2433 CLR R3
019D 142C CP R2,R12
019E F011 BEQ 0x01A1
019F 2022 TST R2
01A0 F791 BNE 0x0193
(0134) if (unshifted[i][0] == sc)
01A1 E082 LDI R24,2
01A2 9D8A MUL R24,R10
01A3 01F0 MOVW R30,R0
01A4 E584 LDI R24,0x54
01A5 E090 LDI R25,0
01A6 0FE8 ADD R30,R24
01A7 1FF9 ADC R31,R25
01A8 91E4 LPM R30,0(Z)
01A9 15EC CP R30,R12
01AA F009 BEQ 0x01AC
01AB C02D RJMP 0x01D9
(0135) put_kbbuff(unshifted[i][1]);
01AC E082 LDI R24,2
01AD 9D8A MUL R24,R10
01AE 01F0 MOVW R30,R0
01AF E585 LDI R24,0x55
01B0 E090 LDI R25,0
01B1 0FE8 ADD R30,R24
01B2 1FF9 ADC R31,R25
01B3 9104 LPM R16,0(Z)
01B4 DF2B RCALL _put_kbbuff
(0136) }
01B5 C023 RJMP 0x01D9
(0137) else
(0138) {
(0139) for(i = 0;shifted[i][0]!=sc && shifted[i][0]; i++);
01B6 24AA CLR R10
01B7 C001 RJMP 0x01B9
01B8 94A3 INC R10
01B9 E082 LDI R24,2
01BA 9D8A MUL R24,R10
01BB 01F0 MOVW R30,R0
01BC ED8C LDI R24,0xDC
01BD E090 LDI R25,0
01BE 0FE8 ADD R30,R24
01BF 1FF9 ADC R31,R25
01C0 9024 LPM R2,0(Z)
01C1 2433 CLR R3
01C2 142C CP R2,R12
01C3 F011 BEQ 0x01C6
01C4 2022 TST R2
01C5 F791 BNE 0x01B8
(0140) if (shifted[i][0] == sc)
01C6 E082 LDI R24,2
01C7 9D8A MUL R24,R10
01C8 01F0 MOVW R30,R0
01C9 ED8C LDI R24,0xDC
01CA E090 LDI R25,0
01CB 0FE8 ADD R30,R24
01CC 1FF9 ADC R31,R25
01CD 91E4 LPM R30,0(Z)
01CE 15EC CP R30,R12
01CF F449 BNE 0x01D9
(0141) {
(0142) put_kbbuff(shifted[i][1]);
01D0 E082 LDI R24,2
01D1 9D8A MUL R24,R10
01D2 01F0 MOVW R30,R0
01D3 ED8D LDI R24,0xDD
01D4 E090 LDI R25,0
01D5 0FE8 ADD R30,R24
01D6 1FF9 ADC R31,R25
01D7 9104 LPM R16,0(Z)
01D8 DF07 RCALL _put_kbbuff
(0143) }
(0144) }
(0145) }
(0146) }
(0147) }
01D9 940E0251 CALL pop_gset5x
01DB 9508 RET
_int1_isr:
01DC 940E025F CALL push_lset
01DE 940E0254 CALL push_gset3x
(0148) #pragma interrupt_handler int1_isr:iv_INT1
(0149) //键盘数据读取中断程序
(0150) void int1_isr(void)
(0151) {
(0152) static unsigned char data;
(0153) switch (bitcount)
01E0 90A000BE LDS R10,_bitcount
01E2 24BB CLR R11
01E3 01C5 MOVW R24,R10
01E4 3081 CPI R24,1
01E5 E0E0 LDI R30,0
01E6 079E CPC R25,R30
01E7 F0E9 BEQ 0x0205
01E8 3082 CPI R24,2
01E9 E0E0 LDI R30,0
01EA 079E CPC R25,R30
01EB F099 BEQ 0x01FF
01EC 3081 CPI R24,1
01ED E0E0 LDI R30,0
01EE 079E CPC R25,R30
01EF F13C BLT 0x0217
01F0 01C5 MOVW R24,R10
01F1 308B CPI R24,0xB
01F2 E0E0 LDI R30,0
01F3 079E CPC R25,R30
01F4 F009 BEQ 0x01F6
01F5 C021 RJMP 0x0217
(0154) {
(0155) case 11:{
(0156) if ((PIN_KB&(1<<DATAPIN))!=0)
01F6 9B82 SBIS 0x10,2
01F7 C001 RJMP 0x01F9
(0157) return;
01F8 C02E RJMP 0x0227
(0158) else
(0159) bitcount--;
01F9 918000BE LDS R24,_bitcount
01FB 5081 SUBI R24,1
01FC 938000BE STS _bitcount,R24
(0160) break;}
01FE C028 RJMP 0x0227
(0161) case 2:{
(0162) bitcount--;
01FF 918000BE LDS R24,_bitcount
0201 5081 SUBI R24,1
0202 938000BE STS _bitcount,R24
(0163) break;}
0204 C022 RJMP 0x0227
(0164) case 1:{
(0165) bitcount--;
0205 918000BE LDS R24,_bitcount
0207 5081 SUBI R24,1
0208 938000BE STS _bitcount,R24
(0166) if ((PIN_KB&(1<<DATAPIN))==0)
020A 9982 SBIC 0x10,2
020B C004 RJMP 0x0210
(0167) {
(0168) bitcount=11;
020C E08B LDI R24,0xB
020D 938000BE STS _bitcount,R24
(0169) return;
020F C017 RJMP 0x0227
(0170) }
(0171) else
(0172) {
(0173) bitcount=11;
0210 E08B LDI R24,0xB
0211 938000BE STS _bitcount,R24
(0174) decode(data);
0213 9100007D LDS R16,0x7D
0215 DF2D RCALL _decode
(0175) }
(0176) break;}
0216 C010 RJMP 0x0227
(0177) default:{
(0178) data = (data >> 1);
0217 9020007D LDS R2,0x7D
0219 9426 LSR R2
021A 9220007D STS 0x7D,R2
(0179) if((PIN_KB&(1<<DATAPIN))!=0)
021C 9B82 SBIS 0x10,2
021D C004 RJMP 0x0222
(0180) data|=0x80;
021E 2D82 MOV R24,R2
021F 6880 ORI R24,0x80
0220 9380007D STS 0x7D,R24
(0181) bitcount--;
0222 918000BE LDS R24,_bitcount
0224 5081 SUBI R24,1
0225 938000BE STS _bitcount,R24
(0182) }
(0183) }
(0184) }
0227 940E0245 CALL pop_gset3x
0229 940E0276 CALL pop_lset
022B 9518 RETI
(0185) //PC键盘演示程序,SHIFT键和按键同时按下时为大写
(0186) void main()
(0187) {
(0188) unsigned char key;
(0189)
(0190) uart_init();
_main:
key --> R10
022C DEE3 RCALL _uart_init
(0191) init_kb();
022D DF06 RCALL _init_kb
(0192) puts("双龙电子PC键盘演示程序:");
022E E602 LDI R16,0x62
022F E010 LDI R17,0
0230 DEEC RCALL _puts
(0193) putchar(0x0d);
0231 E00D LDI R16,0xD
0232 DEE6 RCALL _putchar
(0194) putchar(0x0d);
0233 E00D LDI R16,0xD
0234 DEE4 RCALL _putchar
0235 C00D RJMP 0x0243
(0195) while(1)
(0196) {
(0197)
(0198) key=get_char();
0236 DEBD RCALL _get_char
0237 2EA0 MOV R10,R16
(0199) if (key!=0)
0238 2300 TST R16
0239 F049 BEQ 0x0243
(0200) {
(0201) if (key==0x0d)
023A 300D CPI R16,0xD
023B F429 BNE 0x0241
(0202) {
(0203) putchar('\n');
023C E00A LDI R16,0xA
023D DEDB RCALL _putchar
(0204) putchar(key);
023E 2D0A MOV R16,R10
023F DED9 RCALL _putchar
(0205) }
0240 C002 RJMP 0x0243
(0206) else
(0207) putchar(key);
0241 2D0A MOV R16,R10
0242 DED6 RCALL _putchar
0243 CFF2 RJMP 0x0236
(0208) }
(0209) }
(0210) }
FILE: <library>
0244 9508 RET
pop_gset3x:
0245 E0E4 LDI R30,4
popx:
0246 90A9 LD R10,Y+
0247 90B9 LD R11,Y+
0248 FDE2 SBRC R30,2
0249 9508 RET
024A 90C9 LD R12,Y+
024B 90D9 LD R13,Y+
024C FDE3 SBRC R30,3
024D 9508 RET
024E 90E9 LD R14,Y+
024F 90F9 LD R15,Y+
0250 9508 RET
pop_gset5x:
0251 27EE CLR R30
0252 940C0246 JMP popx
push_gset3x:
0254 92BA ST R11,-Y
0255 92AA ST R10,-Y
0256 9508 RET
push_gset4x:
0257 92DA ST R13,-Y
0258 92CA ST R12,-Y
0259 940C0254 JMP push_gset3x
push_gset5x:
025B 92FA ST R15,-Y
025C 92EA ST R14,-Y
025D 940C0257 JMP push_gset4x
push_lset:
025F 93FA ST R31,-Y
0260 93EA ST R30,-Y
0261 93BA ST R27,-Y
0262 93AA ST R26,-Y
0263 939A ST R25,-Y
0264 938A ST R24,-Y
0265 933A ST R19,-Y
0266 932A ST R18,-Y
0267 931A ST R17,-Y
0268 930A ST R16,-Y
0269 929A ST R9,-Y
026A 928A ST R8,-Y
026B 927A ST R7,-Y
026C 926A ST R6,-Y
026D 925A ST R5,-Y
026E 924A ST R4,-Y
026F 923A ST R3,-Y
0270 922A ST R2,-Y
0271 921A ST R1,-Y
0272 920A ST R0,-Y
0273 B60F IN R0,0x3F
0274 920A ST R0,-Y
0275 9508 RET
pop_lset:
0276 9009 LD R0,Y+
0277 BE0F OUT 0x3F,R0
0278 9009 LD R0,Y+
0279 9019 LD R1,Y+
027A 9029 LD R2,Y+
027B 9039 LD R3,Y+
027C 9049 LD R4,Y+
027D 9059 LD R5,Y+
027E 9069 LD R6,Y+
027F 9079 LD R7,Y+
0280 9089 LD R8,Y+
0281 9099 LD R9,Y+
0282 9109 LD R16,Y+
0283 9119 LD R17,Y+
0284 9129 LD R18,Y+
0285 9139 LD R19,Y+
0286 9189 LD R24,Y+
0287 9199 LD R25,Y+
0288 91A9 LD R26,Y+
0289 91B9 LD R27,Y+
028A 91E9 LD R30,Y+
028B 91F9 LD R31,Y+
028C 9508 RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -