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

📄 main.lis

📁 M16-Mp3.rar
💻 LIS
📖 第 1 页 / 共 3 页
字号:
                        .module main.c
                        .area text(rom, con, rel)
 0000                   .dbfile ..\..\..\..\..\DOCUME~1\浪仔\桌面\教学实验板\M16_VS1003_test\main.c
                        .area vector(rom, abs)
                        .org 56
 0038 0C940000          jmp _AD_handler
                        .area text(rom, con, rel)
 0000                   .dbfile ..\..\..\..\..\DOCUME~1\浪仔\桌面\教学实验板\M16_VS1003_test\main.c
                        .area vector(rom, abs)
                        .org 36
 0024 0C940000          jmp _TC0_handler
                        .area text(rom, con, rel)
 0000                   .dbfile ..\..\..\..\..\DOCUME~1\浪仔\桌面\教学实验板\M16_VS1003_test\main.c
 0000                   .dbfile C:\DOCUME~1\浪仔\桌面\教学实验板\M16_VS1003_test\main.c
 0000                   .dbfunc e main _main fV
                        .even
 0000           _main::
 0000                   .dbline -1
 0000                   .dbline 44
 0000           ; 
 0000           ; //--------------------------- 实验程序名称:MP3播放器 ------------------------------
 0000           ; //
 0000           ; //开发平台:ATmega16教学实验板
 0000           ; //外设使用:1. T/C0定时器  2. AD模数转换(通道7)   3. SPI总线
 0000           ; //模块使用:1.AD键盘   2.SD卡   3.VS1003模块
 0000           ; //频率:外频16MHz
 0000           ; //电压:3.3V
 0000           ; //
 0000           ; //存储体:SD卡
 0000           ; //文件系统:FAT32
 0000           ; //显示器:不带
 0000           ; //音乐文件:SD卡上命名“音乐”文件夹,在“音乐”文件夹内存储歌曲,格式为“MP3“。
 0000           ; //按键操作: |  Key6  |  Key5  |   Key4  |  Key3  |  Key2  |  Key1  |
 0000           ; //           |  播放  |  停止  |  上一首 |  音量+ |  音量- | 下一首 |
 0000           ; //
 0000           ; //原理:使用ATmega16读取SD卡中音乐文件传输到VS1003进行解码播放。
 0000           ; //重点:1.文件系统  2.SD卡驱动
 0000           ; //
 0000           ; //作者:廖华明(师兄)
 0000           ; //日期:2009.7.8
 0000           ; //
 0000           ; //----------------------------------------------------------------------------------
 0000           ; 
 0000           ; #include "SPI.h"
 0000           ; #include "Usart.h"
 0000           ; #include "fat.h"
 0000           ; #include "vs1003.h"
 0000           ; #include "AD_key.h"
 0000           ; 
 0000           ; 
 0000           ; //--------------  音乐播放程序 -------------------//
 0000           ; 
 0000           ; void VS1003_Play(void);
 0000           ; 
 0000           ; 
 0000           ; 
 0000           ; //----------------- ------------------------------
 0000           ; //
 0000           ; //                   主函数
 0000           ; //
 0000           ; //------------------------------------------------
 0000           ; void main()
 0000           ; {
 0000                   .dbline 45
 0000           ;    Usart_Init(9600);     // 串口初始化9600bps
 0000 00E8              ldi R16,9600
 0002 15E2              ldi R17,37
 0004 0E940000          xcall _Usart_Init
 0008                   .dbline 46
 0008           ;    SPI_Init();           // SPI初始化,默认速度400Hz
 0008 0E940000          xcall _SPI_Init
 000C                   .dbline 47
 000C           ;    VS1003_Init();        // VS1003芯片初始化
 000C 0E940000          xcall _VS1003_Init
 0010           L2:
 0010                   .dbline 48
 0010           ;    while(SD_Init());     // SD卡循环初始化
 0010           L3:
 0010                   .dbline 48
 0010 0E940000          xcall _SD_Init
 0014 0023              tst R16
 0016 E1F7              brne L2
 0018           X0:
 0018                   .dbline 49
 0018           ;    Fat_Init();           // 文件系统初始化
 0018 0E940000          xcall _Fat_Init
 001C                   .dbline 50
 001C           ;    AD_Init();            // AD初始化
 001C 0E940000          xcall _AD_Init
 0020                   .dbline 51
 0020           ;    TC0_Init();           // T/C0初始化
 0020 0E940000          xcall _TC0_Init
 0024                   .dbline 53
 0024           ;    
 0024           ;    VS1003_Play();        // 音乐播放
 0024                   .dbline -2
 0024           L1:
 0024                   .dbline 0 ; func end
 0024 00C0              xjmp _VS1003_Play
 0026                   .dbend
 0026                   .dbfunc e VS1003_Play _VS1003_Play fV
 0026           ;            num -> y+14
 0026           ;      music_num -> y+21
 0026           ;     music_last -> R14
 0026           ;     music_next -> R12
 0026           ;      play_flag -> y+20
 0026           ;              i -> y+10
 0026           ;       size_buf -> y+6
 0026           ;       vol_flag -> R10
 0026           ;              n -> y+2
 0026           ;   data_pointer -> y+18
                        .even
 0026           _VS1003_Play::
 0026 0E940000          xcall push_xgsetF0FC
 002A 6697              sbiw R28,22
 002C                   .dbline -1
 002C                   .dbline 64
 002C           ; }
 002C           ; 
 002C           ; 
 002C           ; 
 002C           ; //----------------- ------------------------------
 002C           ; //
 002C           ; //                  音乐播放函数
 002C           ; //
 002C           ; //------------------------------------------------
 002C           ; void VS1003_Play(void)
 002C           ; {
 002C                   .dbline 67
 002C           ;       uint32 n;
 002C           ;       uint32 i;
 002C           ;       uint32 size_buf=0;        // 已播放的文件大小
 002C 40E0              ldi R20,0
 002E 50E0              ldi R21,0
 0030 60E0              ldi R22,0
 0032 70E0              ldi R23,0
 0034 4E83              std y+6,R20
 0036 5F83              std y+7,R21
 0038 6887              std y+8,R22
 003A 7987              std y+9,R23
 003C                   .dbline 69
 003C           ;       uint32 num;               // 音乐文件所在的簇
 003C           ;       uint8 music_num=0;        // 正在播放文件的号码
 003C 0024              clr R0
 003E 0D8A              std y+21,R0
 0040                   .dbline 70
 0040           ;       uint8 play_flag=0;        // 播放标志
 0040 0C8A              std y+20,R0
 0042                   .dbline 71
 0042           ;       uint16 data_pointer=0;   
 0042 1124              clr R1
 0044 1B8A              std y+19,R1
 0046 0A8A              std y+18,R0
 0048                   .dbline 72
 0048           ;       uint8 music_next=0,music_last=0; // 音乐换曲标志
 0048 CC24              clr R12
 004A                   .dbline 72
 004A EE24              clr R14
 004C                   .dbline 73
 004C           ;       uint8 vol_flag=0;         // 音量调节标志
 004C AA24              clr R10
 004E                   .dbline 75
 004E           ;       
 004E           ;       AD_Flag=0;                // AD键盘标志
 004E 2224              clr R2
 0050 20920000          sts _AD_Flag,R2
 0054                   .dbline 76
 0054           ;     AD_time=0;                // AD键盘采样次数
 0054 20920000          sts _AD_time,R2
 0058                   .dbline 77
 0058           ;     key_num=0;                // 按键号
 0058 20920000          sts _key_num,R2
 005C                   .dbline 79
 005C           ;       
 005C           ;       GetMusicFile();           // 获取音乐文件
 005C 0E940000          xcall _GetMusicFile
 0060                   .dbline 81
 0060           ;       
 0060           ;       num = fclust[music_num];  // 调用音乐文件
 0060 80E0              ldi R24,<_fclust
 0062 90E0              ldi R25,>_fclust
 0064 ED89              ldd R30,y+21
 0066 FF27              clr R31
 0068 EE0F              lsl R30
 006A FF1F              rol R31
 006C EE0F              lsl R30
 006E FF1F              rol R31
 0070 E80F              add R30,R24
 0072 F91F              adc R31,R25
 0074 2080              ldd R2,z+0
 0076 3180              ldd R3,z+1
 0078 4280              ldd R4,z+2
 007A 5380              ldd R5,z+3
 007C 2E86              std y+14,R2
 007E 3F86              std y+15,R3
 0080 488A              std y+16,R4
 0082 598A              std y+17,R5
 0084 CEC1              xjmp L7
 0086           L6:
 0086                   .dbline 84
 0086           ; 
 0086           ;       while(1)
 0086           ;       {
 0086                   .dbline 85
 0086           ;               for(i=0;i<8;i++)
 0086 40E0              ldi R20,0
 0088 50E0              ldi R21,0
 008A 60E0              ldi R22,0
 008C 70E0              ldi R23,0
 008E 4A87              std y+10,R20
 0090 5B87              std y+11,R21
 0092 6C87              std y+12,R22
 0094 7D87              std y+13,R23
 0096 69C1              xjmp L12
 0098           L9:
 0098                   .dbline 86
 0098           ;               { 
 0098                   .dbline 87
 0098           ;                  SD_ReadBlock(FirstDataSector+(num-2)*8+i,Fat_Buffer);   // 获取音乐文件的数据
 0098 80E0              ldi R24,<_Fat_Buffer
 009A 90E0              ldi R25,>_Fat_Buffer
 009C 9983              std y+1,R25
 009E 8883              std y+0,R24
 00A0 42E0              ldi R20,2
 00A2 50E0              ldi R21,0
 00A4 60E0              ldi R22,0
 00A6 70E0              ldi R23,0
 00A8 0E85              ldd R16,y+14
 00AA 1F85              ldd R17,y+15
 00AC 2889              ldd R18,y+16
 00AE 3989              ldd R19,y+17
 00B0 041B              sub R16,R20
 00B2 150B              sbc R17,R21
 00B4 260B              sbc R18,R22
 00B6 370B              sbc R19,R23
 00B8 83E0              ldi R24,3
 00BA 90E0              ldi R25,0
 00BC 8A93              st -y,R24
 00BE 0E940000          xcall lsl32
 00C2 1801              movw R2,R16
 00C4 2901              movw R4,R18
 00C6 20910200          lds R18,_FirstDataSector+2
 00CA 30910300          lds R19,_FirstDataSector+2+1
 00CE 00910000          lds R16,_FirstDataSector
 00D2 10910100          lds R17,_FirstDataSector+1
 00D6 020D              add R16,R2
 00D8 131D              adc R17,R3
 00DA 241D              adc R18,R4
 00DC 351D              adc R19,R5
 00DE 2A84              ldd R2,y+10
 00E0 3B84              ldd R3,y+11
 00E2 4C84              ldd R4,y+12
 00E4 5D84              ldd R5,y+13
 00E6 020D              add R16,R2
 00E8 131D              adc R17,R3
 00EA 241D              adc R18,R4
 00EC 351D              adc R19,R5
 00EE 0E940000          xcall _SD_ReadBlock
 00F2           L13:
 00F2                   .dbline 89
 00F2           ;                       do
 00F2           ;                       {       
 00F2                   .dbline 92
 00F2           ;                           //--------------------------- AD按键检测 ---------------------------//
 00F2           ;                               
 00F2           ;                           if(key_num==6&&AD_time==0)play_flag=1;             // Key6按下,播放
 00F2 80910000          lds R24,_key_num
 00F6 8630              cpi R24,6
 00F8 41F4              brne L16
 00FA           X1:
 00FA 20900000          lds R2,_AD_time
 00FE 2220              tst R2
 0100 21F4              brne L16
 0102           X2:
 0102                   .dbline 92
 0102 0024              clr R0
 0104 0394              inc R0
 0106 0C8A              std y+20,R0
 0108 36C0              xjmp L17
 010A           L16:
 010A                   .dbline 93
 010A           ;                               else if(key_num==5&&AD_time==0)play_flag=0;        // Key5按下,停止
 010A 80910000          lds R24,_key_num
 010E 8530              cpi R24,5
 0110 39F4              brne L18
 0112           X3:
 0112 20900000          lds R2,_AD_time
 0116 2220              tst R2
 0118 19F4              brne L18
 011A           X4:
 011A                   .dbline 93
 011A 0024              clr R0
 011C 0C8A              std y+20,R0
 011E 2BC0              xjmp L19
 0120           L18:
 0120                   .dbline 94
 0120           ;                               else if(key_num==1&&AD_time==0)music_next=1;       // Key1按下,下一首
 0120 80910000          lds R24,_key_num
 0124 8130              cpi R24,1
 0126 39F4              brne L20

⌨️ 快捷键说明

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