📄 keyboard.lis
字号:
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 + -