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

📄 main.s

📁 采用Mega16+VS1011B+SD卡制作的Mp3
💻 S
📖 第 1 页 / 共 5 页
字号:
	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 + -