📄 keyboard.lis
字号:
.module Keyboard.c
.area code(ram, con, rel)
.area lit(rom, con, rel)
0000 _unshifted::
0000 0D09 .byte 13,9
0002 0E60 .byte 14,96
0004 1571 .byte 21,'q
0006 1631 .byte 22,49
0008 1A7A .byte 26,'z
000A 1B73 .byte 27,'s
000C 1C61 .byte 28,'a
000E 1D77 .byte 29,'w
0010 1E32 .byte 30,50
0012 2163 .byte 33,'c
0014 2278 .byte 34,'x
0016 2364 .byte 35,'d
0018 2465 .byte 36,'e
001A 2534 .byte 37,52
001C 2633 .byte 38,51
001E 2920 .byte 41,32
0020 2A76 .byte 42,'v
0022 2B66 .byte 43,'f
0024 2C74 .byte 44,'t
0026 2D72 .byte 45,'r
0028 2E35 .byte 46,53
002A 316E .byte 49,'n
002C 3262 .byte 50,'b
002E 3368 .byte 51,'h
0030 3467 .byte 52,'g
0032 3579 .byte 53,'y
0034 3636 .byte 54,54
0036 392C .byte 57,44
0038 3A6D .byte 58,'m
003A 3B6A .byte 59,'j
003C 3C75 .byte 60,'u
003E 3D37 .byte 61,55
0040 3E38 .byte 62,56
0042 412C .byte 'A,44
0044 426B .byte 'B,'k
0046 4369 .byte 'C,'i
0048 446F .byte 'D,'o
004A 4530 .byte 'E,48
004C 4639 .byte 'F,57
004E 492E .byte 'I,46
0050 4A2F .byte 'J,47
0052 4B6C .byte 'K,'l
0054 4C3B .byte 'L,59
0056 4D70 .byte 'M,'p
0058 4E2D .byte 'N,45
005A 5227 .byte 'R,39
005C 545B .byte 'T,91
005E 553D .byte 'U,61
0060 5A0D .byte 'Z,13
0062 5B5D .byte 91,93
0064 5D5C .byte 93,92
0066 613C .byte 'a,60
0068 6608 .byte 'f,8
006A 6931 .byte 'i,49
006C 6B34 .byte 'k,52
006E 6C37 .byte 'l,55
0070 7030 .byte 'p,48
0072 712C .byte 'q,44
0074 7232 .byte 'r,50
0076 7335 .byte 's,53
0078 7436 .byte 't,54
007A 7538 .byte 'u,56
007C 792B .byte 'y,43
007E 7A33 .byte 'z,51
0080 7B2D .byte 123,45
0082 7C2A .byte 124,42
0084 7D39 .byte 125,57
0086 0000 .byte 0,0
0088 .dbfile F:\李鹏飞\sl-avrad-m16\键盘演示程序\Keyboard.c
0088 .dbsym e unshifted _unshifted A[136:68:2]kc
0088 _shifted::
0088 0D09 .byte 13,9
008A 0E7E .byte 14,126
008C 1551 .byte 21,'Q
008E 1621 .byte 22,33
0090 1A5A .byte 26,'Z
0092 1B53 .byte 27,'S
0094 1C41 .byte 28,'A
0096 1D57 .byte 29,'W
0098 1E40 .byte 30,64
009A 2143 .byte 33,'C
009C 2258 .byte 34,'X
009E 2344 .byte 35,'D
00A0 2445 .byte 36,'E
00A2 2524 .byte 37,36
00A4 2623 .byte 38,35
00A6 2920 .byte 41,32
00A8 2A56 .byte 42,'V
00AA 2B46 .byte 43,'F
00AC 2C54 .byte 44,'T
00AE 2D52 .byte 45,'R
00B0 2E25 .byte 46,37
00B2 314E .byte 49,'N
00B4 3242 .byte 50,'B
00B6 3348 .byte 51,'H
00B8 3447 .byte 52,'G
00BA 3559 .byte 53,'Y
00BC 365E .byte 54,94
00BE 394C .byte 57,'L
00C0 3A4D .byte 58,'M
00C2 3B4A .byte 59,'J
00C4 3C55 .byte 60,'U
00C6 3D26 .byte 61,38
00C8 3E2A .byte 62,42
00CA 413C .byte 'A,60
00CC 424B .byte 'B,'K
00CE 4349 .byte 'C,'I
00D0 444F .byte 'D,'O
00D2 4529 .byte 'E,41
00D4 4628 .byte 'F,40
00D6 493E .byte 'I,62
00D8 4A3F .byte 'J,63
00DA 4B4C .byte 'K,'L
00DC 4C3A .byte 'L,58
00DE 4D50 .byte 'M,'P
00E0 4E5F .byte 'N,95
00E2 5222 .byte 'R,34
00E4 547B .byte 'T,123
00E6 552B .byte 'U,43
00E8 5A0D .byte 'Z,13
00EA 5B7D .byte 91,125
00EC 5D7C .byte 93,124
00EE 613E .byte 'a,62
00F0 6608 .byte 'f,8
00F2 6931 .byte 'i,49
00F4 6B34 .byte 'k,52
00F6 6C37 .byte 'l,55
00F8 7030 .byte 'p,48
00FA 712C .byte 'q,44
00FC 7232 .byte 'r,50
00FE 7335 .byte 's,53
0100 7436 .byte 't,54
0102 7538 .byte 'u,56
0104 792B .byte 'y,43
0106 7A33 .byte 'z,51
0108 7B2D .byte 123,45
010A 7C2A .byte 124,42
010C 7D39 .byte 125,57
010E 0000 .byte 0,0
0110 .dbsym e shifted _shifted A[136:68:2]kc
.area data(ram, con, rel)
0000 .dbfile F:\李鹏飞\sl-avrad-m16\键盘演示程序\Keyboard.c
0000 _input::
0000 .blkb 1
.area idata
0000 00 .byte 0
.area data(ram, con, rel)
0001 .dbfile F:\李鹏飞\sl-avrad-m16\键盘演示程序\Keyboard.c
0001 .dbsym e input _input c
0001 _output::
0001 .blkb 1
.area idata
0001 00 .byte 0
.area data(ram, con, rel)
0002 .dbfile F:\李鹏飞\sl-avrad-m16\键盘演示程序\Keyboard.c
0002 .dbsym e output _output c
.area text(rom, con, rel)
0000 .dbfile F:\李鹏飞\sl-avrad-m16\键盘演示程序\Keyboard.c
0000 .dbfunc e put_kbbuff _put_kbbuff fV
0000 ; c -> R16
.even
0000 _put_kbbuff::
0000 .dbline -1
0000 .dbline 49
0000 ; /******************************************/
0000 ; /* 广州天河双龙电子公司 */
0000 ; /* http://www.sl.com.cn */
0000 ; /* PS2键盘驱动程序 */
0000 ; /* 作者:lpf@sl.com.cn */
0000 ; /* 2003年8月28日 */
0000 ; /* 目标MCU:MEGA16 晶振:外部(EXT) 8MHZ */
0000 ; /******************************************/
0000 ; #include<iom16v.h>
0000 ; #include<macros.h>
0000 ; #define PIN_DIR DDRD
0000 ; #define PIN_KB PIND
0000 ; #define PORT_KB PORTD
0000 ; #define CLOCK 3
0000 ; #define DATAPIN 2
0000 ; #define BUFF_SIZE 64
0000 ; #define fosc 8000000
0000 ; //晶振8MHZ
0000 ; #define baud 19200
0000 ; //波特率
0000 ; #pragma data:code
0000 ; //设置数据区为程序存储器
0000 ; //没有按下shift键的PC机键盘扫描码
0000 ; const unsigned char unshifted[][2] = {
0000 ; 0x0d,9,0x0e,'`',0x15,'q',0x16,'1',0x1a,'z',0x1b,'s',0x1c,'a',0x1d,'w',0x1e,'2',
0000 ; 0x21,'c',0x22,'x',0x23,'d',0x24,'e',0x25,'4',0x26,'3',0x29,' ',0x2a,'v',0x2b,'f',0x2c,'t',0x2d,'r',0x2e,'5',
0000 ; 0x31,'n',0x32,'b',0x33,'h',0x34,'g',0x35,'y',0x36,'6',0x39,',',0x3a,'m',0x3b,'j',0x3c,'u',0x3d,'7',0x3e,'8',
0000 ; 0x41,',',0x42,'k',0x43,'i',0x44,'o',0x45,'0',0x46,'9',0x49,'.',0x4a,'/',0x4b,'l',0x4c,';',0x4d,'p',0x4e,'-',
0000 ; 0x52,0x27,0x54,'[',0x55,'=',0x5a,13, 0x5b,']',0x5d,0x5c,0x61,'<',0x66,8,0x69,'1',0x6b,'4',0x6c,'7',
0000 ; 0x70,'0',0x71,',',0x72,'2',0x73,'5',0x74,'6',0x75,'8',0x79,'+',0x7a,'3',0x7b,'-',0x7c,'*',0x7d,'9',0,0
0000 ; };
0000 ; //按下shift键的PC机键盘扫描码
0000 ; const unsigned char shifted[][2] = {
0000 ; 0x0d,9,0x0e,'~',0x15,'Q',0x16,'!',0x1a,'Z',0x1b,'S',0x1c,'A',0x1d,'W',0x1e,'@',
0000 ; 0x21,'C',0x22,'X',0x23,'D',0x24,'E',0x25,'$',0x26,'#',0x29,' ',0x2a,'V',0x2b,'F',0x2c,'T',0x2d,'R',0x2e,'%',
0000 ; 0x31,'N',0x32,'B',0x33,'H',0x34,'G',0x35,'Y',0x36,'^',0x39,'L',0x3a,'M',0x3b,'J',0x3c,'U',0x3d,'&',0x3e,'*',
0000 ; 0x41,'<',0x42,'K',0x43,'I',0x44,'O',0x45,')',0x46,'(',0x49,'>',0x4a,'?',0x4b,'L',0x4c,':',0x4d,'P',0x4e,'_',
0000 ; 0x52,'"',0x54,'{',0x55,'+',0x5a,13, 0x5b,'}',0x5d,'|',0x61,'>',0x66,8,0x69,'1',0x6b,'4',0x6c,'7',
0000 ; 0x70,'0',0x71,',',0x72,'2',0x73,'5',0x74,'6',0x75,'8',0x79,'+',0x7a,'3',0x7b,'-',0x7c,'*',0x7d,'9',0,0
0000 ; };
0000 ; #pragma data:data
0000 ; //设置数据区回到数据存储器
0000 ; unsigned char bitcount; //pc键盘数据长度计数
0000 ; unsigned char kb_buffer[BUFF_SIZE]; //键盘缓冲区
0000 ; unsigned char input=0; //缓冲区读指针
0000 ; unsigned char output=0; //缓冲区写指针
0000 ; //键盘缓冲区使用软件模拟FIFO
0000 ; void put_kbbuff(unsigned char c) //送键盘按键ASCII码到键盘缓冲区
0000 ; {
0000 .dbline 50
0000 ; kb_buffer[input]=c;
0000 80E0 ldi R24,<_kb_buffer
0002 90E0 ldi R25,>_kb_buffer
0004 E0910000 lds R30,_input
0008 FF27 clr R31
000A E80F add R30,R24
000C F91F adc R31,R25
000E 0083 std z+0,R16
0010 .dbline 51
0010 ; if (input<(BUFF_SIZE-1))
0010 80910000 lds R24,_input
0014 8F33 cpi R24,63
0016 20F4 brsh L2
0018 .dbline 52
0018 ; input++;
0018 8F5F subi R24,255 ; addi 1
001A 80930000 sts _input,R24
001E 03C0 xjmp L3
0020 L2:
0020 .dbline 54
0020 2224 clr R2
0022 20920000 sts _input,R2
0026 L3:
0026 .dbline -2
0026 .dbline 55
0026 ; else
0026 ; input=0;
0026 ; }
0026 L1:
0026 .dbline 0 ; func end
0026 0895 ret
0028 .dbsym r c 16 c
0028 .dbend
0028 .dbfunc e get_char _get_char fc
0028 ; temp -> R16
.even
0028 _get_char::
0028 .dbline -1
0028 .dbline 57
0028 ; unsigned char get_char(void) //从键盘缓冲区读取按键的ASCII码
0028 ; {
0028 .dbline 59
0028 ; unsigned char temp;
0028 ; if (output==input)
0028 20900000 lds R2,_input
002C 30900100 lds R3,_output
0030 3214 cp R3,R2
0032 11F4 brne L5
0034 .dbline 60
0034 ; return 0;
0034 0027 clr R16
0036 13C0 xjmp L4
0038 L5:
0038 .dbline 62
0038 ; else
0038 ; {
0038 .dbline 63
0038 ; temp=kb_buffer[output];
0038 80E0 ldi R24,<_kb_buffer
003A 90E0 ldi R25,>_kb_buffer
003C E0910100 lds R30,_output
0040 FF27 clr R31
0042 E80F add R30,R24
0044 F91F adc R31,R25
0046 0081 ldd R16,z+0
0048 .dbline 64
0048 ; if (output<(BUFF_SIZE-1))
0048 80910100 lds R24,_output
004C 8F33 cpi R24,63
004E 20F4 brsh L7
0050 .dbline 65
0050 ; output++;
0050 8F5F subi R24,255 ; addi 1
0052 80930100 sts _output,R24
0056 03C0 xjmp L8
0058 L7:
0058 .dbline 67
0058 ; else
0058 ; output=0;
0058 2224 clr R2
005A 20920100 sts _output,R2
005E L8:
005E .dbline 68
005E ; return temp;
005E .dbline -2
005E L4:
005E .dbline 0 ; func end
005E 0895 ret
0060 .dbsym r temp 16 c
0060 .dbend
0060 .dbfunc e uart_init _uart_init fV
.even
0060 _uart_init::
0060 .dbline -1
0060 .dbline 72
0060 ; }
0060 ; }
0060 ; void uart_init(void)
0060 ; {
0060 .dbline 73
0060 ; UCSRB=(1<<RXEN)|(1<<TXEN); //允许发送和接收
0060 88E1 ldi R24,24
0062 8AB9 out 0xa,R24
0064 .dbline 74
0064 ; UBRRL=(fosc/16/(baud+1))%256;
0064 8AE1 ldi R24,26
0066 89B9 out 0x9,R24
0068 .dbline 75
0068 ; UBRRH=(fosc/16/(baud+1))/256; //波特率19200
0068 2224 clr R2
006A 20BC out 0x20,R2
006C .dbline 76
006C ; UCSRC=(1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0); //8位数据+1位STOP位
006C 86E8 ldi R24,134
006E 80BD out 0x20,R24
0070 .dbline -2
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -