📄 ex_support.s
字号:
ldi R16,20
rjmp L44
L75:
.dbline 456
; }
; else if (!(PINC & (BIT(3))))
sbic 0x13,3
rjmp L77
X33:
.dbline 457
; {
.dbline 458
; chTempKeyCode = 19;
.dbline 459
; return chTempKeyCode;
ldi R16,19
rjmp L44
L77:
.dbline 461
; }
; else if (!(PINC & (BIT(2))))
sbic 0x13,2
rjmp L79
X34:
.dbline 462
; {
.dbline 463
; chTempKeyCode = 18;
.dbline 464
; return chTempKeyCode;
ldi R16,18
rjmp L44
L79:
.dbline 466
; }
; else if (!(PINC & (BIT(1))))
sbic 0x13,1
rjmp L81
X35:
.dbline 467
; {
.dbline 468
; chTempKeyCode = 17;
.dbline 469
; return chTempKeyCode;
ldi R16,17
rjmp L44
L81:
.dbline 477
; }
;
;
;
; //////////////////////////////////////////////////////////////
; //对15-13按钮进行扫描
;
; DDRC &= ~(BIT(1) | BIT(3) |
in R24,0x14
andi R24,209
out 0x14,R24
.dbline 480
; BIT(2) | BIT(5)); //把端口pc1-pc3、pc5设置为输入
;
; DDRC |= BIT(4); //把pc4端口设为输出
sbi 0x14,4
.dbline 482
;
; PORTC |= BIT(1) | BIT(2) | BIT(3) |
in R24,0x15
ori R24,62
out 0x15,R24
.dbline 485
; BIT(4) | BIT(5);
;
; PORTC &= ~BIT(4); //把pc4端口拉低
cbi 0x15,4
.dbline 486
; NOP();
nop
.dbline 487
; NOP();
nop
.dbline 490
;
;
; if (!(PINC & (BIT(3)))) //读取pc3端口,如果返回值是0则表明按键被按下,
sbic 0x13,3
rjmp L83
X36:
.dbline 494
; //则返回按键的值
; //以下依次对pc2-pc1逐个读取值,如果返回值为0
; //则返回相应按键值
; {
.dbline 495
; chTempKeyCode = 15;
.dbline 496
; return chTempKeyCode;
ldi R16,15
rjmp L44
L83:
.dbline 498
; }
; else if (!(PINC & (BIT(2))))
sbic 0x13,2
rjmp L85
X37:
.dbline 499
; {
.dbline 500
; chTempKeyCode = 14;
.dbline 501
; return chTempKeyCode;
ldi R16,14
rjmp L44
L85:
.dbline 503
; }
; else if (!(PINC & (BIT(1))))
sbic 0x13,1
rjmp L87
X38:
.dbline 504
; {
.dbline 505
; chTempKeyCode = 13;
.dbline 506
; return chTempKeyCode;
ldi R16,13
rjmp L44
L87:
.dbline 514
; }
;
;
;
; //////////////////////////////////////////////////////////////
; //对10-9按钮进行扫描
;
; DDRC &= ~(BIT(2) | BIT(1) |
in R24,0x14
andi R24,201
out 0x14,R24
.dbline 517
; BIT(4) | BIT(5)); //把端口pc1-pc2、pc4-pc5设置为输入
;
; DDRC |= BIT(3); //把pc3端口设为输出
sbi 0x14,3
.dbline 519
;
; PORTC |= BIT(1) | BIT(2) |
in R24,0x15
ori R24,62
out 0x15,R24
.dbline 522
; BIT(3) | BIT(4) | BIT(5);
;
; PORTC &= ~BIT(3); //把pc3端口拉低
cbi 0x15,3
.dbline 523
; NOP();
nop
.dbline 524
; NOP();
nop
.dbline 527
;
;
; if (!(PINC & (BIT(2)))) //读取pc2端口,如果返回值是0则表明按键被按下,
sbic 0x13,2
rjmp L89
X39:
.dbline 529
; //则返回按键的值
; {
.dbline 530
; chTempKeyCode = 10;
.dbline 531
; return chTempKeyCode;
ldi R16,10
rjmp L44
L89:
.dbline 533
; }
; else if (!(PINC & (BIT(1)))) //读取pc1端口,如果返回值是0则表明按键被按下,
sbic 0x13,1
rjmp L91
X40:
.dbline 535
; //则返回按键的值
; {
.dbline 536
; chTempKeyCode = 9;
.dbline 537
; return chTempKeyCode;
ldi R16,9
rjmp L44
L91:
.dbline 543
; }
;
;
; //////////////////////////////////////////////////////
; //对5按钮进行扫描
; DDRC &= ~(BIT(4) | BIT(1) |
in R24,0x14
andi R24,197
out 0x14,R24
.dbline 546
; BIT(3) | BIT(5)); //把端口pc1、pc3-pc4设置为输入
;
; DDRC |= BIT(2); //把pc2端口设为输出
sbi 0x14,2
.dbline 548
;
; PORTC |= BIT(1) | BIT(2) | BIT(3) |
in R24,0x15
ori R24,62
out 0x15,R24
.dbline 551
; BIT(4) | BIT(5);
;
; PORTC &= ~BIT(2); //把pc2端口拉低
cbi 0x15,2
.dbline 552
; NOP();
nop
.dbline 553
; NOP();
nop
.dbline 555
;
; if (!(PINC & (BIT(1)))) //读取pc1端口,如果返回值是0则表明按键被按下,
sbic 0x13,1
rjmp L93
X41:
.dbline 557
; //则返回按键的值
; {
.dbline 558
; chTempKeyCode = 5;
.dbline 559
; return chTempKeyCode;
ldi R16,5
rjmp L44
L93:
.dbline 563
; }
;
;
; return chTempKeyCode; //返回按键值
ldi R16,255
.dbline -2
L44:
.dbline 0 ; func end
ret
.dbend
.area lit(rom, con, rel)
L96:
.byte 192,249
.byte 164,176
.byte 153,146
.byte 130,248
.byte 128,144
.area text(rom, con, rel)
.dbfile F:\AVR\按键扫描\EX_Support.c
.dbfunc e Get_Code _Get_Code fc
.area func_lit(rom, con, rel)
L148:
.word `L100
.word `L102
.word `L104
.word `L106
.word `L108
.word `L110
.word `L112
.word `L114
.word `L116
.word `L118
.word `L119
.word `L121
.word `L123
.word `L125
.word `L127
.word `L129
.word `L131
.word `L133
.word `L135
.word `L137
.word `L138
.word `L140
.word `L142
.word `L144
.word `L146
.area text(rom, con, rel)
; Table -> y+0
; chj0 -> R20
; chi -> R10
.even
_Get_Code::
st -y,R10
st -y,R20
mov R10,R16
sbiw R28,10
.dbline -1
.dbline 567
; }
;
; UINT8 Get_Code (UINT8 chi)
; {
.dbline 569
; UINT8 chj;
; UINT8 Table[10]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};
ldi R24,<L96
ldi R25,>L96
movw R30,R28
ldi R16,10
ldi R17,0
st -y,R31
st -y,R30
st -y,R25
st -y,R24
rcall asgncblk
.dbline 570
; switch(chi)
mov R20,R10
cpi R20,1
brsh X45
rjmp L97
X45:
X42:
ldi R24,25
cp R24,R10
brsh X46
rjmp L97
X46:
X43:
ldi R24,<L148
ldi R25,>L148
mov R30,R20
subi R30,1
clr R31
lsl R30
rol R31
add R30,R24
adc R31,R25
lpm R2,Z+
lpm R3,Z
movw R30,R2
ijmp
X44:
.dbfile F:\AVR\按键扫描\EX_Support.c
.dbline 571
; {
L100:
.dbline 572
; case 1: chj = Table[1];break;
ldd R20,y+1
.dbline 572
rjmp L98
L102:
.dbline 573
; case 2: chj = Table[2];break;
ldd R20,y+2
.dbline 573
rjmp L98
L104:
.dbline 574
; case 3: chj = Table[3];break;
ldd R20,y+3
.dbline 574
rjmp L98
L106:
.dbline 575
; case 4: chj = Table[4];break;
ldd R20,y+4
.dbline 575
rjmp L98
L108:
.dbline 576
; case 5: chj = Table[5];break;
ldd R20,y+5
.dbline 576
rjmp L98
L110:
.dbline 577
; case 6: chj = Table[6];break;
ldd R20,y+6
.dbline 577
rjmp L98
L112:
.dbline 578
; case 7: chj = Table[7];break;
ldd R20,y+7
.dbline 578
rjmp L98
L114:
.dbline 579
; case 8: chj = Table[8];break;
ldd R20,y+8
.dbline 579
rjmp L98
L116:
.dbline 580
; case 9: chj = Table[9];break;
ldd R20,y+9
.dbline 580
rjmp L98
L118:
.dbline 581
; case 10: chj = Table[0];break;
ldd R20,y+0
.dbline 581
rjmp L98
L119:
.dbline 582
; case 11: chj = Table[1];break;
ldd R20,y+1
.dbline 582
rjmp L98
L121:
.dbline 583
; case 12: chj = Table[2];break;
ldd R20,y+2
.dbline 583
rjmp L98
L123:
.dbline 584
; case 13: chj = Table[3];break;
ldd R20,y+3
.dbline 584
rjmp L98
L125:
.dbline 585
; case 14: chj = Table[4];break;
ldd R20,y+4
.dbline 585
rjmp L98
L127:
.dbline 586
; case 15: chj = Table[5];break;
ldd R20,y+5
.dbline 586
rjmp L98
L129:
.dbline 587
; case 16: chj = Table[6];break;
ldd R20,y+6
.dbline 587
rjmp L98
L131:
.dbline 588
; case 17: chj = Table[7];break;
ldd R20,y+7
.dbline 588
rjmp L98
L133:
.dbline 589
; case 18: chj = Table[8];break;
ldd R20,y+8
.dbline 589
rjmp L98
L135:
.dbline 590
; case 19: chj = Table[9];break;
ldd R20,y+9
.dbline 590
rjmp L98
L137:
.dbline 591
; case 20: chj = Table[0];break;
ldd R20,y+0
.dbline 591
rjmp L98
L138:
.dbline 592
; case 21: chj = Table[1];break;
ldd R20,y+1
.dbline 592
rjmp L98
L140:
.dbline 593
; case 22: chj = Table[2];break;
ldd R20,y+2
.dbline 593
rjmp L98
L142:
.dbline 594
; case 23: chj = Table[3];break;
ldd R20,y+3
.dbline 594
rjmp L98
L144:
.dbline 595
; case 24: chj = Table[4];break;
ldd R20,y+4
.dbline 595
rjmp L98
L146:
.dbline 596
; case 25: chj = Table[5];break;
ldd R20,y+5
.dbline 596
rjmp L98
L97:
.dbline 597
; default: chj = 0xFF;
ldi R20,255
.dbline 598
; }
L98:
.dbline 599
; return chj;
mov R16,R20
.dbline -2
L95:
.dbline 0 ; func end
adiw R28,10
ld R20,y+
ld R10,y+
ret
.dbsym l Table 0 A[10:10]c
.dbsym r chj0 20 c
.dbsym r chi 10 c
.dbend
; }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -