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

📄 源程序.htm

📁 我的MP3 DIY 自带原代码希望各位提出宝贵意见和建议
💻 HTM
📖 第 1 页 / 共 5 页
字号:
                i++;<br>
                ((unsigned char 
                *)&amp;(file.next_cluster_number))[2]=FAT_buffer[i];<br>
                i++;<br>
                ((unsigned char 
                *)&amp;(file.next_cluster_number))[1]=FAT_buffer[i];<br>
                i++;<br>
                ((unsigned char 
                *)&amp;(file.next_cluster_number))[0]=FAT_buffer[i];&nbsp;&nbsp;//获取下一簇号<br>
                LBA=file.next_cluster_number-(dbr[driver_number].root_cluster_num);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//保存簇号<br>
                LBA=LBA*(dbr[0].sectors_per_cluster)+DATA_start_sector[0];&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//转换成扇区地址<br>
                // IDE_LED=!IDE_LED;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//硬盘指示灯闪烁<br>
                return LBA;<br>
                }<br>
                ////////////////////////////////////////////////////////////////////////////////////////////////<br>
                <br>
                /////////////////////////////////////////////////&nbsp;&nbsp;获取文件夹的下一扇区地址&nbsp;&nbsp;///////////////////<br>
                unsigned long int get_dir_next_sector(void)<br>
                {<br>
                unsigned long int LBA,LBA2;<br>
                unsigned int i;<br>
                LBA=current_dir.current_cluster_number-(dbr[driver_number].root_cluster_num);<br>
                LBA=LBA*(dbr[driver_number].sectors_per_cluster)+DATA_start_sector[driver_number];<br>
                LBA2=(current_dir.current_cluster_number)/((dbr[driver_number].bytes_per_sectors)/4);&nbsp;&nbsp;//计算扇区地址<br>
                i=(current_dir.current_cluster_number)*4-LBA2*dbr[driver_number].bytes_per_sectors;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//计算偏移地址<br>
                LBA2=LBA2+FAT_start_sector[driver_number];<br>
                read_IDE_sector(LBA2);<br>
                ((unsigned char 
                *)&amp;(current_dir.current_cluster_number))[3]=buffer[i];<br>
                i++;<br>
                ((unsigned char 
                *)&amp;(current_dir.current_cluster_number))[2]=buffer[i];<br>
                i++;<br>
                ((unsigned char 
                *)&amp;(current_dir.current_cluster_number))[1]=buffer[i];<br>
                i++;<br>
                ((unsigned char 
                *)&amp;(current_dir.current_cluster_number))[0]=buffer[i];&nbsp;&nbsp;//获取下一簇号<br>
                return LBA;<br>
                }<br>
                ////////////////////////////////////////////////////////////////////////////////////////////////<br>
                <br>
                ////////////////////////////////////////////////////////////////////////////////////////////////<br>
                void get_nst_file(void)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//获取第n个MP3文件<br>
                {<br>
                unsigned int i,j,k,temp_count;<br>
                unsigned long int LBA;<br>
                // LBA=DATA_start_sector[driver_number];<br>
                temp_count=0;<br>
                current_dir.current_cluster_number=current_dir.first_cluster_number;<br>
                do<br>
                &nbsp;&nbsp;{<br>
                &nbsp;&nbsp;&nbsp;LBA=get_dir_next_sector();<br>
                &nbsp;&nbsp;&nbsp;for(i=0;i&lt;dbr[driver_number].sectors_per_cluster;i++)<br>
                &nbsp;&nbsp;&nbsp;&nbsp;{<br>
                &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;read_IDE_sector(LBA);<br>
                &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for(j=0;j&lt;dbr[driver_number].bytes_per_sectors/32;j++)<br>
                &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>
                &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for(k=0;k&lt;11;k++)file.name[k]=buffer[j*32+k];<br>
                &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;file.attribute=buffer[j*32+11];<br>
                &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(is_a_mp3_file())<br>
                &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>
                &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;temp_count++;<br>
                &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(temp_count==play_count)<br>
                &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>
                &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;((unsigned 
                char *)&amp;(file.first_cluster_number))[0]=buffer[j*32+0x15];<br>
                &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;((unsigned 
                char *)&amp;(file.first_cluster_number))[1]=buffer[j*32+0x14];<br>
                &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;((unsigned 
                char *)&amp;(file.first_cluster_number))[2]=buffer[j*32+0x1B];<br>
                &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;((unsigned 
                char *)&amp;(file.first_cluster_number))[3]=buffer[j*32+0x1A];<br>
                &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;((unsigned 
                char *)&amp;(file.length))[3]=buffer[j*32+0x1C];<br>
                &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;((unsigned 
                char *)&amp;(file.length))[2]=buffer[j*32+0x1D];<br>
                &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;((unsigned 
                char *)&amp;(file.length))[1]=buffer[j*32+0x1E];<br>
                &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;((unsigned 
                char *)&amp;(file.length))[0]=buffer[j*32+0x1F];<br>
                &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;file.next_cluster_number=file.first_cluster_number;<br>
                &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return;<br>
                &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>
                &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>
                &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>
                &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LBA++;<br>
                &nbsp;&nbsp;&nbsp;&nbsp;}<br>
                &nbsp;&nbsp;}while(!(current_dir.current_cluster_number&gt;=0xFFFFFFF8)); 
                //直到文件夹结束<br>
                }<br>
                ////////////////////////////////////////////////////////////////////////////////////////////////<br>
                <br>
                ////////////////////////////////////////////////////////////////////////////////////////////////<br>
                void get_pre_file(void)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//打开上一个MP3文件,文件信息保存在file结构中<br>
                {<br>
                if(play_count&gt;=2)play_count--;<br>
                else 
                {file.next_cluster_number=file.first_cluster_number;return;} //如果已到达该文件夹最前一个文件,则播放原文件<br>
                get_nst_file();<br>
                }<br>
                ////////////////////////////////////////////////////////////////////////////////////////////////<br>
                <br>
                ////////////////////////////////////////////////////////////////////////////////////////////////<br>
                void get_next_file(void)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//打开下一个MP3文件<br>
                {<br>
                play_count++;<br>
                get_nst_file();<br>
                }<br>
                ////////////////////////////////////////////////////////////////////////////////////////////////<br>
                <br>
                DIR xdata current_dir;<br>
                <br>
                /*<br>
                &nbsp;&nbsp;&nbsp;Initial.c file<br>
                &nbsp;&nbsp;&nbsp;Created by Computer-lov Date: 2005.3.19<br>
                &nbsp;&nbsp;&nbsp;Copyright (c) 2005 Computer-lov<br>
                &nbsp;&nbsp;&nbsp;version 1.0<br>
                */<br>
                <br>
                #include &quot;Initial.h&quot;<br>
                #include &quot;IDE.h&quot;<br>
                #include &quot;AT89C51SND1C.H&quot;<br>
                #include &quot;keyboard.h&quot;<br>
                #include &quot;hardware.h&quot;<br>
                <br>
                //////////////////////////////////////////////////<br>
                void PLL_initial(void)&nbsp;&nbsp;&nbsp;&nbsp;//PLL初始化<br>
                {<br>
                // PLLRDIV=0x02;&nbsp;&nbsp;&nbsp;//使用16M晶振,产生192M频率<br>
                // PLLNDIV=0x00;<br>
                PLLRDIV=(0x5F)&gt;&gt;2; //使用20M晶振,产生192M频率<br>
                PLLNDIV=0x09;<br>
                PLLCON=0xC8;&nbsp;&nbsp;&nbsp;&nbsp;//复位PLL<br>
                PLLCON=0xC2;&nbsp;&nbsp;&nbsp;&nbsp;//使能PLL<br>
                CKCON=0x01;<br>
                while(!PLOCK);&nbsp;&nbsp;//等待PLL锁定<br>
                }<br>
                //////////////////////////////////////////////////<br>
                <br>
                //////////////////////////////////////////////////<br>
                void RAM_initial(void)&nbsp;&nbsp;&nbsp;//RAM初始化<br>
                {<br>
                AUXR=0x0C;&nbsp;&nbsp;//禁止外部RAM,使用内部2KRAM<br>
                }<br>
                //////////////////////////////////////////////////<br>
                <br>
                //////////////////////////////////////////////////<br>
                void interrupt_initial(void)&nbsp;&nbsp;//中断初始化<br>
                {<br>
                EA=0;<br>
                EAUD=0;<br>
                EMP3=0;<br>
                ES=0;<br>
                ET1=0;<br>
                EX1=0;<br>
                ET0=0;<br>
                EX0=0;<br>
                <br>
                IEN1=0x10; //允许键盘中断<br>
                <br>
                IPH0=0x00; //优先级设置为默认<br>
                IPH1=0x00;<br>
                IPL0=0x00;<br>
                IPL1=0x00;<br>
                EA=1;<br>
                }<br>
                //////////////////////////////////////////////////<br>
                <br>
                /*void timer_initial(void)<br>
                {<br>
                <br>
                }*/<br>
                <br>
                <br>
                //////////////////////////////////////////////////<br>
                void MP3_decoder_initial(void)&nbsp;&nbsp;//MP3解码器初始化<br>
                {<br>
                MP3CON=0x3F;<br>
                MP3CLK=0x07;&nbsp;&nbsp;//MP3解码时钟为32MHz<br>
                MP3_decoder_disen(); //先停止MP3解码器<br>
                }<br>
                //////////////////////////////////////////////////<br>
                <br>
                //////////////////////////////////////////////////<br>
                void DAC_initial(void)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//DAC初始化<br>
                {<br>
                AUDCON0=0x72;&nbsp;&nbsp;// 256Fs<br>
                // AUDCON0=0x73; //384Fs<br>
                AUDCON1=0x00;<br>
                }<br>
                //////////////////////////////////////////////////<br>
                <br>
                //////////////////////////////////////////////////<br>
                void keyboard_initial(void)&nbsp;&nbsp;&nbsp;&nbsp;//键盘初始化<br>
                {<br>
                KBCON=0x00;&nbsp;&nbsp;&nbsp;//低电平触发,允许中断<br>
                KBSTA=0x80;&nbsp;&nbsp;&nbsp;//允许键盘从休眠模式唤醒<br>
                }<br>
                //////////////////////////////////////////////////<br>
                <br>
                //////////////////////////////////////////////////<br>
                void system_initial(void)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//系统开机初始化<br>
                {<br>
                IDE_DATA_L=IDE_Bus_Not_Use;<br>
                IDE_ALE=1;<br>
                IDE_ALE=0;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//IDE数据总线初始化为高阻状态<br>
                <br>
                PLL_initial();<br>
                MP3_decoder_initial();<br>
                RAM_initial();<br>

⌨️ 快捷键说明

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