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

📄 mp3.lis

📁 绝对好用的M64-SD卡MP3程序
💻 LIS
📖 第 1 页 / 共 4 页
字号:
 0076           ; SPSR = 0x01;                //setup SPI
 0076 81E0              ldi R24,1
 0078 8EB9              out 0xe,R24
 007A                   .dbline 37
 007A           ; 
 007A           ; fatInit();                  //查询SDFAT格式
 007A 0E940000          xcall _fatInit
 007E                   .dbline 38
 007E           ; if(Fat32Enabled)            //设置FAT格式标志
 007E 20900000          lds R2,_Fat32Enabled
 0082 2220              tst R2
 0084 69F0              breq L4
 0086                   .dbline 39
 0086           ;  FAT_MASK=FAT32_MASK;
 0086 4FEF              ldi R20,255
 0088 5FEF              ldi R21,255
 008A 6FEF              ldi R22,255
 008C 7FE0              ldi R23,15
 008E 50930400          sts _FAT_MASK+1,R21
 0092 40930300          sts _FAT_MASK,R20
 0096 70930600          sts _FAT_MASK+2+1,R23
 009A 60930500          sts _FAT_MASK+2,R22
 009E 2FC0              xjmp L7
 00A0           L4:
 00A0                   .dbline 41
 00A0           ; else 
 00A0           ; FAT_MASK=FAT16_MASK;
 00A0 4FEF              ldi R20,255
 00A2 5FEF              ldi R21,255
 00A4 60E0              ldi R22,0
 00A6 70E0              ldi R23,0
 00A8 50930400          sts _FAT_MASK+1,R21
 00AC 40930300          sts _FAT_MASK,R20
 00B0 70930600          sts _FAT_MASK+2+1,R23
 00B4 60930500          sts _FAT_MASK+2,R22
 00B8 22C0              xjmp L7
 00BA           L6:
 00BA                   .dbline 45
 00BA           ; 
 00BA           ; 
 00BA           ;    while(1)
 00BA           ;    { 
 00BA                   .dbline 47
 00BA           ; //播放音乐
 00BA           ;    for(t=3;t<50;t++)
 00BA 83E0              ldi R24,3
 00BC 90E0              ldi R25,0
 00BE 90930100          sts _t+1,R25
 00C2 80930000          sts _t,R24
 00C6 13C0              xjmp L12
 00C8           L9:
 00C8                   .dbline 48
 00C8                   .dbline 49
 00C8 2224              clr R2
 00CA 20920200          sts _flag,R2
 00CE                   .dbline 50
 00CE 00910000          lds R16,_t
 00D2 10910100          lds R17,_t+1
 00D6 0E940000          xcall _fatGetDirEntry
 00DA 14D0              xcall _mp3_play
 00DC                   .dbline 51
 00DC           L10:
 00DC                   .dbline 47
 00DC 80910000          lds R24,_t
 00E0 90910100          lds R25,_t+1
 00E4 0196              adiw R24,1
 00E6 90930100          sts _t+1,R25
 00EA 80930000          sts _t,R24
 00EE           L12:
 00EE                   .dbline 47
 00EE 80910000          lds R24,_t
 00F2 90910100          lds R25,_t+1
 00F6 8233              cpi R24,50
 00F8 E0E0              ldi R30,0
 00FA 9E07              cpc R25,R30
 00FC 28F3              brlo L9
 00FE                   .dbline 52
 00FE           L7:
 00FE                   .dbline 44
 00FE DDCF              xjmp L6
 0100           X0:
 0100                   .dbline -2
 0100           L2:
 0100 2596              adiw R28,5
 0102                   .dbline 0 ; func end
 0102 0895              ret
 0104                   .dbend
 0104                   .dbfunc e mp3_play _mp3_play fV
 0104           ;             t1 -> <dead>
 0104           ;           rate -> <dead>
 0104           ;    NextCluster -> y+4
 0104           ;            LBA -> y+0
 0104           ;              i -> R10,R11
 0104           ;              n -> R14
 0104           ;   data_pointer -> R12,R13
 0104           ;     FirstClust -> y+18
                        .even
 0104           _mp3_play::
 0104 0E940000          xcall push_arg4
 0108 0E940000          xcall push_gset5
 010C 2897              sbiw R28,8
 010E                   .dbline -1
 010E                   .dbline 57
 010E           ;     {
 010E           ;       flag=0;
 010E           ;       mp3_play(fatGetDirEntry(t));
 010E           ;       }
 010E           ;     }
 010E           ; }
 010E           ; 
 010E           ; 
 010E           ; void mp3_play(unsigned long FirstClust)
 010E           ; {  
 010E                   .dbline 61
 010E           ; uint32 LBA,NextCluster;
 010E           ; uint16 i,data_pointer,rate;
 010E           ; uint8 n,t1;
 010E           ; NextCluster = FirstClust;
 010E FE01              movw R30,R28
 0110 2288              ldd R2,z+18
 0112 3388              ldd R3,z+19
 0114 4488              ldd R4,z+20
 0116 5588              ldd R5,z+21
 0118 FE01              movw R30,R28
 011A 2482              std z+4,R2
 011C 3582              std z+5,R3
 011E 4682              std z+6,R4
 0120 5782              std z+7,R5
 0122 2EC1              xjmp L15
 0124           L14:
 0124                   .dbline 64
 0124           ; 
 0124           ;    while (1)
 0124           ;         {     
 0124                   .dbline 65
 0124           ;         LBA =fatClustToSect(NextCluster);
 0124 FE01              movw R30,R28
 0126 0481              ldd R16,z+4
 0128 1581              ldd R17,z+5
 012A 2681              ldd R18,z+6
 012C 3781              ldd R19,z+7
 012E 0E940000          xcall _fatClustToSect
 0132 FE01              movw R30,R28
 0134 0083              std z+0,R16
 0136 1183              std z+1,R17
 0138 2283              std z+2,R18
 013A 3383              std z+3,R19
 013C                   .dbline 66
 013C           ;         for (i=0;i<SectorsPerCluster;i++)
 013C AA24              clr R10
 013E BB24              clr R11
 0140 F0C0              xjmp L20
 0142           L17:
 0142                   .dbline 67
 0142           ;                 {
 0142                   .dbline 68
 0142           ;                 if(flag==0)  ReadBlock(LBA+i);      //读完后文件指针自动后移
 0142 20900200          lds R2,_flag
 0146 2220              tst R2
 0148 81F4              brne L21
 014A                   .dbline 68
 014A 1501              movw R2,R10
 014C 4424              clr R4
 014E 5524              clr R5
 0150 FE01              movw R30,R28
 0152 6080              ldd R6,z+0
 0154 7180              ldd R7,z+1
 0156 8280              ldd R8,z+2
 0158 9380              ldd R9,z+3
 015A 620C              add R6,R2
 015C 731C              adc R7,R3
 015E 841C              adc R8,R4
 0160 951C              adc R9,R5
 0162 8301              movw R16,R6
 0164 9401              movw R18,R8
 0166 0E940000          xcall _ReadBlock
 016A           L21:
 016A                   .dbline 72
 016A           ;                 
 016A           ;       //按键处理程序
 016A           ;           //ST/PS键按下
 016A           ;         if(!(PINE&STOP))
 016A 0E99              sbic 0x1,6
 016C 1CC0              rjmp L23
 016E                   .dbline 73
 016E           ;          {
 016E                   .dbline 74
 016E           ;           delay_nus(250);delay_nus(250);delay_nus(250);delay_nus(250);delay_nus(250);
 016E 0AEF              ldi R16,250
 0170 10E0              ldi R17,0
 0172 0E940000          xcall _delay_nus
 0176                   .dbline 74
 0176 0AEF              ldi R16,250
 0178 10E0              ldi R17,0
 017A 0E940000          xcall _delay_nus
 017E                   .dbline 74
 017E 0AEF              ldi R16,250
 0180 10E0              ldi R17,0
 0182 0E940000          xcall _delay_nus
 0186                   .dbline 74
 0186 0AEF              ldi R16,250
 0188 10E0              ldi R17,0
 018A 0E940000          xcall _delay_nus
 018E                   .dbline 74
 018E 0AEF              ldi R16,250
 0190 10E0              ldi R17,0
 0192 0E940000          xcall _delay_nus
 0196                   .dbline 75
 0196           ;               if(!(PINE&STOP))
 0196 0E99              sbic 0x1,6
 0198 06C0              rjmp L25
 019A                   .dbline 76
 019A           ;               {
 019A                   .dbline 77
 019A           ;                flag^=0x01;
 019A 81E0              ldi R24,1
 019C 20900200          lds R2,_flag
 01A0 2826              eor R2,R24
 01A2 20920200          sts _flag,R2
 01A6                   .dbline 78
 01A6           ;                }
 01A6           L25:
 01A6                   .dbline 79
 01A6           ;          }
 01A6           L23:
 01A6                   .dbline 81
 01A6           ;         //VOLUP键按下
 01A6           ;         if(!(PINE&VOLDOWN))  
 01A6 0C99              sbic 0x1,4
 01A8 22C0              rjmp L27
 01AA                   .dbline 82
 01AA           ;          {
 01AA                   .dbline 83
 01AA           ;           delay_nus(250);
 01AA 0AEF              ldi R16,250
 01AC 10E0              ldi R17,0
 01AE 0E940000          xcall _delay_nus
 01B2                   .dbline 84
 01B2           ;           if(!(PINE&VOLDOWN))  
 01B2 0C99              sbic 0x1,4
 01B4 1CC0              rjmp L29
 01B6                   .dbline 85
 01B6           ;                 {
 01B6                   .dbline 86
 01B6           ;                 vol=vol+((uint)(2<<8)+2);
 01B6 80910000          lds R24,_vol
 01BA 90910100          lds R25,_vol+1
 01BE 8E5F              subi R24,254  ; offset = 514
 01C0 9D4F              sbci R25,253
 01C2 90930100          sts _vol+1,R25
 01C6 80930000          sts _vol,R24
 01CA                   .dbline 87
 01CA           ;                  if(vol>=0xFAFA) vol=0xF0F0; 
 01CA 8A3F              cpi R24,250
 01CC EAEF              ldi R30,250
 01CE 9E07              cpc R25,R30
 01D0 38F0              brlo L31
 01D2                   .dbline 87
 01D2 80EF              ldi R24,61680
 01D4 90EF              ldi R25,240
 01D6 90930100          sts _vol+1,R25
 01DA 80930000          sts _vol,R24
 01DE 07C0              xjmp L32
 01E0           L31:
 01E0                   .dbline 88
 01E0           ;              else vs1003_cmd_write(0x0b,vol);    //每次左右声道VOL减2
 01E0 20910000          lds R18,_vol
 01E4 30910100          lds R19,_vol+1
 01E8 0BE0              ldi R16,11
 01EA 0E940000          xcall _vs1003_cmd_write
 01EE           L32:
 01EE                   .dbline 89
 01EE           ;                 }
 01EE           L29:
 01EE                   .dbline 90
 01EE           ;          }
 01EE           L27:
 01EE                   .dbline 92
 01EE           ;         //VOLDOWN键按下
 01EE           ;         if(!(PINE&VOLUP)) 
 01EE 0D99              sbic 0x1,5
 01F0 31C0              rjmp L33
 01F2                   .dbline 93
 01F2           ;           {
 01F2                   .dbline 94
 01F2           ;               delay_nus(250);delay_nus(250);delay_nus(250);delay_nus(250);
 01F2 0AEF              ldi R16,250
 01F4 10E0              ldi R17,0
 01F6 0E940000          xcall _delay_nus
 01FA                   .dbline 94
 01FA 0AEF              ldi R16,250
 01FC 10E0              ldi R17,0
 01FE 0E940000          xcall _delay_nus
 0202                   .dbline 94
 0202 0AEF              ldi R16,250
 0204 10E0              ldi R17,0
 0206 0E940000          xcall _delay_nus
 020A                   .dbline 94
 020A 0AEF              ldi R16,250
 020C 10E0              ldi R17,0
 020E 0E940000          xcall _delay_nus
 0212                   .dbline 95
 0212           ;               if(!(PINE&VOLUP)) 
 0212 0D99              sbic 0x1,5
 0214 1FC0              rjmp L35
 0216                   .dbline 96
 0216           ;                 {
 0216                   .dbline 97

⌨️ 快捷键说明

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