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

📄 keyboard.lis

📁 单片机开发资料光盘-双龙-686M.zip
💻 LIS
📖 第 1 页 / 共 3 页
字号:
 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 + -