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

📄 m16_vs1003_test.lst

📁 AVR单片机系统开发经典实例部分源程序
💻 LST
📖 第 1 页 / 共 5 页
字号:
__start:
__text_start:
    02CA EFCF      LDI	R28,0xFF
    02CB E1D0      LDI	R29,0x10
    02CC BFCD      OUT	0x3D,R28
    02CD BFDE      OUT	0x3E,R29
    02CE 51CE      SUBI	R28,0x1E
    02CF 40D0      SBCI	R29,0
    02D0 EA0A      LDI	R16,0xAA
    02D1 8308      STD	Y+0,R16
    02D2 2400      CLR	R0
    02D3 E9E4      LDI	R30,0x94
    02D4 E0F1      LDI	R31,1
    02D5 E014      LDI	R17,4
    02D6 33EB      CPI	R30,0x3B
    02D7 07F1      CPC	R31,R17
    02D8 F011      BEQ	0x02DB
    02D9 9201      ST	R0,Z+
    02DA CFFB      RJMP	0x02D6
    02DB 8300      STD	Z+0,R16
    02DC E0E0      LDI	R30,0
    02DD E0F5      LDI	R31,5
    02DE E0A0      LDI	R26,0
    02DF E0B1      LDI	R27,1
    02E0 E015      LDI	R17,5
    02E1 39E4      CPI	R30,0x94
    02E2 07F1      CPC	R31,R17
    02E3 F021      BEQ	0x02E8
    02E4 95C8      LPM
    02E5 9631      ADIW	R30,1
    02E6 920D      ST	R0,X+
    02E7 CFF9      RJMP	0x02E1
    02E8 940E02EB  CALL	_main
_exit:
    02EA CFFF      RJMP	_exit
FILE: C:\AVR\M\1\main.c
(0001) #include "SPI.h"
(0002) #include "Usart.h"
(0003) #include "fat.h"
(0004) #include "vs1003.h"
(0005) #include "AD_key.h"
(0006) #include "3310LCD_function.h"
(0007) #include "bmp_pixel.h"
(0008) extern struct DISK_FAT_INFO DiskFATInfo;
(0009) extern struct MUSIC_INFO MusicInfoList[3];
(0010) 
(0011) //--------------  音乐播放程序 -------------------//
(0012) 
(0013) void VS1003_Play(void);
(0014) 
(0015) 
(0016) 
(0017) //----------------- ------------------------------
(0018) //
(0019) //                   主函数
(0020) //
(0021) //------------------------------------------------
(0022) void main()
(0023) {
(0024)    
(0025)  //  Usart_Init(9600);     // 串口初始化9600bps
(0026)    
(0027)    SPI_Init();           // SPI初始化,默认速度400Hz
_main:
    02EB 940E08EF  CALL	_SPI_Init
(0028)  
(0029)    
(0030)    LCD_init();          
    02ED 940E05B9  CALL	_LCD_init
(0031)    VS1003_Init();        // VS1003芯片初始化
    02EF 940E1266  CALL	_VS1003_Init
(0032)    
(0033)    while(SD_Init());     // SD卡循环初始化
    02F1 940E07DA  CALL	_SD_Init
    02F3 2300      TST	R16
    02F4 F7E1      BNE	0x02F1
(0034)    
(0035)    Fat_Init();           // 文件系统初始化
    02F5 940E0904  CALL	_Fat_Init
(0036)    AD_Init();            // AD初始化
    02F7 940E11DB  CALL	_AD_Init
(0037)    TC0_Init();           // T/C0初始化
    02F9 940E11F1  CALL	_TC0_Init
(0038)    VS1003_Play();        // 音乐播放
    02FB D001      RCALL	_VS1003_Play
    02FC 9508      RET
_VS1003_Play:
  j                    --> Y+18
  num                  --> Y+14
  music_num            --> Y+25
  music_last           --> R12
  music_next           --> R14
  play_flag            --> Y+24
  i                    --> Y+10
  size_buf             --> Y+6
  vol_flag             --> R10
  n                    --> Y+2
  data_pointer         --> Y+22
    02FD 940E1422  CALL	push_gset5
    02FF 976A      SBIW	R28,0x1A
(0039) }
(0040) 
(0041) 
(0042) 
(0043) //----------------- ------------------------------
(0044) //
(0045) //                  音乐播放函数
(0046) //
(0047) //------------------------------------------------
(0048) void VS1003_Play(void)
(0049) {
(0050) 	uint32 n;
(0051) 	uint32 i,j=46;
    0300 E24E      LDI	R20,0x2E
    0301 E050      LDI	R21,0
    0302 E060      LDI	R22,0
    0303 E070      LDI	R23,0
    0304 01FE      MOVW	R30,R28
    0305 8B42      STD	Z+18,R20
    0306 8B53      STD	Z+19,R21
    0307 8B64      STD	Z+20,R22
    0308 8B75      STD	Z+21,R23
(0052) 	uint32 size_buf=0;        // 已播放的文件大小
    0309 E040      LDI	R20,0
    030A E050      LDI	R21,0
    030B E060      LDI	R22,0
    030C E070      LDI	R23,0
    030D 01FE      MOVW	R30,R28
    030E 8346      STD	Z+6,R20
    030F 8357      STD	Z+7,R21
    0310 8760      STD	Z+8,R22
    0311 8771      STD	Z+9,R23
(0053) 	uint32 num;               // 音乐文件所在的簇
(0054) 	uint8 music_num=0;        // 正在播放文件的号码
    0312 2400      CLR	R0
    0313 8E09      STD	Y+25,R0
(0055) 	uint8 play_flag=1;        // 播放标志
    0314 2400      CLR	R0
    0315 9403      INC	R0
    0316 8E08      STD	Y+24,R0
(0056) 	uint16 data_pointer=0;   
    0317 2400      CLR	R0
    0318 2411      CLR	R1
    0319 8A1F      STD	Y+23,R1
    031A 8A0E      STD	Y+22,R0
(0057) 	uint8 music_next=0,music_last=0; // 音乐换曲标志
    031B 24EE      CLR	R14
    031C 24CC      CLR	R12
(0058) 	uint8 vol_flag=0;         // 音量调节标志
    031D 24AA      CLR	R10
(0059) 	
(0060) 	AD_Flag=0;                // AD键盘标志
    031E 2422      CLR	R2
    031F 92200431  STS	AD_Flag,R2
(0061)     AD_time=0;                // AD键盘采样次数
    0321 92200430  STS	AD_time,R2
(0062)     key_num=0;                // 按键号
    0323 9220042E  STS	key_num,R2
(0063) 	
(0064) 	GetMusicFile();           // 获取音乐文件
    0325 940E0AB7  CALL	_GetMusicFile
(0065) 	
(0066) 	num = MusicInfoList[0].FileStartClustor;  // 调用音乐文件
    0327 904001B7  LDS	R4,0x1B7
    0329 905001B8  LDS	R5,0x1B8
    032B 902001B5  LDS	R2,0x1B5
    032D 903001B6  LDS	R3,0x1B6
    032F 01FE      MOVW	R30,R28
    0330 8626      STD	Z+14,R2
    0331 8637      STD	Z+15,R3
    0332 8A40      STD	Z+16,R4
    0333 8A51      STD	Z+17,R5
    0334 C260      RJMP	0x0595
(0067) 	
(0068) 	while(1)
(0069) 	{
(0070) 	    LCD_clear();
    0335 940E05DB  CALL	_LCD_clear
(0071) 		LCD_write_english_string(j,3,MusicInfoList[music_num].FileName);
    0337 E289      LDI	R24,0x29
    0338 8C09      LDD	R0,Y+25
    0339 9D80      MUL	R24,R0
    033A 0110      MOVW	R2,R0
    033B E984      LDI	R24,0x94
    033C E091      LDI	R25,1
    033D 0E28      ADD	R2,R24
    033E 1E39      ADC	R3,R25
    033F 8239      STD	Y+1,R3
    0340 8228      STD	Y+0,R2
    0341 E023      LDI	R18,3
    0342 01FE      MOVW	R30,R28
    0343 8902      LDD	R16,Z+18
    0344 940E061B  CALL	_LCD_write_english_string
(0072) 		for(i=0;i<DiskFATInfo.SectorsPerClustor;i++)
    0346 E040      LDI	R20,0
    0347 E050      LDI	R21,0
    0348 E060      LDI	R22,0
    0349 E070      LDI	R23,0
    034A 01FE      MOVW	R30,R28
    034B 8742      STD	Z+10,R20
    034C 8753      STD	Z+11,R21
    034D 8764      STD	Z+12,R22
    034E 8775      STD	Z+13,R23
    034F C1C3      RJMP	0x0513
(0073) 		{ 
(0074) 		   SD_ReadBlock(DiskFATInfo.FDT_LBA+(num-DiskFATInfo.FDT_StartClustor)*DiskFATInfo.SectorsPerClustor+i,Fat_Buffer);   // 获取音乐文件的数据
    0350 E28E      LDI	R24,0x2E
    0351 E092      LDI	R25,2
    0352 8399      STD	Y+1,R25
    0353 8388      STD	Y+0,R24
    0354 9020021B  LDS	R2,0x21B
    0356 9030021C  LDS	R3,0x21C
    0358 2444      CLR	R4
    0359 2455      CLR	R5
    035A 01FE      MOVW	R30,R28
    035B 8466      LDD	R6,Z+14
    035C 8477      LDD	R7,Z+15
    035D 8880      LDD	R8,Z+16
    035E 8891      LDD	R9,Z+17
    035F 1862      SUB	R6,R2
    0360 0873      SBC	R7,R3
    0361 0884      SBC	R8,R4
    0362 0895      SBC	R9,R5
    0363 90200220  LDS	R2,0x220
    0365 2433      CLR	R3
    0366 2444      CLR	R4
    0367 2455      CLR	R5
    0368 925A      ST	R5,-Y
    0369 924A      ST	R4,-Y
    036A 923A      ST	R3,-Y
    036B 922A      ST	R2,-Y
    036C 0183      MOVW	R16,R6
    036D 0194      MOVW	R18,R8
    036E 940E13E6  CALL	empy32u
    0370 90400215  LDS	R4,0x215
    0372 90500216  LDS	R5,0x216
    0374 90200213  LDS	R2,0x213
    0376 90300214  LDS	R3,0x214
    0378 0E20      ADD	R2,R16
    0379 1E31      ADC	R3,R17
    037A 1E42      ADC	R4,R18
    037B 1E53      ADC	R5,R19
    037C 01FE      MOVW	R30,R28
    037D 8462      LDD	R6,Z+10
    037E 8473      LDD	R7,Z+11
    037F 8484      LDD	R8,Z+12
    0380 8495      LDD	R9,Z+13
    0381 0C26      ADD	R2,R6
    0382 1C37      ADC	R3,R7
    0383 1C48      ADC	R4,R8
    0384 1C59      ADC	R5,R9
    0385 0181      MOVW	R16,R2
    0386 0192      MOVW	R18,R4
    0387 940E0839  CALL	_SD_ReadBlock
(0075) 			do
(0076) 			{	
(0077) 			    //--------------------------- AD按键检测 ---------------------------//
(0078) 				
(0079) 			    if(key_num==6&&AD_time==0)play_flag=1;             // Key6按下,播放
    0389 9180042E  LDS	R24,key_num
    038B 3086      CPI	R24,6
    038C F441      BNE	0x0395
    038D 90200430  LDS	R2,AD_time
    038F 2022      TST	R2
    0390 F421      BNE	0x0395
    0391 2400      CLR	R0
    0392 9403      INC	R0
    0393 8E08      STD	Y+24,R0
    0394 C036      RJMP	0x03CB
(0080) 				else if(key_num==5&&AD_time==0)play_flag=0;        // Key5按下,停止
    0395 9180042E  LDS	R24,key_num
    0397 3085      CPI	R24,5
    0398 F439      BNE	0x03A0
    0399 90200430  LDS	R2,AD_time
    039B 2022      TST	R2
    039C F419      BNE	0x03A0
    039D 2400      CLR	R0
    039E 8E08      STD	Y+24,R0
    039F C02B      RJMP	0x03CB
(0081) 				else if(key_num==1&&AD_time==0)music_next=1;       // Key1按下,下一首
    03A0 9180042E  LDS	R24,key_num
    03A2 3081      CPI	R24,1
    03A3 F439      BNE	0x03AB
    03A4 90200430  LDS	R2,AD_time
    03A6 2022      TST	R2
    03A7 F419      BNE	0x03AB
    03A8 24EE      CLR	R14
    03A9 94E3      INC	R14
    03AA C020      RJMP	0x03CB
(0082) 				else if(key_num==4&&AD_time==0)music_last=1;       // Key4按下,上一首
    03AB 9180042E  LDS	R24,key_num
    03AD 3084      CPI	R24,4
    03AE F439      BNE	0x03B6
    03AF 90200430  LDS	R2,AD_time
    03B1 2022      TST	R2
    03B2 F419      BNE	0x03B6
    03B3 24CC      CLR	R12
    03B4 94C3      INC	R12
    03B5 C015      RJMP	0x03CB
(0083) 				else if(key_num==3&&AD_time==0)vol_flag=1;         // Key3按下,音量+
    03B6 9180042E  LDS	R24,key_num
    03B8 3083      CPI	R24,3
    03B9 F439      BNE	0x03C1
    03BA 90200430  LDS	R2,AD_time
    03BC 2022      TST	R2
    03BD F419      BNE	0x03C1
    03BE 24AA      CLR	R10
    03BF 94A3      INC	R10
    03C0 C00A      RJMP	0x03CB
(0084) 				else if(key_num==2&&AD_time==0)vol_flag=2;         // Key2按下,音量-
    03C1 9180042E  LDS	R24,key_num
    03C3 3082      CPI	R24,2
    03C4 F431      BNE	0x03CB
    03C5 90200430  LDS	R2,AD_time
    03C7 2022      TST	R2
    03C8 F411      BNE	0x03CB
    03C9 E082      LDI	R24,2
    03CA 2EA8      MOV	R10,R24
(0085) 				
(0086) 				//-------------- 音量调节 ----------------//
(0087) 				if(vol_flag!=0)                                 
    03CB 20AA      TST	R10
    03CC F409      BNE	0x03CE
    03CD C04E      RJMP	0x041C
(0088) 				{
(0089) 				  if(vol_flag==1)
    03CE 2D8A      MOV	R24,R10
    03CF 3081      CPI	R24,1
    03D0 F4C9      BNE	0x03EA
(0090) 				  {
(0091) 				    if(VOL>27)VOL=29;
    03D1 E18B      LDI	R24,0x1B
    03D2 E090      LDI	R25,0
    03D3 90200439  LDS	R2,VOL
    03D5 9030043A  LDS	R3,VOL+1
    03D7 1582      CP	R24,R2
    03D8 0593      CPC	R25,R3
    03D9 F430      BCC	0x03E0
    03DA E18D      LDI	R24,0x1D
    03DB 9390043A  STS	VOL+1,R25
    03DD 93800439  STS	VOL,R24
    03DF C022      RJMP	0x0402
(0092) 					else VOL+=2;
    03E0 91800439  LDS	R24,VOL
    03E2 9190043A  LDS	R25,VOL+1
    03E4 9602      ADIW	R24,2
    03E5 9390043A  STS	VOL+1,R25
    03E7 93800439  STS	VOL,R24
(0093) 				  }
    03E9 C018      RJMP	0x0402
(0094) 				  else
(0095) 				  {
(0096) 				    if(VOL<2)VOL=0;
    03EA 91800439  LDS	R24,VOL
    03EC 9190043A  LDS	R25,VOL+1
    03EE 3082      CPI	R24,2
    03EF E0E0      LDI	R30,0
    03F0 079E      CPC	R25,R30
    03F1 F438      BCC	0x03F9
    03F2 2422      CLR	R2
    03F3 2433      CLR	R3
    03F4 9230043A  STS	VOL+1,R3
    03F6 92200439  STS	VOL,R2
    03F8 C009      RJMP	0x0402
(0097) 					else VOL-=2;
    03F9 91800439  LDS	R24,VOL
    03FB 9190043A  LDS	R25,VOL+1
    03FD 9702      SBIW	R24,2
    03FE 9390043A  STS	VOL+1,R25
    0400 93800439  STS	VOL,R24
(0098) 				  }
(0099) 					
(0100) 				  VS1003_WriteReg(VS1003_SPI_VOL ,VOL_BUFFER[VOL]); // 送音量数据
    0402 91200439  LDS	R18,VOL
    0404 9130043A  LDS	R19,VOL+1
    0406 E002      LDI	R16,2
    0407 E010      LDI	R17,0
    0408 940E13D6  CALL	empy16s
    040A 01F8      MOVW	R30,R16
    040B EC84      LDI	R24,0xC4
    040C E094      LDI	R25,4
    040D 0FE8      ADD	R30,R24
    040E 1FF9      ADC	R31,R25
    040F 9125      LPM	R18,Z+
    0410 9134      LPM	R19,0(Z)
    0411 E00B      LDI	R16,0xB
    0412 940E11FD  CALL	_VS1003_WriteReg
(0101) 				  
(0102) 				  while(VS1003_DREQ_STATE() != VS1003_DREQ);	 // 等待
    0414 B383      IN	R24,0x13
    0415 7880      ANDI	R24,0x80
    0416 3880      CPI	R24,0x80
    0417 F7E1      BNE	0x0414
(0103) 				  
(0104) 				  key_num = 0;
    0418 2422      CLR	R2
    0419 9220042E  STS	key_num,R2
(0105) 				  vol_flag=0;
    041B 24AA      CLR	R10
(0106) 				}
(0107) 				
(0108) 				
(0109) 				//----------------- 换曲操作 -----------------//  
(0110) 				
(0111) 				if(music_next!=0||music_last!=0)
    041C 20EE      TST	R14
    041D F411      BNE	0x0420
    041E 20CC      TST	R12
    041F F071      BEQ	0x042E
(0112) 				{
(0113) 				  data_pointer=512;
    0420 E080      LDI	R24,0

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -