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

📄 main.lis

📁 AVR单片机系统开发经典实例部分源程序
💻 LIS
📖 第 1 页 / 共 4 页
字号:
 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 + -