📄 main.lis
字号:
0000 ; // 主函数
0000 ; //
0000 ; //------------------------------------------------
0000 ; void main()
0000 ; {
0000 .dbline 27
0000 ;
0000 ; // Usart_Init(9600); // 串口初始化9600bps
0000 ;
0000 ; SPI_Init(); // SPI初始化,默认速度400Hz
0000 0E940000 xcall _SPI_Init
0004 .dbline 30
0004 ;
0004 ;
0004 ; LCD_init();
0004 0E940000 xcall _LCD_init
0008 .dbline 31
0008 ; VS1003_Init(); // VS1003芯片初始化
0008 0E940000 xcall _VS1003_Init
000C L2:
000C .dbline 33
000C L3:
000C .dbline 33
000C ;
000C ; while(SD_Init()); // SD卡循环初始化
000C 0E940000 xcall _SD_Init
0010 0023 tst R16
0012 E1F7 brne L2
0014 .dbline 35
0014 ;
0014 ; Fat_Init(); // 文件系统初始化
0014 0E940000 xcall _Fat_Init
0018 .dbline 36
0018 ; AD_Init(); // AD初始化
0018 0E940000 xcall _AD_Init
001C .dbline 37
001C ; TC0_Init(); // T/C0初始化
001C 0E940000 xcall _TC0_Init
0020 .dbline 38
0020 ; VS1003_Play(); // 音乐播放
0020 01D0 xcall _VS1003_Play
0022 .dbline -2
0022 L1:
0022 .dbline 0 ; func end
0022 0895 ret
0024 .dbend
0024 .dbfunc e VS1003_Play _VS1003_Play fV
0024 ; j -> y+18
0024 ; num -> y+14
0024 ; music_num -> y+25
0024 ; music_last -> R12
0024 ; music_next -> R14
0024 ; play_flag -> y+24
0024 ; i -> y+10
0024 ; size_buf -> y+6
0024 ; vol_flag -> R10
0024 ; n -> y+2
0024 ; data_pointer -> y+22
.even
0024 _VS1003_Play::
0024 0E940000 xcall push_gset5
0028 6A97 sbiw R28,26
002A .dbline -1
002A .dbline 49
002A ; }
002A ;
002A ;
002A ;
002A ; //----------------- ------------------------------
002A ; //
002A ; // 音乐播放函数
002A ; //
002A ; //------------------------------------------------
002A ; void VS1003_Play(void)
002A ; {
002A .dbline 51
002A ; uint32 n;
002A ; uint32 i,j=46;
002A 4EE2 ldi R20,46
002C 50E0 ldi R21,0
002E 60E0 ldi R22,0
0030 70E0 ldi R23,0
0032 FE01 movw R30,R28
0034 428B std z+18,R20
0036 538B std z+19,R21
0038 648B std z+20,R22
003A 758B std z+21,R23
003C .dbline 52
003C ; uint32 size_buf=0; // 已播放的文件大小
003C 40E0 ldi R20,0
003E 50E0 ldi R21,0
0040 60E0 ldi R22,0
0042 70E0 ldi R23,0
0044 FE01 movw R30,R28
0046 4683 std z+6,R20
0048 5783 std z+7,R21
004A 6087 std z+8,R22
004C 7187 std z+9,R23
004E .dbline 54
004E ; uint32 num; // 音乐文件所在的簇
004E ; uint8 music_num=0; // 正在播放文件的号码
004E 0024 clr R0
0050 098E std y+25,R0
0052 .dbline 55
0052 ; uint8 play_flag=1; // 播放标志
0052 0024 clr R0
0054 0394 inc R0
0056 088E std y+24,R0
0058 .dbline 56
0058 ; uint16 data_pointer=0;
0058 0024 clr R0
005A 1124 clr R1
005C 1F8A std y+23,R1
005E 0E8A std y+22,R0
0060 .dbline 57
0060 ; uint8 music_next=0,music_last=0; // 音乐换曲标志
0060 EE24 clr R14
0062 .dbline 57
0062 CC24 clr R12
0064 .dbline 58
0064 ; uint8 vol_flag=0; // 音量调节标志
0064 AA24 clr R10
0066 .dbline 60
0066 ;
0066 ; AD_Flag=0; // AD键盘标志
0066 2224 clr R2
0068 20920000 sts _AD_Flag,R2
006C .dbline 61
006C ; AD_time=0; // AD键盘采样次数
006C 20920000 sts _AD_time,R2
0070 .dbline 62
0070 ; key_num=0; // 按键号
0070 20920000 sts _key_num,R2
0074 .dbline 64
0074 ;
0074 ; GetMusicFile(); // 获取音乐文件
0074 0E940000 xcall _GetMusicFile
0078 .dbline 66
0078 ;
0078 ; num = MusicInfoList[0].FileStartClustor; // 调用音乐文件
0078 40902300 lds R4,_MusicInfoList+33+2
007C 50902400 lds R5,_MusicInfoList+33+2+1
0080 20902100 lds R2,_MusicInfoList+33
0084 30902200 lds R3,_MusicInfoList+33+1
0088 FE01 movw R30,R28
008A 2686 std z+14,R2
008C 3786 std z+15,R3
008E 408A std z+16,R4
0090 518A std z+17,R5
0092 60C2 xjmp L8
0094 L7:
0094 .dbline 69
0094 ;
0094 ; while(1)
0094 ; {
0094 .dbline 70
0094 ; LCD_clear();
0094 0E940000 xcall _LCD_clear
0098 .dbline 71
0098 ; LCD_write_english_string(j,3,MusicInfoList[music_num].FileName);
0098 89E2 ldi R24,41
009A 098C ldd R0,y+25
009C 809D mul R24,R0
009E 1001 movw R2,R0
00A0 80E0 ldi R24,<_MusicInfoList
00A2 90E0 ldi R25,>_MusicInfoList
00A4 280E add R2,R24
00A6 391E adc R3,R25
00A8 3982 std y+1,R3
00AA 2882 std y+0,R2
00AC 23E0 ldi R18,3
00AE FE01 movw R30,R28
00B0 0289 ldd R16,z+18
00B2 0E940000 xcall _LCD_write_english_string
00B6 .dbline 72
00B6 ; for(i=0;i<DiskFATInfo.SectorsPerClustor;i++)
00B6 40E0 ldi R20,0
00B8 50E0 ldi R21,0
00BA 60E0 ldi R22,0
00BC 70E0 ldi R23,0
00BE FE01 movw R30,R28
00C0 4287 std z+10,R20
00C2 5387 std z+11,R21
00C4 6487 std z+12,R22
00C6 7587 std z+13,R23
00C8 C3C1 xjmp L13
00CA L10:
00CA .dbline 73
00CA ; {
00CA .dbline 74
00CA ; SD_ReadBlock(DiskFATInfo.FDT_LBA+(num-DiskFATInfo.FDT_StartClustor)*DiskFATInfo.SectorsPerClustor+i,Fat_Buffer); // 获取音乐文件的数据
00CA 80E0 ldi R24,<_Fat_Buffer
00CC 90E0 ldi R25,>_Fat_Buffer
00CE 9983 std y+1,R25
00D0 8883 std y+0,R24
00D2 20900C00 lds R2,_DiskFATInfo+12
00D6 30900D00 lds R3,_DiskFATInfo+12+1
00DA 4424 clr R4
00DC 5524 clr R5
00DE FE01 movw R30,R28
00E0 6684 ldd R6,z+14
00E2 7784 ldd R7,z+15
00E4 8088 ldd R8,z+16
00E6 9188 ldd R9,z+17
00E8 6218 sub R6,R2
00EA 7308 sbc R7,R3
00EC 8408 sbc R8,R4
00EE 9508 sbc R9,R5
00F0 20901100 lds R2,_DiskFATInfo+17
00F4 3324 clr R3
00F6 4424 clr R4
00F8 5524 clr R5
00FA 5A92 st -y,R5
00FC 4A92 st -y,R4
00FE 3A92 st -y,R3
0100 2A92 st -y,R2
0102 8301 movw R16,R6
0104 9401 movw R18,R8
0106 0E940000 xcall empy32u
010A 40900600 lds R4,_DiskFATInfo+4+2
010E 50900700 lds R5,_DiskFATInfo+4+2+1
0112 20900400 lds R2,_DiskFATInfo+4
0116 30900500 lds R3,_DiskFATInfo+4+1
011A 200E add R2,R16
011C 311E adc R3,R17
011E 421E adc R4,R18
0120 531E adc R5,R19
0122 FE01 movw R30,R28
0124 6284 ldd R6,z+10
0126 7384 ldd R7,z+11
0128 8484 ldd R8,z+12
012A 9584 ldd R9,z+13
012C 260C add R2,R6
012E 371C adc R3,R7
0130 481C adc R4,R8
0132 591C adc R5,R9
0134 8101 movw R16,R2
0136 9201 movw R18,R4
0138 0E940000 xcall _SD_ReadBlock
013C L18:
013C .dbline 76
013C ; do
013C ; {
013C .dbline 79
013C ; //--------------------------- AD按键检测 ---------------------------//
013C ;
013C ; if(key_num==6&&AD_time==0)play_flag=1; // Key6按下,播放
013C 80910000 lds R24,_key_num
0140 8630 cpi R24,6
0142 41F4 brne L21
0144 20900000 lds R2,_AD_time
0148 2220 tst R2
014A 21F4 brne L21
014C .dbline 79
014C 0024 clr R0
014E 0394 inc R0
0150 088E std y+24,R0
0152 36C0 xjmp L22
0154 L21:
0154 .dbline 80
0154 ; else if(key_num==5&&AD_time==0)play_flag=0; // Key5按下,停止
0154 80910000 lds R24,_key_num
0158 8530 cpi R24,5
015A 39F4 brne L23
015C 20900000 lds R2,_AD_time
0160 2220 tst R2
0162 19F4 brne L23
0164 .dbline 80
0164 0024 clr R0
0166 088E std y+24,R0
0168 2BC0 xjmp L24
016A L23:
016A .dbline 81
016A ; else if(key_num==1&&AD_time==0)music_next=1; // Key1按下,下一首
016A 80910000 lds R24,_key_num
016E 8130 cpi R24,1
0170 39F4 brne L25
0172 20900000 lds R2,_AD_time
0176 2220 tst R2
0178 19F4 brne L25
017A .dbline 81
017A EE24 clr R14
017C E394 inc R14
017E 20C0 xjmp L26
0180 L25:
0180 .dbline 82
0180 ; else if(key_num==4&&AD_time==0)music_last=1; // Key4按下,上一首
0180 80910000 lds R24,_key_num
0184 8430 cpi R24,4
0186 39F4 brne L27
0188 20900000 lds R2,_AD_time
018C 2220 tst R2
018E 19F4 brne L27
0190 .dbline 82
0190 CC24 clr R12
0192 C394 inc R12
0194 15C0 xjmp L28
0196 L27:
0196 .dbline 83
0196 ; else if(key_num==3&&AD_time==0)vol_flag=1; // Key3按下,音量+
0196 80910000 lds R24,_key_num
019A 8330 cpi R24,3
019C 39F4 brne L29
019E 20900000 lds R2,_AD_time
01A2 2220 tst R2
01A4 19F4 brne L29
01A6 .dbline 83
01A6 AA24 clr R10
01A8 A394 inc R10
01AA 0AC0 xjmp L30
01AC L29:
01AC .dbline 84
01AC ; else if(key_num==2&&AD_time==0)vol_flag=2; // Key2按下,音量-
01AC 80910000 lds R24,_key_num
01B0 8230 cpi R24,2
01B2 31F4 brne L31
01B4 20900000 lds R2,_AD_time
01B8 2220 tst R2
01BA 11F4 brne L31
01BC .dbline 84
01BC 82E0 ldi R24,2
01BE A82E mov R10,R24
01C0 L31:
01C0 L30:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -