⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ps2_kb.lis

📁 驱动开发板上的PS2接口
💻 LIS
📖 第 1 页 / 共 4 页
字号:
 007C 7C2A              .byte 124,42
 007E 7D39              .byte 125,57
 0080 0000              .byte 0,0
 0082                   .dbfile C:\icc\examples.avr\AVR_PQ1A_DEMO\19_PS2\PS2_KB.C
 0082                   .dbsym e unshifted _unshifted A[130:65:2]c
 0082           _shifted::
 0082 0E7E              .byte 14,126
 0084 1551              .byte 21,'Q
 0086 1621              .byte 22,33
 0088 1A5A              .byte 26,'Z
 008A 1B53              .byte 27,'S
 008C 1C41              .byte 28,'A
 008E 1D57              .byte 29,'W
 0090 1E40              .byte 30,64
 0092 2143              .byte 33,'C
 0094 2258              .byte 34,'X
 0096 2344              .byte 35,'D
 0098 2445              .byte 36,'E
 009A 2524              .byte 37,36
 009C 2623              .byte 38,35
 009E 2920              .byte 41,32
 00A0 2A56              .byte 42,'V
 00A2 2B46              .byte 43,'F
 00A4 2C54              .byte 44,'T
 00A6 2D52              .byte 45,'R
 00A8 2E25              .byte 46,37
 00AA 314E              .byte 49,'N
 00AC 3242              .byte 50,'B
 00AE 3348              .byte 51,'H
 00B0 3447              .byte 52,'G
 00B2 3559              .byte 53,'Y
 00B4 365E              .byte 54,94
 00B6 394C              .byte 57,'L
 00B8 3A4D              .byte 58,'M
 00BA 3B4A              .byte 59,'J
 00BC 3C55              .byte 60,'U
 00BE 3D26              .byte 61,38
 00C0 3E2A              .byte 62,42
 00C2 413C              .byte 'A,60
 00C4 424B              .byte 'B,'K
 00C6 4349              .byte 'C,'I
 00C8 444F              .byte 'D,'O
 00CA 4529              .byte 'E,41
 00CC 4628              .byte 'F,40
 00CE 493E              .byte 'I,62
 00D0 4A3F              .byte 'J,63
 00D2 4B4C              .byte 'K,'L
 00D4 4C3A              .byte 'L,58
 00D6 4D50              .byte 'M,'P
 00D8 4E5F              .byte 'N,95
 00DA 5222              .byte 'R,34
 00DC 547B              .byte 'T,123
 00DE 552B              .byte 'U,43
 00E0 5B7D              .byte 91,125
 00E2 5D7C              .byte 93,124
 00E4 613E              .byte 'a,62
 00E6 6931              .byte 'i,49
 00E8 6B34              .byte 'k,52
 00EA 6C37              .byte 'l,55
 00EC 7030              .byte 'p,48
 00EE 712E              .byte 'q,46
 00F0 7232              .byte 'r,50
 00F2 7335              .byte 's,53
 00F4 7436              .byte 't,54
 00F6 7538              .byte 'u,56
 00F8 792B              .byte 'y,43
 00FA 7A33              .byte 'z,51
 00FC 7B2D              .byte 123,45
 00FE 7C2A              .byte 124,42
 0100 7D39              .byte 125,57
 0102 0000              .byte 0,0
 0104                   .dbsym e shifted _shifted A[130:65:2]c
                        .area data(ram, con, rel)
 0000                   .dbfile C:\icc\examples.avr\AVR_PQ1A_DEMO\19_PS2\PS2_KB.C
 0000           _ascii::
 0000                   .blkb 1
                        .area idata
 0000 20                .byte 32
                        .area data(ram, con, rel)
 0001                   .dbfile C:\icc\examples.avr\AVR_PQ1A_DEMO\19_PS2\PS2_KB.C
 0001                   .dbsym e ascii _ascii c
                        .area text(rom, con, rel)
 01AE                   .dbfile C:\icc\examples.avr\AVR_PQ1A_DEMO\19_PS2\PS2_KB.C
 01AE                   .dbfunc e Init_kb _Init_kb fV
                        .even
 01AE           _Init_kb::
 01AE                   .dbline -1
 01AE                   .dbline 166
 01AE           ;   0x73,'5',
 01AE           ;   0x74,'6',
 01AE           ;   0x75,'8',
 01AE           ;   0x79,'+',
 01AE           ;   0x7a,'3',
 01AE           ;   0x7b,'-',
 01AE           ;   0x7c,'*',
 01AE           ;   0x7d,'9',
 01AE           ;   0,0
 01AE           ; };
 01AE           ; #pragma data:data                     //将以后的变量放在RAM
 01AE           ; void Decode(uchar scancode);//声明函数原型
 01AE           ; uchar edge, bitcount,ascii=' ';               //edge为0下降沿中断,为1上升沿中断
 01AE           ;                                                                       //bitcount为位计数值
 01AE           ;                                                                       //ascii为翻译后的ASCII码,初值为空格
 01AE           ; 
 01AE           ; /*******************************************
 01AE           ; 函数名称: Init_kb
 01AE           ; 功    能: 初始化PS2函数
 01AE           ; 参    数: 无
 01AE           ; 返回值  : 无
 01AE           ; /********************************************/
 01AE           ; void Init_kb(void)
 01AE           ; {       
 01AE                   .dbline 167
 01AE           ;  MCUCR = 2;       //设置INT0为下降沿触发中断
 01AE 82E0              ldi R24,2
 01B0 85BF              out 0x35,R24
 01B2                   .dbline 168
 01B2           ;  edge = 0;        //0为下降沿中断标志,1为上升沿中断标志
 01B2 2224              clr R2
 01B4 20920200          sts _edge,R2
 01B8                   .dbline 169
 01B8           ;  bitcount = 11;         //每次11位数据,一个起始位(0),8个数据位,一个奇偶校验位,一个停止位(1)
 01B8 8BE0              ldi R24,11
 01BA 80930100          sts _bitcount,R24
 01BE                   .dbline 170
 01BE           ;  DDRD&=~BIT(PD2); //配置中断管脚为输入
 01BE 8A98              cbi 0x11,2
 01C0                   .dbline 171
 01C0           ;  PORTD|=BIT(PD2); //使能中断管脚的上拉
 01C0 929A              sbi 0x12,2
 01C2                   .dbline 172
 01C2           ;  DDRA&=~BIT(PA0); //配置键盘数据输入口为输入
 01C2 D098              cbi 0x1a,0
 01C4                   .dbline 173
 01C4           ;  PORTA|=BIT(PA0); //使能数据输入管脚的上拉
 01C4 D89A              sbi 0x1b,0
 01C6                   .dbline 174
 01C6           ;  SREG|=BIT(GLOBAL);//打开全局中断
 01C6 7894              bset 7
 01C8                   .dbline 175
 01C8           ;  GICR|=BIT(EXTINT0);
 01C8 8BB7              in R24,0x3b
 01CA 8064              ori R24,64
 01CC 8BBF              out 0x3b,R24
 01CE                   .dbline -2
 01CE                   .dbline 176
 01CE           ; }
 01CE           L46:
 01CE                   .dbline 0 ; func end
 01CE 0895              ret
 01D0                   .dbend
 01D0                   .dbfunc e Disp_ascii _Disp_ascii fV
 01D0           ;          ascii -> R20
                        .even
 01D0           _Disp_ascii::
 01D0 0E940000          xcall push_gset1
 01D4 402F              mov R20,R16
 01D6                   .dbline -1
 01D6                   .dbline 184
 01D6           ; /*******************************************
 01D6           ; 函数名称: Disp_ascii
 01D6           ; 功    能: 在1602液晶上显示键盘上的ASCII码
 01D6           ; 参    数: ascii--将要显示的ASCII码
 01D6           ; 返回值  : 无
 01D6           ; /********************************************/
 01D6           ; void Disp_ascii(uchar ascii)            
 01D6           ; {
 01D6                   .dbline 185
 01D6           ;  LCD1602_gotoXY(1,2);
 01D6 22E0              ldi R18,2
 01D8 01E0              ldi R16,1
 01DA BCDF              xcall _LCD1602_gotoXY
 01DC                   .dbline 186
 01DC           ;  LCD1602_sendstr("KEY_ASCII:");
 01DC 00E0              ldi R16,<L48
 01DE 10E0              ldi R17,>L48
 01E0 95DF              xcall _LCD1602_sendstr
 01E2                   .dbline 187
 01E2           ;  LCD1602_sendbyte(iDat,ascii);
 01E2 242F              mov R18,R20
 01E4 01E0              ldi R16,1
 01E6 7FDF              xcall _LCD1602_sendbyte
 01E8                   .dbline -2
 01E8                   .dbline 188
 01E8           ; }
 01E8           L47:
 01E8 0E940000          xcall pop_gset1
 01EC                   .dbline 0 ; func end
 01EC 0895              ret
 01EE                   .dbsym r ascii 20 c
 01EE                   .dbend
                        .area bss(ram, con, rel)
 0000                   .dbfile C:\icc\examples.avr\AVR_PQ1A_DEMO\19_PS2\PS2_KB.C
 0000           L50:
 0000                   .blkb 1
                        .area text(rom, con, rel)
 01EE                   .dbfile C:\icc\examples.avr\AVR_PQ1A_DEMO\19_PS2\PS2_KB.C
 01EE                   .dbfunc e Int0 _Int0 fV
 01EE                   .dbsym s data L50 c
                        .even
 01EE           _Int0::
 01EE 0E940000          xcall push_lset
 01F2                   .dbline -1
 01F2                   .dbline 196
 01F2           ; /*******************************************
 01F2           ; 函数名称: Int0
 01F2           ; 功    能: 外部中断0的中断服务函数,上升沿中断读入11位数据,下降沿调用解码程序
 01F2           ; 参    数: 无
 01F2           ; 返回值  : 无
 01F2           ; /********************************************/
 01F2           ; void Int0(void)
 01F2           ; {
 01F2                   .dbline 198
 01F2           ;  static uchar data;   // 声明局部静态变量来保存扫描码
 01F2           ;  if (!edge)                                   // 如果是下降沿触发中断
 01F2 20900200          lds R2,_edge
 01F6 2220              tst R2
 01F8 D1F4              brne L51
 01FA                   .dbline 199
 01FA           ;  {
 01FA                   .dbline 200
 01FA           ;   if(bitcount < 11 && bitcount > 2)    //3到10位是数据,起始位,校验位和停止位忽略
 01FA 80910100          lds R24,_bitcount
 01FE 8B30              cpi R24,11
 0200 80F4              brsh L53
 0202 82E0              ldi R24,2
 0204 20900100          lds R2,_bitcount
 0208 8215              cp R24,R2
 020A 58F4              brsh L53
 020C                   .dbline 201
 020C           ;   { 
 020C                   .dbline 202
 020C           ;       data = (data >> 1);                                //右移保存数据
 020C 20900000          lds R2,L50
 0210 2694              lsr R2
 0212 20920000          sts L50,R2
 0216                   .dbline 203
 0216           ;       if(PINA&0x01)
 0216 C89B              sbis 0x19,0
 0218 04C0              rjmp L55
 021A                   .dbline 204
 021A           ;       {
 021A                   .dbline 205
 021A           ;         data|=0x80;                                      //存储一个'1'
 021A 822D              mov R24,R2
 021C 8068              ori R24,128
 021E 80930000          sts L50,R24
 0222                   .dbline 206
 0222           ;       }
 0222           L55:
 0222                   .dbline 207
 0222           ;   }
 0222           L53:
 0222                   .dbline 208
 0222           ;   MCUCR=3;                             //设置INT0为上升沿触发中断
 0222 83E0              ldi R24,3
 0224 85BF              out 0x35,R24
 0226                   .dbline 209
 0226           ;   edge=1;                              //设置上升沿中断标志
 0226 81E0              ldi R24,1
 0228 80930200          sts _edge,R24
 022C                   .dbline 210
 022C           ;  } 
 022C 13C0              xjmp L52
 022E           L51:
 022E                   .dbline 212
 022E           ;  else                                          //如果是上升沿触发中断
 022E           ;  { 
 022E                   .dbline 213
 022E           ;   MCUCR=2;                             //设置INT0为下降沿触发中断
 022E 82E0              ldi R24,2
 0230 85BF              out 0x35,R24
 0232                   .dbline 214
 0232           ;   edge=0;                              //设置下降沿中断标志 
 0232 2224              clr R2
 0234 20920200          sts _edge,R2
 0238                   .dbline 215
 0238           ;   if(--bitcount==0)            //如果11位全部接收完毕
 0238 80910100          lds R24,_bitcount
 023C 8150              subi R24,1
 023E 282E              mov R2,R24
 0240 20920100          sts _bitcount,R2
 0244 8823              tst R24
 0246 31F4              brne L57
 0248                   .dbline 216
 0248           ;   {
 0248                   .dbline 217
 0248           ;    Decode(data);       //将扫描码翻译成ASCII码   
 0248 00910000          lds R16,L50
 024C 06D0              xcall _Decode
 024E                   .dbline 218
 024E           ;    bitcount = 11;              //重新设为11位数据
 024E 8BE0              ldi R24,11
 0250 80930100          sts _bitcount,R24
 0254                   .dbline 219
 0254           ;   }
 0254           L57:
 0254                   .dbline 220
 0254           L52:
 0254                   .dbline -2
 0254                   .dbline 221
 0254           ;  }
 0254           ; }
 0254           L49:
 0254 0E940000          xcall pop_lset
 0258                   .dbline 0 ; func end
 0258 1895              reti
 025A                   .dbend
                        .area data(ram, con, rel)
 0001                   .dbfile C:\icc\examples.avr\AVR_PQ1A_DEMO\19_PS2\PS2_KB.C
 0001           L60:
 0001                   .blkb 1
                        .area idata
 0001 00                .byte 0
                        .area data(ram, con, rel)
 0002                   .dbfile C:\icc\examples.avr\AVR_PQ1A_DEMO\19_PS2\PS2_KB.C
 0002           L61:
 0002                   .blkb 1
                        .area idata
 0002 00                .byte 0
                        .area data(ram, con, rel)
 0003                   .dbfile C:\icc\examples.avr\AVR_PQ1A_DEMO\19_PS2\PS2_KB.C
                        .area text(rom, con, rel)
 025A                   .dbfile C:\icc\examples.avr\AVR_PQ1A_DEMO\19_PS2\PS2_KB.C
 025A                   .dbfunc e Decode _Decode fV
 025A                   .dbsym s shift L61 c
 025A                   .dbsym s up L60 c
 025A           ;              i -> R20
 025A           ;       scancode -> R16
                        .even
 025A           _Decode::
 025A 0E940000          xcall push_gset1

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -