📄 keyboard.lis
字号:
0070 .dbline 77
0070 ; }
0070 L9:
0070 .dbline 0 ; func end
0070 0895 ret
0072 .dbend
0072 .dbfunc e putchar _putchar fV
0072 ; c -> R16
.even
0072 _putchar::
0072 .dbline -1
0072 .dbline 79
0072 ; void putchar(unsigned char c)
0072 ; {
0072 L11:
0072 .dbline 80
0072 L12:
0072 .dbline 80
0072 ; while (!(UCSRA&(1<<UDRE)));
0072 5D9B sbis 0xb,5
0074 FECF rjmp L11
0076 .dbline 81
0076 ; UDR=c;
0076 0CB9 out 0xc,R16
0078 .dbline -2
0078 .dbline 82
0078 ; }
0078 L10:
0078 .dbline 0 ; func end
0078 0895 ret
007A .dbsym r c 16 c
007A .dbend
007A .dbfunc e puts _puts fI
007A ; s -> R10,R11
.even
007A _puts::
007A 0E940000 xcall push_gset3x
007E 5801 movw R10,R16
0080 .dbline -1
0080 .dbline 84
0080 ; int puts(char *s)
0080 ; {
0080 06C0 xjmp L16
0082 L15:
0082 .dbline 86
0082 .dbline 87
0082 F501 movw R30,R10
0084 0081 ldd R16,z+0
0086 F5DF xcall _putchar
0088 .dbline 88
0088 C501 movw R24,R10
008A 0196 adiw R24,1
008C 5C01 movw R10,R24
008E .dbline 89
008E L16:
008E .dbline 85
008E ; while (*s)
008E F501 movw R30,R10
0090 2080 ldd R2,z+0
0092 2220 tst R2
0094 B1F7 brne L15
0096 .dbline 90
0096 ; {
0096 ; putchar(*s);
0096 ; s++;
0096 ; }
0096 ; putchar(0x0a); //回车换行
0096 0AE0 ldi R16,10
0098 ECDF xcall _putchar
009A .dbline 91
009A ; putchar(0x0d);
009A 0DE0 ldi R16,13
009C EADF xcall _putchar
009E .dbline 92
009E ; return 1;
009E 01E0 ldi R16,1
00A0 10E0 ldi R17,0
00A2 .dbline -2
00A2 L14:
00A2 0E940000 xcall pop_gset3x
00A6 .dbline 0 ; func end
00A6 0895 ret
00A8 .dbsym r s 10 pc
00A8 .dbend
00A8 .dbfunc e init_kb _init_kb fV
.even
00A8 _init_kb::
00A8 .dbline -1
00A8 .dbline 95
00A8 ; }
00A8 ; void init_kb(void)
00A8 ; {
00A8 .dbline 96
00A8 ; PIN_DIR&=~((1<<CLOCK)|(1<<DATAPIN));
00A8 81B3 in R24,0x11
00AA 837F andi R24,243
00AC 81BB out 0x11,R24
00AE .dbline 97
00AE ; PORT_KB|=(1<<CLOCK)|(1<<DATAPIN);
00AE 82B3 in R24,0x12
00B0 8C60 ori R24,12
00B2 82BB out 0x12,R24
00B4 .dbline 98
00B4 ; MCUCR = 0x08;
00B4 88E0 ldi R24,8
00B6 85BF out 0x35,R24
00B8 .dbline 99
00B8 ; GICR = 0x80;
00B8 80E8 ldi R24,128
00BA 8BBF out 0x3b,R24
00BC .dbline 100
00BC ; SEI();
00BC 7894 sei
00BE .dbline 101
00BE ; bitcount = 11;
00BE 8BE0 ldi R24,11
00C0 80934400 sts _bitcount,R24
00C4 .dbline -2
00C4 .dbline 102
00C4 ; }
00C4 L18:
00C4 .dbline 0 ; func end
00C4 0895 ret
00C6 .dbend
.area bss(ram, con, rel)
0000 .dbfile F:\李鹏飞\sl-avrad-m16\键盘演示程序\Keyboard.c
0000 L20:
0000 .blkb 1
0001 L21:
0001 .blkb 1
0002 L22:
0002 .blkb 1
.area text(rom, con, rel)
00C6 .dbfile F:\李鹏飞\sl-avrad-m16\键盘演示程序\Keyboard.c
00C6 .dbfunc e decode _decode fV
00C6 .dbsym s shiftup L22 c
00C6 .dbsym s up L21 c
00C6 .dbsym s shift L20 c
00C6 ; i -> R10
00C6 ; sc -> R12
.even
00C6 _decode::
00C6 0E940000 xcall push_gset5x
00CA C02E mov R12,R16
00CC .dbline -1
00CC .dbline 106
00CC ;
00CC ;
00CC ; void decode(unsigned char sc) //对PC键盘的扫描码进行解码
00CC ; {
00CC .dbline 109
00CC ; static unsigned char shift,up,shiftup;
00CC ; unsigned char i;
00CC ; if (sc==0xf0) //按键释放
00CC 8C2D mov R24,R12
00CE 803F cpi R24,240
00D0 21F4 brne L23
00D2 .dbline 110
00D2 ; {
00D2 .dbline 111
00D2 ; up=1;
00D2 81E0 ldi R24,1
00D4 80930100 sts L21,R24
00D8 .dbline 112
00D8 ; return;
00D8 8CC0 xjmp L19
00DA L23:
00DA .dbline 114
00DA ; }
00DA ; if (up==1) //SHIFT键开关
00DA 80910100 lds R24,L21
00DE 8130 cpi R24,1
00E0 09F5 brne L25
00E2 .dbline 115
00E2 ; {
00E2 .dbline 116
00E2 ; up=0;
00E2 2224 clr R2
00E4 20920100 sts L21,R2
00E8 .dbline 117
00E8 ; if ((sc==0x12)|(sc==0x59)) shift=0;
00E8 8C2D mov R24,R12
00EA 8231 cpi R24,18
00EC 21F4 brne L29
00EE 81E0 ldi R24,1
00F0 90E0 ldi R25,0
00F2 7C01 movw R14,R24
00F4 02C0 xjmp L30
00F6 L29:
00F6 EE24 clr R14
00F8 FF24 clr R15
00FA L30:
00FA 8C2D mov R24,R12
00FC 8935 cpi R24,89
00FE 21F4 brne L31
0100 81E0 ldi R24,1
0102 90E0 ldi R25,0
0104 5C01 movw R10,R24
0106 02C0 xjmp L32
0108 L31:
0108 AA24 clr R10
010A BB24 clr R11
010C L32:
010C 1701 movw R2,R14
010E 2A28 or R2,R10
0110 3B28 or R3,R11
0112 2220 tst R2
0114 19F4 brne X0
0116 3320 tst R3
0118 09F4 brne X2
011A 6BC0 xjmp L19
011C X2:
011C X0:
011C .dbline 117
011C 2224 clr R2
011E 20920000 sts L20,R2
0122 .dbline 118
0122 ; return;
0122 67C0 xjmp L19
0124 L25:
0124 .dbline 120
0124 ; }
0124 ; switch (sc) //检测左SHIFT键
0124 AC2C mov R10,R12
0126 BB24 clr R11
0128 C501 movw R24,R10
012A 8231 cpi R24,18
012C E0E0 ldi R30,0
012E 9E07 cpc R25,R30
0130 51F0 breq L36
0132 8231 cpi R24,18
0134 E0E0 ldi R30,0
0136 9E07 cpc R25,R30
0138 84F0 brlt L33
013A L56:
013A C501 movw R24,R10
013C 8935 cpi R24,89
013E E0E0 ldi R30,0
0140 9E07 cpc R25,R30
0142 31F0 breq L37
0144 0AC0 xjmp L33
0146 X1:
0146 .dbline 121
0146 ; {
0146 L36:
0146 .dbline 122
0146 ; case 0x12:{
0146 .dbline 123
0146 ; shift=1;
0146 81E0 ldi R24,1
0148 80930000 sts L20,R24
014C .dbline 124
014C ; shiftup=1;
014C 80930200 sts L22,R24
0150 .dbline 125
0150 ; }
0150 L37:
0150 .dbline 126
0150 ; case 0x59:{ //检测右SHIFT键
0150 .dbline 127
0150 ; shift=1;
0150 81E0 ldi R24,1
0152 80930000 sts L20,R24
0156 .dbline 128
0156 ; shiftup=1;
0156 80930200 sts L22,R24
015A .dbline 129
015A ; }
015A L33:
015A .dbline 130
015A ; default:{
015A .dbline 131
015A ; if (shift==0)
015A 20900000 lds R2,L20
015E 2220 tst R2
0160 29F5 brne L38
0162 .dbline 132
0162 ; {
0162 .dbline 133
0162 AA24 clr R10
0164 01C0 xjmp L43
0166 L40:
0166 .dbline 133
0166 L41:
0166 .dbline 133
0166 A394 inc R10
0168 L43:
0168 .dbline 133
0168 ; for(i = 0;unshifted[i][0]!=sc && unshifted[i][0]; i++);
0168 82E0 ldi R24,2
016A 8A9D mul R24,R10
016C F001 movw R30,R0
016E 80E0 ldi R24,<_unshifted
0170 90E0 ldi R25,>_unshifted
0172 E80F add R30,R24
0174 F91F adc R31,R25
0176 2490 lpm R2,Z
0178 3324 clr R3
017A 2C14 cp R2,R12
017C 11F0 breq L44
017E 2220 tst R2
0180 91F7 brne L40
0182 L44:
0182 .dbline 134
0182 ; if (unshifted[i][0] == sc)
0182 82E0 ldi R24,2
0184 8A9D mul R24,R10
0186 F001 movw R30,R0
0188 80E0 ldi R24,<_unshifted
018A 90E0 ldi R25,>_unshifted
018C E80F add R30,R24
018E F91F adc R31,R25
0190 E491 lpm R30,Z
0192 EC15 cp R30,R12
0194 09F0 breq X3
0196 2DC0 xjmp L39
0198 X3:
0198 .dbline 135
0198 ; put_kbbuff(unshifted[i][1]);
0198 82E0 ldi R24,2
019A 8A9D mul R24,R10
019C F001 movw R30,R0
019E 80E0 ldi R24,<_unshifted+1
01A0 90E0 ldi R25,>_unshifted+1
01A2 E80F add R30,R24
01A4 F91F adc R31,R25
01A6 0491 lpm R16,Z
01A8 2BDF xcall _put_kbbuff
01AA .dbline 136
01AA ; }
01AA 23C0 xjmp L39
01AC L38:
01AC .dbline 138
01AC ; else
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -