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

📄 keyboard.lis

📁 AVR单片机开发的键盘处理程序C源代码希望对单片机初学选手有点帮助
💻 LIS
📖 第 1 页 / 共 4 页
字号:
 0352           ; 
 0352           ; void reset_ctrl( void )
 0352           ; {
 0352                   .dbline 210
 0352 0027              clr R16
 0354 10C0              xjmp L96
 0356           L93:
 0356                   .dbline 210
 0356                   .dbline 211
 0356 80E0              ldi R24,<_rbuf
 0358 90E0              ldi R25,>_rbuf
 035A E02F              mov R30,R16
 035C FF27              clr R31
 035E E80F              add R30,R24
 0360 F91F              adc R31,R25
 0362 2224              clr R2
 0364 2082              std z+0,R2
 0366                   .dbline 212
 0366 80E0              ldi R24,<_tbuf
 0368 90E0              ldi R25,>_tbuf
 036A E02F              mov R30,R16
 036C FF27              clr R31
 036E E80F              add R30,R24
 0370 F91F              adc R31,R25
 0372 2082              std z+0,R2
 0374                   .dbline 213
 0374           L94:
 0374                   .dbline 210
 0374 0395              inc R16
 0376           L96:
 0376                   .dbline 210
 0376           ;       uchar i;
 0376           ;       for( i = 0; i < SCOM_BUF_LEN; i ++ ){
 0376 0A30              cpi R16,10
 0378 70F3              brlo L93
 037A                   .dbline 214
 037A           ;               rbuf[i] = 0;
 037A           ;               tbuf[i] = 0;
 037A           ;       }
 037A           ;       scom_counter = 0;
 037A 2224              clr R2
 037C 3324              clr R3
 037E 30921D00          sts _scom_counter+1,R3
 0382 20921C00          sts _scom_counter,R2
 0386                   .dbline 215
 0386           ;       delay_counter = 0;
 0386 30921F00          sts _delay_counter+1,R3
 038A 20921E00          sts _delay_counter,R2
 038E                   .dbline 216
 038E           ;       key_counter = 0;
 038E 30921B00          sts _key_counter+1,R3
 0392 20921A00          sts _key_counter,R2
 0396                   .dbline 217
 0396           ;       l_des_speed = 0;
 0396 30920500          sts _l_des_speed+1,R3
 039A 20920400          sts _l_des_speed,R2
 039E                   .dbline 218
 039E           ;       r_des_speed = 0;
 039E 30920300          sts _r_des_speed+1,R3
 03A2 20920200          sts _r_des_speed,R2
 03A6                   .dbline 219
 03A6           ;       key_buf = 0;
 03A6 30920100          sts _key_buf+1,R3
 03AA 20920000          sts _key_buf,R2
 03AE                   .dbline 220
 03AE 30921F00          sts _delay_counter+1,R3
 03B2 20921E00          sts _delay_counter,R2
 03B6 06C0              xjmp L100
 03B8           L97:
 03B8                   .dbline 220
 03B8                   .dbline 221
 03B8 8FEF              ldi R24,255
 03BA 8BBB              out 0x1b,R24
 03BC                   .dbline 222
 03BC 28B2              in R2,0x18
 03BE 220C              lsl R2
 03C0 28BA              out 0x18,R2
 03C2                   .dbline 223
 03C2 A895              wdr
 03C4                   .dbline 224
 03C4           L98:
 03C4                   .dbline 220
 03C4           L100:
 03C4                   .dbline 220
 03C4           ;       for( delay_counter = 0; delay_counter < 500; ){
 03C4 80911E00          lds R24,_delay_counter
 03C8 90911F00          lds R25,_delay_counter+1
 03CC 843F              cpi R24,244
 03CE E1E0              ldi R30,1
 03D0 9E07              cpc R25,R30
 03D2 90F3              brlo L97
 03D4                   .dbline 225
 03D4           ;               PORTA = 0xFF;
 03D4           ;               PORTB <<= BIT(0);
 03D4           ;               WDR();
 03D4           ;       }
 03D4           ;       PORTA = 0x00;
 03D4 2224              clr R2
 03D6 2BBA              out 0x1b,R2
 03D8                   .dbline -2
 03D8           L92:
 03D8                   .dbline 0 ; func end
 03D8 0895              ret
 03DA                   .dbsym r i 16 c
 03DA                   .dbend
 03DA                   .dbfunc e main _main fV
 03DA           ;              i -> R20
                        .even
 03DA           _main::
 03DA 2397              sbiw R28,3
 03DC                   .dbline -1
 03DC                   .dbline 229
 03DC           ; }
 03DC           ; //
 03DC           ; void main(void)
 03DC           ; {
 03DC                   .dbline 231
 03DC           ;       uchar i;
 03DC           ;       init_devices();
 03DC F8DE              xcall _init_devices
 03DE                   .dbline 232
 03DE           ;       reset_ctrl();
 03DE B9DF              xcall _reset_ctrl
 03E0           L102:
 03E0                   .dbline 234
 03E0           ;       
 03E0           ;       do{
 03E0                   .dbline 235
 03E0           ;               if ( !( PIND & BIT(PD2) ) ){            //键盘扫描
 03E0 8299              sbic 0x10,2
 03E2 30C0              rjmp L105
 03E4                   .dbline 235
 03E4                   .dbline 236
 03E4           ;                       display();
 03E4 2FDF              xcall _display
 03E6                   .dbline 237
 03E6           ;                       display();
 03E6 2EDF              xcall _display
 03E8                   .dbline 238
 03E8           ;                       display();
 03E8 2DDF              xcall _display
 03EA                   .dbline 239
 03EA           ;                       if( !( PIND & BIT(PD2) ) ){
 03EA 8299              sbic 0x10,2
 03EC 2BC0              rjmp L107
 03EE                   .dbline 239
 03EE                   .dbline 240
 03EE           ;                               key_buf = scan_key();
 03EE 18DE              xcall _scan_key
 03F0 10930100          sts _key_buf+1,R17
 03F4 00930000          sts _key_buf,R16
 03F8                   .dbline 241
 03F8           ;                               tbuf[0] = (uchar)( key_buf & 0x00FF );
 03F8 C801              movw R24,R16
 03FA 9070              andi R25,0
 03FC 80931000          sts _tbuf,R24
 0400                   .dbline 242
 0400           ;                               tbuf[1] = (uchar)( key_buf >> 8 );
 0400 1801              movw R2,R16
 0402 232C              mov R2,R3
 0404 3324              clr R3
 0406 20921100          sts _tbuf+1,R2
 040A                   .dbline 243
 040A           ;                               master( 0x01, tbuf, 0, 2 );
 040A 82E0              ldi R24,2
 040C 8A83              std y+2,R24
 040E 2224              clr R2
 0410 2882              std y+0,R2
 0412 20E0              ldi R18,<_tbuf
 0414 30E0              ldi R19,>_tbuf
 0416 01E0              ldi R16,1
 0418 55DE              xcall _master
 041A                   .dbline 244
 041A           ;                               key_counter = 0;
 041A 2224              clr R2
 041C 3324              clr R3
 041E 30921B00          sts _key_counter+1,R3
 0422 20921A00          sts _key_counter,R2
 0426 0CC0              xjmp L111
 0428           L110:
 0428                   .dbline 245
 0428           ;                               while( !( PIND & BIT(PD2) ) ){
 0428                   .dbline 246
 0428           ;                                       display();
 0428 0DDF              xcall _display
 042A                   .dbline 247
 042A           ;                                       if ( key_counter > 9 ) break;
 042A 89E0              ldi R24,9
 042C 90E0              ldi R25,0
 042E 20901A00          lds R2,_key_counter
 0432 30901B00          lds R3,_key_counter+1
 0436 8215              cp R24,R2
 0438 9305              cpc R25,R3
 043A 08F4              brsh L113
 043C                   .dbline 247
 043C 03C0              xjmp L112
 043E           L113:
 043E                   .dbline 248
 043E A895              wdr
 0440                   .dbline 249
 0440           L111:
 0440                   .dbline 245
 0440 829B              sbis 0x10,2
 0442 F2CF              rjmp L110
 0444           L112:
 0444                   .dbline 250
 0444           ;                                       WDR();
 0444           ;                               }
 0444           ;                       }
 0444           L107:
 0444                   .dbline 251
 0444           ;               }
 0444           L105:
 0444                   .dbline 252
 0444 4427              clr R20
 0446 16C0              xjmp L118
 0448           L115:
 0448                   .dbline 252
 0448           ;               for ( i = 0; i < 16; i ++){
 0448                   .dbline 253
 0448           ;                       if ( key_buf & BIT(i) ){
 0448 242F              mov R18,R20
 044A 3327              clr R19
 044C 01E0              ldi R16,1
 044E 10E0              ldi R17,0
 0450 0E940000          xcall lsl16
 0454 20900000          lds R2,_key_buf
 0458 30900100          lds R3,_key_buf+1
 045C 2022              and R2,R16
 045E 3122              and R3,R17
 0460 2220              tst R2
 0462 11F4              brne X3
 0464 3320              tst R3
 0466 29F0              breq L119
 0468           X3:
 0468                   .dbline 253
 0468                   .dbline 254
 0468           ;                               rbuf[4] = i + 1;
 0468 842F              mov R24,R20
 046A 8F5F              subi R24,255    ; addi 1
 046C 80930A00          sts _rbuf+4,R24
 0470                   .dbline 255
 0470           ;                               break;
 0470 03C0              xjmp L117
 0472           L119:
 0472                   .dbline 257
 0472           L116:
 0472                   .dbline 252
 0472 4395              inc R20
 0474           L118:
 0474                   .dbline 252
 0474 4031              cpi R20,16
 0476 40F3              brlo L115
 0478           L117:
 0478                   .dbline 264
 0478           ;                       }
 0478           ;               }
 0478           ;               /*
 0478           ;               if ( sys_flag & BIT( SCOM_EN ) ){       //更新显示缓存
 0478           ;                       master( 0x02, rbuf, 0, 6 );
 0478           ;                       scom_counter = 0;
 0478           ;               }
 0478           ;               */
 0478           ;               WDR();                                                          //复位看门狗
 0478 A895              wdr
 047A                   .dbline 265
 047A           ;               display();                                                      //显示
 047A E4DE              xcall _display
 047C                   .dbline 266
 047C           L103:
 047C                   .dbline 266
 047C B1CF              xjmp L102
 047E           X4:
 047E                   .dbline -2
 047E           L101:
 047E 2396              adiw R28,3
 0480                   .dbline 0 ; func end
 0480 0895              ret
 0482                   .dbsym r i 20 c
 0482                   .dbend
                        .area bss(ram, con, rel)
 0000                   .dbfile E:\AVRATM~1\key_board\keyboard.c
 0000           _key_buf::
 0000                   .blkb 2
 0002                   .dbsym e key_buf _key_buf i
 0002           _r_des_speed::
 0002                   .blkb 2
 0004                   .dbsym e r_des_speed _r_des_speed i
 0004           _l_des_speed::
 0004                   .blkb 2
 0006                   .dbsym e l_des_speed _l_des_speed i
 0006           _rbuf::
 0006                   .blkb 10
 0010                   .dbsym e rbuf _rbuf A[10:10]c
 0010           _tbuf::
 0010                   .blkb 10
 001A                   .dbsym e tbuf _tbuf A[10:10]c
 001A           _key_counter::
 001A                   .blkb 2
 001C                   .dbsym e key_counter _key_counter i
 001C           _scom_counter::
 001C                   .blkb 2
 001E                   .dbsym e scom_counter _scom_counter i
 001E           _delay_counter::
 001E                   .blkb 2
 0020                   .dbsym e delay_counter _delay_counter i

⌨️ 快捷键说明

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