📄 keyboard.s
字号:
.dbline 114
; }
; if (up==1) //SHIFT键开关
lds R24,L21
cpi R24,1
brne L25
.dbline 115
; {
.dbline 116
; up=0;
clr R2
sts L21,R2
.dbline 117
; if ((sc==0x12)|(sc==0x59)) shift=0;
mov R24,R12
cpi R24,18
brne L29
ldi R24,1
ldi R25,0
movw R14,R24
xjmp L30
L29:
clr R14
clr R15
L30:
mov R24,R12
cpi R24,89
brne L31
ldi R24,1
ldi R25,0
movw R10,R24
xjmp L32
L31:
clr R10
clr R11
L32:
movw R2,R14
or R2,R10
or R3,R11
tst R2
brne X0
tst R3
brne X2
xjmp L19
X2:
X0:
.dbline 117
clr R2
sts L20,R2
.dbline 118
; return;
xjmp L19
L25:
.dbline 120
; }
; switch (sc) //检测左SHIFT键
mov R10,R12
clr R11
movw R24,R10
cpi R24,18
ldi R30,0
cpc R25,R30
breq L36
cpi R24,18
ldi R30,0
cpc R25,R30
brlt L33
L56:
movw R24,R10
cpi R24,89
ldi R30,0
cpc R25,R30
breq L37
xjmp L33
X1:
.dbline 121
; {
L36:
.dbline 122
; case 0x12:{
.dbline 123
; shift=1;
ldi R24,1
sts L20,R24
.dbline 124
; shiftup=1;
sts L22,R24
.dbline 125
; }
L37:
.dbline 126
; case 0x59:{ //检测右SHIFT键
.dbline 127
; shift=1;
ldi R24,1
sts L20,R24
.dbline 128
; shiftup=1;
sts L22,R24
.dbline 129
; }
L33:
.dbline 130
; default:{
.dbline 131
; if (shift==0)
lds R2,L20
tst R2
brne L38
.dbline 132
; {
.dbline 133
clr R10
xjmp L43
L40:
.dbline 133
L41:
.dbline 133
inc R10
L43:
.dbline 133
; for(i = 0;unshifted[i][0]!=sc && unshifted[i][0]; i++);
ldi R24,2
mul R24,R10
movw R30,R0
ldi R24,<_unshifted
ldi R25,>_unshifted
add R30,R24
adc R31,R25
lpm R2,Z
clr R3
cp R2,R12
breq L44
tst R2
brne L40
L44:
.dbline 134
; if (unshifted[i][0] == sc)
ldi R24,2
mul R24,R10
movw R30,R0
ldi R24,<_unshifted
ldi R25,>_unshifted
add R30,R24
adc R31,R25
lpm R30,Z
cp R30,R12
breq X3
xjmp L39
X3:
.dbline 135
; put_kbbuff(unshifted[i][1]);
ldi R24,2
mul R24,R10
movw R30,R0
ldi R24,<_unshifted+1
ldi R25,>_unshifted+1
add R30,R24
adc R31,R25
lpm R16,Z
xcall _put_kbbuff
.dbline 136
; }
xjmp L39
L38:
.dbline 138
; else
; {
.dbline 139
clr R10
xjmp L51
L48:
.dbline 139
L49:
.dbline 139
inc R10
L51:
.dbline 139
; for(i = 0;shifted[i][0]!=sc && shifted[i][0]; i++);
ldi R24,2
mul R24,R10
movw R30,R0
ldi R24,<_shifted
ldi R25,>_shifted
add R30,R24
adc R31,R25
lpm R2,Z
clr R3
cp R2,R12
breq L52
tst R2
brne L48
L52:
.dbline 140
; if (shifted[i][0] == sc)
ldi R24,2
mul R24,R10
movw R30,R0
ldi R24,<_shifted
ldi R25,>_shifted
add R30,R24
adc R31,R25
lpm R30,Z
cp R30,R12
brne L53
.dbline 141
; {
.dbline 142
; put_kbbuff(shifted[i][1]);
ldi R24,2
mul R24,R10
movw R30,R0
ldi R24,<_shifted+1
ldi R25,>_shifted+1
add R30,R24
adc R31,R25
lpm R16,Z
xcall _put_kbbuff
.dbline 143
; }
L53:
.dbline 144
; }
L39:
.dbline 145
; }
.dbline 146
; }
.dbline -2
.dbline 147
; }
L19:
xcall pop_gset5x
.dbline 0 ; func end
ret
.dbsym r i 10 c
.dbsym r sc 12 c
.dbend
.area vector(rom, abs)
.org 8
jmp _int1_isr
.area text(rom, con, rel)
.dbfile F:\李鹏飞\sl-avrad-m16\键盘演示程序\Keyboard.c
.area bss(ram, con, rel)
.dbfile F:\李鹏飞\sl-avrad-m16\键盘演示程序\Keyboard.c
L58:
.blkb 1
.area text(rom, con, rel)
.dbfile F:\李鹏飞\sl-avrad-m16\键盘演示程序\Keyboard.c
.dbfunc e int1_isr _int1_isr fV
.dbsym s data L58 c
.even
_int1_isr::
xcall push_lset
xcall push_gset3x
.dbline -1
.dbline 151
; #pragma interrupt_handler int1_isr:iv_INT1
; //键盘数据读取中断程序
; void int1_isr(void)
; {
.dbline 153
; static unsigned char data;
; switch (bitcount)
lds R10,_bitcount
clr R11
movw R24,R10
cpi R24,1
ldi R30,0
cpc R25,R30
breq L66
cpi R24,2
ldi R30,0
cpc R25,R30
breq L65
cpi R24,1
ldi R30,0
cpc R25,R30
brlt L59
L71:
movw R24,R10
cpi R24,11
ldi R30,0
cpc R25,R30
breq L62
xjmp L59
X4:
.dbline 154
; {
L62:
.dbline 155
; case 11:{
.dbline 156
; if ((PIN_KB&(1<<DATAPIN))!=0)
sbis 0x10,2
rjmp L63
.dbline 157
; return;
xjmp L57
L63:
.dbline 159
; else
; bitcount--;
lds R24,_bitcount
subi R24,1
sts _bitcount,R24
.dbline 160
; break;}
xjmp L60
L65:
.dbline 161
; case 2:{
.dbline 162
; bitcount--;
lds R24,_bitcount
subi R24,1
sts _bitcount,R24
.dbline 163
; break;}
xjmp L60
L66:
.dbline 164
; case 1:{
.dbline 165
; bitcount--;
lds R24,_bitcount
subi R24,1
sts _bitcount,R24
.dbline 166
; if ((PIN_KB&(1<<DATAPIN))==0)
sbic 0x10,2
rjmp L67
.dbline 167
; {
.dbline 168
; bitcount=11;
ldi R24,11
sts _bitcount,R24
.dbline 169
; return;
xjmp L57
L67:
.dbline 172
; }
; else
; {
.dbline 173
; bitcount=11;
ldi R24,11
sts _bitcount,R24
.dbline 174
; decode(data);
lds R16,L58
xcall _decode
.dbline 175
; }
.dbline 176
; break;}
xjmp L60
L59:
.dbline 177
; default:{
.dbline 178
; data = (data >> 1);
lds R2,L58
lsr R2
sts L58,R2
.dbline 179
; if((PIN_KB&(1<<DATAPIN))!=0)
sbis 0x10,2
rjmp L69
.dbline 180
; data|=0x80;
mov R24,R2
ori R24,128
sts L58,R24
L69:
.dbline 181
lds R24,_bitcount
subi R24,1
sts _bitcount,R24
.dbline 182
.dbline 183
L60:
.dbline -2
.dbline 184
; bitcount--;
; }
; }
; }
L57:
xcall pop_gset3x
xcall pop_lset
.dbline 0 ; func end
reti
.dbend
.dbfunc e main _main fV
; key -> R10
.even
_main::
.dbline -1
.dbline 187
; //PC键盘演示程序,SHIFT键和按键同时按下时为大写
; void main()
; {
.dbline 190
; unsigned char key;
;
; uart_init();
xcall _uart_init
.dbline 191
; init_kb();
xcall _init_kb
.dbline 192
; puts("双龙电子PC键盘演示程序:");
ldi R16,<L73
ldi R17,>L73
xcall _puts
.dbline 193
; putchar(0x0d);
ldi R16,13
xcall _putchar
.dbline 194
; putchar(0x0d);
ldi R16,13
xcall _putchar
xjmp L75
L74:
.dbline 196
; while(1)
; {
.dbline 198
;
; key=get_char();
xcall _get_char
mov R10,R16
.dbline 199
; if (key!=0)
tst R16
breq L77
.dbline 200
; {
.dbline 201
; if (key==0x0d)
cpi R16,13
brne L79
.dbline 202
; {
.dbline 203
; putchar('\n');
ldi R16,10
xcall _putchar
.dbline 204
; putchar(key);
mov R16,R10
xcall _putchar
.dbline 205
; }
xjmp L80
L79:
.dbline 207
; else
; putchar(key);
mov R16,R10
xcall _putchar
L80:
.dbline 208
; }
L77:
.dbline 209
L75:
.dbline 195
xjmp L74
X5:
.dbline -2
.dbline 210
; }
; }
L72:
.dbline 0 ; func end
ret
.dbsym r key 10 c
.dbend
.area bss(ram, con, rel)
.dbfile F:\李鹏飞\sl-avrad-m16\键盘演示程序\Keyboard.c
_kb_buffer::
.blkb 64
.dbsym e kb_buffer _kb_buffer A[64:64]c
_bitcount::
.blkb 1
.dbsym e bitcount _bitcount c
.area data(ram, con, rel)
.dbfile F:\李鹏飞\sl-avrad-m16\键盘演示程序\Keyboard.c
L73:
.blkb 24
.area idata
.byte 203,171,193,250,181,231,215,211,'P,'C,188,252,197,204,209,221
.byte 202,190,179,204,208,242,58,0
.area data(ram, con, rel)
.dbfile F:\李鹏飞\sl-avrad-m16\键盘演示程序\Keyboard.c
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -