📄 jianpan.s
字号:
clr R10
clr R11
L95:
movw R2,R12
or R2,R10
or R3,R11
tst R2
brne X8
tst R3
breq L90
X8:
cpi R22,15
brne L90
.dbline 325
; {
.dbline 326
; trans_buf[0]=KeySet[KeyIndex];
.dbline 327
; flag=1;
.dbline 328
; numH=10*KeySet[KeyIndex]+flag;
.dbline 329
; NumBitH=num_bit(numH);
ldi R24,<_KeySet
ldi R25,>_KeySet
mov R2,R20
clr R3
add R2,R24
adc R3,R25
movw R30,R2
lpm R30,Z
sts _trans_buf,R30
ldi R22,1
movw R30,R2
lpm R30,Z
ldi R24,10
mul R24,R30
mov R2,R0
add R2,R22
sts _numH,R2
mov R16,R2
clr R17
xcall _num_bit
sts _NumBitH,R16
.dbline 330
; }
xjmp L91
L90:
.dbline 331
; else if(KeySet[KeyIndex]==3&&(flag==STATE))
ldi R24,<_KeySet
ldi R25,>_KeySet
mov R30,R20
clr R31
add R30,R24
adc R31,R25
lpm R30,Z
cpi R30,3
brne L96
cpi R22,15
brne L96
.dbline 332
; {
.dbline 333
; trans_buf[0]=KeySet[KeyIndex];
.dbline 334
; transmit();
mov R30,R20
clr R31
add R30,R24
adc R31,R25
lpm R30,Z
sts _trans_buf,R30
xcall _transmit
.dbline 335
; flag=0xff;
ldi R22,255
.dbline 336
; }
xjmp L97
L96:
.dbline 337
; else if((flag>=PAR1)&&(flag<=PAR7)&&( KeySet[KeyIndex]!=ENTER)&&( KeySet[KeyIndex]!=CANCEL))
cpi R22,1
brlo L98
ldi R24,7
cp R24,R22
brlo L98
ldi R24,<_KeySet
ldi R25,>_KeySet
mov R30,R20
clr R31
add R30,R24
adc R31,R25
lpm R2,Z
clr R3
mov R24,R2
cpi R24,15
breq L98
cpi R24,12
breq L98
.dbline 338
; {
.dbline 339
; numL=10*numL+KeySet[KeyIndex];
.dbline 340
; NumBitL=num_bit(numL);
ldi R24,<_KeySet
ldi R25,>_KeySet
mov R30,R20
clr R31
add R30,R24
adc R31,R25
lpm R2,Z
clr R3
lds R18,_numL
lds R19,_numL+1
ldi R16,10
ldi R17,0
xcall empy16s
movw R4,R16
add R4,R2
adc R5,R3
sts _numL+1,R5
sts _numL,R4
movw R16,R4
xcall _num_bit
sts _NumBitL,R16
.dbline 341
; }
xjmp L99
L98:
.dbline 342
; else if(KeySet[KeyIndex]==CANCEL)
ldi R24,<_KeySet
ldi R25,>_KeySet
mov R30,R20
clr R31
add R30,R24
adc R31,R25
lpm R30,Z
cpi R30,12
brne L100
.dbline 343
; {
.dbline 344
; numL = numL/10;
.dbline 345
; NumBitL = num_bit(numL);
ldi R18,10
ldi R19,0
lds R16,_numL
lds R17,_numL+1
xcall div16u
sts _numL+1,R17
sts _numL,R16
xcall _num_bit
sts _NumBitL,R16
.dbline 346
; }
xjmp L101
L100:
.dbline 347
; else if(KeySet[KeyIndex]==ENTER)
ldi R24,<_KeySet
ldi R25,>_KeySet
mov R30,R20
clr R31
add R30,R24
adc R31,R25
lpm R30,Z
cpi R30,15
breq X10
xjmp L102
X10:
.dbline 348
; {
.dbline 349
; trans_buf[flag]=numL;
ldi R24,<_trans_buf
ldi R25,>_trans_buf
mov R30,R22
clr R31
add R30,R24
adc R31,R25
lds R2,_numL
lds R3,_numL+1
std z+0,R2
.dbline 350
; flag++;
.dbline 351
; numH++;
.dbline 352
; numL=0;
.dbline 353
; NumBitL=0;
.dbline 354
; if ((flag==Model1_flag)&&(numH/10==1))//模式1参数个数Model1_flag
inc R22
lds R24,_numH
subi R24,255 ; addi 1
sts _numH,R24
clr R2
clr R3
sts _numL+1,R3
sts _numL,R2
sts _NumBitL,R2
cpi R22,8
brne L104
ldi R17,10
mov R16,R24
xcall div8u
cpi R16,1
brne L104
.dbline 355
; {
.dbline 356
; flag=0xff;
.dbline 357
; transmit();
ldi R22,255
xcall _transmit
.dbline 358
; numH=0;
.dbline 359
; NumBitH=0;
clr R2
sts _numH,R2
sts _NumBitH,R2
.dbline 360
; }
xjmp L103
L104:
.dbline 361
; else if ((flag==Model2_flag)&&(numH/10==2))//模式2参数个数Model2_flag
cpi R22,4
breq X11
xjmp L103
X11:
ldi R17,10
lds R16,_numH
xcall div8u
cpi R16,2
breq X12
xjmp L103
X12:
.dbline 362
; {
.dbline 363
; flag=0xff;
.dbline 364
; transmit();
ldi R22,255
xcall _transmit
.dbline 365
; numH=0;
.dbline 366
; NumBitH=0;
clr R2
sts _numH,R2
sts _NumBitH,R2
.dbline 367
; }
.dbline 368
; }
xjmp L103
L102:
.dbline 369
; else if(((KeySet[KeyIndex]!=1)|(KeySet[KeyIndex]!=2)|(KeySet[KeyIndex]!=3))&&(flag==STATE)) {edit();}
ldi R24,<_KeySet
ldi R25,>_KeySet
mov R30,R20
clr R31
add R30,R24
adc R31,R25
lpm R30,Z
cpi R30,1
breq L110
ldi R24,1
ldi R25,0
movw R14,R24
xjmp L111
L110:
clr R14
clr R15
L111:
ldi R24,<_KeySet
ldi R25,>_KeySet
mov R30,R20
clr R31
add R30,R24
adc R31,R25
lpm R30,Z
cpi R30,2
breq L112
ldi R24,1
ldi R25,0
movw R12,R24
xjmp L113
L112:
clr R12
clr R13
L113:
ldi R24,<_KeySet
ldi R25,>_KeySet
mov R30,R20
clr R31
add R30,R24
adc R31,R25
lpm R30,Z
cpi R30,3
breq L114
ldi R24,1
ldi R25,0
movw R10,R24
xjmp L115
L114:
clr R10
clr R11
L115:
movw R2,R14
or R2,R12
or R3,R13
or R2,R10
or R3,R11
tst R2
brne X9
tst R3
breq L108
X9:
cpi R22,15
brne L108
.dbline 369
.dbline 369
xcall _edit
.dbline 369
L108:
L103:
L101:
L99:
L97:
L91:
.dbline 371
;
; }
L81:
.dbline 372
; }
L79:
.dbline 373
xcall _display
.dbline 374
L77:
.dbline 312
cpi R22,255
breq X13
xjmp L76
X13:
.dbline 375
; display();
; }
; mode=FREE;
ldi R24,113
sts _mode,R24
.dbline -2
.dbline 376
; }
L75:
xcall pop_gset5
.dbline 0 ; func end
ret
.dbsym r KeyIndex 20 c
.dbsym r flag 22 c
.dbsym r i 10 c
.dbend
.dbfunc e reset _reset fV
.even
_reset::
.dbline -1
.dbline 379
;
; void reset( void )
; {
.dbline 380
; for(DelayCounter = 0; DelayCounter < 500;)
clr R2
clr R3
sts _DelayCounter+1,R3
sts _DelayCounter,R2
xjmp L120
L117:
.dbline 381
.dbline 382
ldi R24,255
out 0x1b,R24
.dbline 383
in R2,0x18
lsl R2
out 0x18,R2
.dbline 384
wdr
.dbline 385
L118:
.dbline 380
L120:
.dbline 380
lds R24,_DelayCounter
lds R25,_DelayCounter+1
cpi R24,244
ldi R30,1
cpc R25,R30
brlo L117
.dbline 386
; {
; PORTA = 0xFF;
; PORTB <<= BIT(0);
; WDR();
; }
; SysCounter = 0;
.dbline 387
; DelayCounter=0;
.dbline 388
; Cursor = 0;
.dbline 389
; CursorDir = 0;
clr R2
clr R3
sts _SysCounter+1,R3
sts _SysCounter,R2
sts _DelayCounter+1,R3
sts _DelayCounter,R2
sts _Cursor,R2
sts _CursorDir,R2
.dbline -2
.dbline 391
; //p_speed=speed_table[0];
; }
L116:
.dbline 0 ; func end
ret
.dbend
.dbfunc e main _main fV
; KeyIndex -> R20
; i -> R22
.even
_main::
.dbline -1
.dbline 394
; //
; void main(void)
; {
.dbline 396
; uchar i;
; init_devices();
xcall _init_devices
.dbline 397
; reset();
xcall _reset
.dbline 398
; send(7,0x79);
ldi R18,121
ldi R16,7
xcall _send
xjmp L123
L122:
.dbline 400
; while( 1 )
; {
.dbline 401
; mode=FREE;
.dbline 402
; WDR();
ldi R24,113
sts _mode,R24
wdr
.dbline 403
; if( !(PIND & BIT(PD2)) ) // 检测按键状态
sbic 0x10,2
rjmp L125
.dbline 404
; {
.dbline 405
; display(); //延时
xcall _display
.dbline 406
; display(); //延时
xcall _display
.dbline 407
; if( !(PIND & BIT(PD2)) ) //再次检测按键状态
sbic 0x10,2
rjmp L126
.dbline 408
; {
.dbline 409
; uchar KeyIndex = scan_key(); // 读取扫描序号
xcall _scan_key
mov R20,R16
xjmp L130
L129:
.dbline 410
.dbline 410
wdr
.dbline 410
xcall _display
.dbline 410
L130:
.dbline 410
; while( !(PIND & BIT(PD2)) ) { WDR(); display(); }; //等待按键松开
sbis 0x10,2
rjmp L129
.dbline 410
.dbline 411
clr R22
xjmp L135
L132:
.dbline 411
.dbline 411
xcall _display
.dbline 411
L133:
.dbline 411
inc R22
L135:
.dbline 411
; for( i = 0; i < 5; i ++ ) { display(); } //延时
cpi R22,5
brlo L132
.dbline 413
; //按下编辑键
; if(KeySet[KeyIndex]==EDIT)
ldi R24,<_KeySet
ldi R25,>_KeySet
mov R30,R20
clr R31
add R30,R24
adc R31,R25
lpm R30,Z
cpi R30,14
brne L136
.dbline 414
; {
.dbline 415
; mode=0x79; //''E'
.dbline 416
; edit();
ldi R24,121
sts _mode,R24
xcall _edit
.dbline 417
; }
xjmp L126
L136:
.dbline 418
; else if(KeySet[KeyIndex]==ENTER)
ldi R24,<_KeySet
ldi R25,>_KeySet
mov R30,R20
clr R31
add R30,R24
adc R31,R25
lpm R30,Z
cpi R30,15
breq X15
xjmp L126
X15:
.dbline 419
; {
.dbline 420
; transmit();
xcall _transmit
.dbline 421
; }
.dbline 422
; }
.dbline 423
; }
xjmp L126
L125:
.dbline 425
; else
; {
.dbline 426
; if( SysCounter > 500 )
ldi R24,500
ldi R25,1
lds R2,_SysCounter
lds R3,_SysCounter+1
cp R24,R2
cpc R25,R3
brsh L140
.dbline 427
; {
.dbline 428
; SysCounter = 0;
.dbline 429
; if( CursorDir == 0 )
clr R2
clr R3
sts _SysCounter+1,R3
sts _SysCounter,R2
lds R2,_CursorDir
tst R2
brne L142
.dbline 430
; {
.dbline 431
; if( ++Cursor == 7 ) { CursorDir = 1; }
lds R24,_Cursor
subi R24,255 ; addi 1
mov R2,R24
sts _Cursor,R2
cpi R24,7
brne L143
.dbline 431
.dbline 431
ldi R24,1
sts _CursorDir,R24
.dbline 431
.dbline 432
; }
xjmp L143
L142:
.dbline 433
; else if( CursorDir == 1 )
lds R24,_CursorDir
cpi R24,1
brne L146
.dbline 434
; {
.dbline 435
; if( --Cursor == 0 ) { CursorDir = 0; }
lds R24,_Cursor
subi R24,1
mov R2,R24
sts _Cursor,R2
tst R24
brne L148
.dbline 435
.dbline 435
clr R2
sts _CursorDir,R2
.dbline 435
L148:
.dbline 436
; }
L146:
L143:
.dbline 437
; }
L140:
.dbline 438
; PORTA = 0x40; //显示'_'
ldi R24,64
out 0x1b,R24
.dbline 439
; PORTB = 0xFF;
ldi R24,255
out 0x18,R24
.dbline 440
; PORTB &= ~BIT( Cursor );
lds R17,_Cursor
ldi R16,1
xcall lsl8
mov R2,R16
com R2
in R3,0x18
and R3,R2
out 0x18,R3
.dbline 441
; delay(1);
ldi R16,1
ldi R17,0
xcall _delay
.dbline 442
; }
L126:
.dbline 443
L123:
.dbline 399
xjmp L122
X14:
.dbline -2
.dbline 444
; }
; }
L121:
.dbline 0 ; func end
ret
.dbsym r KeyIndex 20 c
.dbsym r i 22 c
.dbend
.area bss(ram, con, rel)
.dbfile E:\李斐机器人\周卓\键盘_3\键盘_3yuan\jianpan.c
_receive_buf::
.blkb 20
.dbsym e receive_buf _receive_buf A[20:20]c
_trans_buf::
.blkb 20
.dbsym e trans_buf _trans_buf A[20:20]c
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -