📄 main.s
字号:
xcall _DisplayNumChar
.dbline 281
; }
xjmp L74
L73:
.dbline 282
; else if(KeySt03==0) //++
in R20,0x16
andi R20,4
out 0x16,R20
tst R20
brne L82
X30:
.dbline 283
; {
.dbline 285
; //等待该键释放
; Delay(200);
ldi R16,200
ldi R17,0
xcall _Delay
xjmp L85
L84:
.dbline 286
; while(KeySt03==0) Delay(200);
ldi R16,200
ldi R17,0
xcall _Delay
L85:
.dbline 286
in R20,0x16
andi R20,4
out 0x16,R20
tst R20
breq L84
X31:
.dbline 287
; if(hl==0) SB_Amp=(++SB_Amp)&0x0F;
tst R12
brne L87
X32:
.dbline 287
mov R20,R10
subi R20,255 ; addi 1
mov R24,R20
andi R24,15
mov R10,R24
xjmp L88
L87:
.dbline 288
; else SB_Freq=(++SB_Freq)&0x0F;
mov R20,R22
subi R20,255 ; addi 1
mov R22,R20
andi R22,15
L88:
.dbline 290
; //显示当前音量:
; DisplayNumChar(6,16,SB_Amp,2);
ldi R24,2
std y+2,R24
std y+0,R10
ldi R18,16
ldi R16,6
xcall _DisplayNumChar
.dbline 291
; DisplayNumChar(6,80,SB_Freq,2);
ldi R24,2
std y+2,R24
std y+0,R22
ldi R18,80
ldi R16,6
xcall _DisplayNumChar
.dbline 292
; }
xjmp L83
L82:
.dbline 293
; else if(KeySt04==0) //确定退出
in R20,0x16
andi R20,8
out 0x16,R20
tst R20
breq X43
xjmp L89
X43:
X33:
.dbline 294
; {//等待该键释放
.dbline 295
; Delay(200);
ldi R16,200
ldi R17,0
xcall _Delay
xjmp L92
L91:
.dbline 296
; while(KeySt04==0) Delay(200);
ldi R16,200
ldi R17,0
xcall _Delay
L92:
.dbline 296
in R20,0x16
andi R20,8
out 0x16,R20
tst R20
breq L91
X34:
.dbline 297
; hl=(++hl)%2;
mov R20,R12
subi R20,255 ; addi 1
ldi R17,2
mov R16,R20
xcall mod8u
mov R12,R16
.dbline 298
; if(hl==0) //设置完毕,保存结果并退出
tst R16
brne L94
X35:
.dbline 299
; {
.dbline 300
; *VBass=(SB_Amp*16+SB_Freq);
ldi R24,16
mul R24,R10
mov R2,R0
add R2,R22
ldd R30,y+13
ldd R31,y+14
std z+0,R2
.dbline 301
; Tmp=*VBass;
ldd R20,z+0
clr R21
.dbline 303
; //保存重低音音量到E2PROM
; E2PROM_Write(1,VBass,1);
ldi R24,1
std y+0,R24
movw R18,R30
ldi R16,1
ldi R17,0
xcall _E2PROM_Write
.dbline 304
; break;
xjmp L72
L94:
.dbline 305
; }else if(hl==1) //1.设置完毕,设置2.
mov R24,R12
cpi R24,1
brne L90
X36:
.dbline 306
; {
.dbline 307
; PrintOneASCII(1,0,'>');
ldi R24,62
std y+0,R24
clr R18
ldi R16,1
xcall _PrintOneASCII
.dbline 308
; PrintOneASCII(0,0,' '); //设置下一项
ldi R24,32
std y+0,R24
clr R18
clr R16
xcall _PrintOneASCII
.dbline 309
; }
.dbline 310
; }
xjmp L90
L89:
.dbline 311
; else if(KeySt01==0) //取消退出
in R24,0x16
andi R24,1
mov R14,R24
out 0x16,R24
tst R24
brne L98
X37:
.dbline 312
; {//等待该键释放
.dbline 313
; Delay(200);
ldi R16,200
ldi R17,0
xcall _Delay
xjmp L101
L100:
.dbline 314
; while(KeySt01==0) Delay(200);
ldi R16,200
ldi R17,0
xcall _Delay
L101:
.dbline 314
in R24,0x16
andi R24,1
mov R14,R24
out 0x16,R24
tst R24
breq L100
X38:
.dbline 315
; Tmp=DefaultBass; //恢复到默认值
ldi R20,85
ldi R21,0
.dbline 316
; *VBass=0x55;
ldi R24,85
ldd R30,y+13
ldd R31,y+14
std z+0,R24
.dbline 318
; //保存默认的重低音音量到E2PROM
; E2PROM_Write(1,VBass,1);
ldi R24,1
std y+0,R24
movw R18,R30
ldi R16,1
ldi R17,0
xcall _E2PROM_Write
.dbline 319
; break;
xjmp L72
L98:
L90:
L83:
L74:
.dbline 321
; }
; if(hl==0)
tst R12
brne L103
X39:
.dbline 322
; {
.dbline 323
; PrintOneASCII(0,0,'>');
ldi R24,62
std y+0,R24
clr R18
clr R16
xcall _PrintOneASCII
.dbline 324
; PrintOneASCII(1,0,' ');
ldi R24,32
std y+0,R24
clr R18
ldi R16,1
xcall _PrintOneASCII
.dbline 325
; }else if(hl==1)
xjmp L104
L103:
.dbline 325
mov R24,R12
cpi R24,1
brne L105
X40:
.dbline 326
; {
.dbline 327
; PrintOneASCII(1,0,'>');
ldi R24,62
std y+0,R24
clr R18
ldi R16,1
xcall _PrintOneASCII
.dbline 328
; PrintOneASCII(0,0,' '); //设置下一项
ldi R24,32
std y+0,R24
clr R18
clr R16
xcall _PrintOneASCII
.dbline 329
; }
L105:
L104:
.dbline 330
; }
L71:
.dbline 265
xjmp L70
L72:
.dbline 332
; //选中Vs1011
; SPI_CS_Deassert(); //PB2=1,释放MMC/SD卡
sbi 0x18,4
.dbline 334
; //写入当前音量:
; retry=0;
clr R22
xjmp L108
L107:
.dbline 336
; while(VS1011B_ReadCMD(0x02) != Tmp)//设低音音量
; {
.dbline 337
; VS1011B_WriteCMD(0x02,Tmp);
movw R18,R20
ldi R16,2
xcall _VS1011B_WriteCMD
.dbline 338
; if(retry++ >10 )
mov R10,R22
clr R11
subi R22,255 ; addi 1
ldi R24,10
cp R24,R10
brsh L110
X41:
.dbline 339
; {
.dbline 340
; PrintConstAscStr(7,0,ScreenStr12[19],16);
ldi R24,16
std y+2,R24
ldi R24,<_ScreenStr12+304
ldi R25,>_ScreenStr12+304
std y+1,R25
std y+0,R24
clr R18
ldi R16,7
xcall _PrintConstAscStr
.dbline 341
; Delay(1000);
ldi R16,1000
ldi R17,3
xcall _Delay
.dbline 343
; //释放Vs1011
; VS1011B_DDR |= BIT(VS1011B_XCS)|BIT(VS1011B_XRESET); //XCS,XDCS=1
in R24,0x1a
ori R24,66
out 0x1a,R24
.dbline 344
; SPI_CS_Assert();
cbi 0x18,4
.dbline 345
; return ;
xjmp L64
L110:
.dbline 347
; }
; }
L108:
.dbline 335
ldi R16,2
xcall _VS1011B_ReadCMD
movw R10,R16
cp R16,R20
cpc R17,R21
brne L107
X42:
.dbline 349
; //释放Vs1011
; VS1011B_DDR |= BIT(VS1011B_XCS)|BIT(VS1011B_XRESET); //XCS,XDCS=1
in R24,0x1a
ori R24,66
out 0x1a,R24
.dbline 350
; SPI_CS_Assert();
cbi 0x18,4
.dbline -2
L64:
.dbline 0 ; func end
adiw R28,3
xcall pop_xgsetF0FC
adiw R28,2
ret
.dbsym r retry 22 c
.dbsym r SB_Amp 10 c
.dbsym r Tmp 20 i
.dbsym r SB_Freq 22 c
.dbsym r hl 12 c
.dbsym l VBass 13 pc
.dbend
.dbfunc e ChangePlayPosition _ChangePlayPosition fV
; Bak_Pos -> R12,R13
; j -> R20
; i -> R22
; Pos -> R10,R11
.even
_ChangePlayPosition::
xcall push_xgsetF0FC
movw R10,R16
sbiw R28,3
.dbline -1
.dbline 354
; }
;
; void ChangePlayPosition(unsigned int * Pos)
; {
.dbline 355
; unsigned char i,j=3;
ldi R20,3
.dbline 356
; unsigned int Bak_Pos=*Pos;
movw R30,R10
ldd R12,z+0
ldd R13,z+1
.dbline 358
;
; PrintConstAscStr(0,0,ScreenStr12[28],16);
ldi R24,16
std y+2,R24
ldi R24,<_ScreenStr12+448
ldi R25,>_ScreenStr12+448
std y+1,R25
std y+0,R24
clr R18
clr R16
xcall _PrintConstAscStr
.dbline 359
; PrintConstAscStr(1,0,ScreenStr12[18],16);
ldi R24,16
std y+2,R24
ldi R24,<_ScreenStr12+288
ldi R25,>_ScreenStr12+288
std y+1,R25
std y+0,R24
clr R18
ldi R16,1
xcall _PrintConstAscStr
.dbline 360
; DisplayNumChar(4,8,0,3);DisplayNumChar(4,80,DEF_MAX_SONGS,3);
ldi R24,3
std y+2,R24
clr R2
std y+0,R2
ldi R18,8
ldi R16,4
xcall _DisplayNumChar
.dbline 360
ldi R24,3
std y+2,R24
lds R2,_DEF_MAX_SONGS
lds R3,_DEF_MAX_SONGS+1
std y+0,R2
ldi R18,80
ldi R16,4
xcall _DisplayNumChar
.dbline 361
; for(i=1;i<7;i++)
ldi R22,1
xjmp L119
L116:
.dbline 362
; PrintOneASCII(4,24+i*8,96+0x20); //显示白色长条
ldi R24,128
std y+0,R24
mov R18,R22
lsl R18
lsl R18
lsl R18
subi R18,232 ; addi 24
ldi R16,4
xcall _PrintOneASCII
L117:
.dbline 361
inc R22
L119:
.dbline 361
cpi R22,7
brlo L116
X44:
.dbline 363
; PrintOneASCII(3,48,97+0x20); //中心位置,显示一个滑块
ldi R24,129
std y+0,R24
ldi R18,48
ldi R16,3
xcall _PrintOneASCII
.dbline 366
;
; //显示中间选定位置:
; *Pos=DEF_MAX_SONGS/2;
lds R2,_DEF_MAX_SONGS
lds R3,_DEF_MAX_SONGS+1
lsr R3
ror R2
movw R30,R10
std z+1,R3
std z+0,R2
.dbline 367
; DisplayNumChar(6,16,DEF_MAX_SONGS/2,3);
ldi R24,3
std y+2,R24
lds R2,_DEF_MAX_SONGS
lds R3,_DEF_MAX_SONGS+1
lsr R3
ror R2
std y+0,R2
ldi R18,16
ldi R16,6
xcall _DisplayNumChar
xjmp L121
L120:
.dbline 370
;
; while(1)
; {
.dbline 371
; if(KeySt02==0) //--
in R24,0x16
andi R24,2
out 0x16,R24
tst R24
breq X57
xjmp L123
X57:
X45:
.dbline 372
; {
.dbline 374
; //等待该键释放
; Delay(200);
ldi R16,200
ldi R17,0
xcall _Delay
xjmp L126
L125:
.dbline 375
; while(KeySt02==0) Delay(200);
ldi R16,200
ldi R17,0
xcall _Delay
L126:
.dbline 375
in R24,0x16
andi R24,2
out 0x16,R24
tst R24
breq L125
X46:
.dbline 376
; j--;
dec R20
.dbline 377
; if(j<=1) j=1;
ldi R24,1
cp R24,R20
brlo L128
X47:
.dbline 377
ldi R20,1
L128:
.dbline 379
; //显示选定位置:
; for(i=1;i<7;i++)
ldi R22,1
xjmp L133
L130:
.dbline 380
; PrintOneASCII(3,24+i*8,0x20); //删除原来的滑块
ldi R24,32
std y+0,R24
mov R18,R22
lsl R18
lsl R18
lsl R18
subi R18,232 ; addi 24
ldi R16,3
xcall _PrintOneASCII
L131:
.dbline 379
inc R22
L133:
.dbline 379
cpi R22,7
brlo L130
X48:
.dbline 381
; PrintOneASCII(3,24+j*8,97+0x20); //滑块移动
ldi R24,129
std y+0,R24
mov R18,R20
lsl R18
lsl R18
lsl R18
subi R18,232 ; addi 24
ldi R16,3
xcall _PrintOneASCII
.dbline 382
; *Pos=j*DEF_MAX_SONGS/6;
lds R18,_DEF_MAX_SONGS
lds R19,_DEF_MAX_SONGS+1
mov R16,R20
clr R17
xcall empy16s
ldi R18,6
ldi R19,0
xcall div16u
movw R30,R10
std z+1,R17
std z+0,R16
.dbline 383
; DisplayNumChar(6,16,*Pos,3);
ldi R24,3
std y+2,R24
ldd R2,z+0
ldd R3,z+1
std y+0,R2
ldi R18,16
ldi R16,6
xcall _DisplayNumChar
.dbline 384
; }
xjmp L124
L123:
.dbline 385
; else if(KeySt03==0) //++
in R24,0x16
andi R24,4
mov R14,R24
out 0x16,R24
tst R24
breq X58
xjmp L134
X58:
X49:
.dbline 386
; {
.dbline 388
; //等待该键释放
; Delay(200);
ldi R16,200
ldi R17,0
xcall _Delay
xjmp L137
L136:
.dbline 389
; while(KeySt03==0) Delay(200);
ldi R16,200
ldi R17,0
xcall _Delay
L137:
.dbline 389
in R24,0x16
andi R24,4
mov R14,R24
out 0x16,R24
tst R24
breq L136
X50:
.dbline 390
; j++;
inc R20
.dbline 391
; if(j>=6) j=6;
cpi R20,6
brlo L139
X51:
.dbline 391
ldi R20,6
L139:
.dbline 393
; //显示选定位置:
; for(i=1;i<7;i++)
ldi R22,1
xjmp L144
L141:
.dbline 394
; PrintOneASCII(3,24+i*8,0x20); //删除原来的滑块
ldi R24,32
std y+0,R24
mov R18,R22
lsl R18
lsl R18
lsl R18
subi R18,232 ; addi 24
ldi R16,3
xcall _PrintOneASCII
L142:
.dbline 393
inc R22
L144:
.dbline 393
cpi R22,7
brlo L141
X52:
.dbline 395
; PrintOneASCII(3,24+j*8,97+0x20); //滑块移动
ldi R24,129
std y+0,R24
mov R18,R20
lsl R18
lsl R18
lsl R18
subi R18,232 ; addi 24
ldi R16,3
xcall _PrintOneASCII
.dbline 396
; *Pos=j*DEF_MAX_SONGS/6;
lds R18,_DEF_MAX_SONGS
lds R19,_DEF_MAX_SONGS+1
mov R16,R20
clr R17
xcall empy16s
ldi R18,6
ldi R19,0
xcall div16u
movw R30,R10
std z+1,R17
std z+0,R16
.dbline 397
; DisplayNumChar(6,16,*Pos,3);
ldi R24,3
std y+2,R24
ldd R2,z+0
ldd R3,z+1
std y+0,R2
ldi R18,16
ldi R16,6
xcall _DisplayNumChar
.dbline 398
; }
xjmp L135
L134:
.dbline 399
; else if(KeySt04==0) //确定退出
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -