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

📄 源程序.htm

📁 我的MP3 DIY 自带原代码希望各位提出宝贵意见和建议
💻 HTM
📖 第 1 页 / 共 5 页
字号:
                DAC_initial();<br>
                keyboard_initial();<br>
                IDE_initial();<br>
                interrupt_initial();<br>
                }<br>
                //////////////////////////////////////////////////<br>
                <br>
                <br>
                /* keyboard.c file<br>
                &nbsp;&nbsp;Created by Computer-lov Date: 2005.3.19<br>
                &nbsp;&nbsp;Copyright (c) 2005 Computer-lov<br>
                */<br>
                <br>
                #include &quot;keyboard.h&quot;<br>
                #include &quot;AT89C51SND1C.H&quot;<br>
                <br>
                //////////////////////////////////////////////////<br>
                unsigned char key=0;<br>
                <br>
                <br>
                void ISR_keyboard(void) interrupt 11&nbsp;&nbsp;&nbsp;//键盘中断处理<br>
                {<br>
                unsigned char key_press_status;<br>
                key_press_status=KBSTA;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//保存按键状态<br>
                if(key)return;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//如果上一次按键未处理,等待处理完后,再响应新的按键<br>
                if(key_press_status&amp;0x01){key=KEY_UP;}&nbsp;&nbsp;&nbsp;//散转<br>
                if(key_press_status&amp;0x02){key=KEY_FUN;}<br>
                if(key_press_status&amp;0x04){key=KEY_DOWN;}<br>
                if(key_press_status&amp;0x08){key=KEY_OK;}<br>
                }<br>
                //////////////////////////////////////////////////<br>
                <br>
                /* MP3.C File<br>
                &nbsp;&nbsp;&nbsp;The MP3 play 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;AT89C51SND1C.H&quot;<br>
                #include &quot;Initial.h&quot;<br>
                #include &quot;file_system.h&quot;<br>
                #include &quot;IDE.H&quot;<br>
                #include &quot;keyboard.h&quot;<br>
                #include &quot;hardware.h&quot;<br>
                #include &quot;MP3.H&quot;<br>
                <br>
                unsigned char status;&nbsp;&nbsp;&nbsp;//程序运行状态<br>
                <br>
                extern unsigned char mp3_file_exist;<br>
                <br>
                void DAC_start(unsigned char clk)&nbsp;&nbsp;//DAC开始工作<br>
                {<br>
                set_DAC_CLK(clk);&nbsp;&nbsp;&nbsp;//根据MP3文件,设置相应的DAC时钟频率<br>
                DAC_interface_en();<br>
                DAC_data_request_en();<br>
                }<br>
                <br>
                <br>
                unsigned char function,vol,bas,med,tre;&nbsp;&nbsp;//保存音量等设置<br>
                <br>
                code unsigned char 
                MPEGVer[2][7]={&quot;MPEG-2&quot;,&quot;MPEG-1&quot;}; //版本显示信息<br>
                code unsigned char Fs[8]={22,44,24,48,16,32,22,44};&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//采样率<br>
                code unsigned char DACFs[8]={33,16,30,15,46,22,33,16};&nbsp;&nbsp;//256Fs<br>
                //code unsigned char DACFs[8]={22,10,20,9,30,15,0,0}; //384Fs<br>
                <br>
                ///////////////////////////&nbsp;&nbsp;MP3 play&nbsp;&nbsp;/////////////////////////////////////////<br>
                void play(void)<br>
                {<br>
                unsigned long int LBA;<br>
                unsigned int i;<br>
                unsigned char sectors_count;<br>
                signed long int file_length;<br>
                <br>
                unsigned char MPEG_inf;&nbsp;&nbsp;&nbsp;//用来保存MP3版本和采样率<br>
                /*<br>
                bit0=0 vertion 2<br>
                bit0=1 bertion 1<br>
                */<br>
                <br>
                file_length=file.length;<br>
                LBA=file.next_cluster_number-(dbr[driver_number].root_cluster_num);<br>
                LBA=LBA*(dbr[driver_number].sectors_per_cluster)+DATA_start_sector[driver_number];<br>
                <br>
                MP3_CRC_disen();<br>
                <br>
                sectors_count = dbr[driver_number].sectors_per_cluster;<br>
                <br>
                read_IDE_sector(LBA);<br>
                if(buffer[0]!=0xFF){pause();MP3_decoder_disen();DAC_interface_disen();get_next_file();key=0;return;}<br>
                //////////////////////// 从MP3侦头中获取采样率和压缩版本信息&nbsp;&nbsp;//////////////<br>
                MPEG_inf=buffer[2]&amp;0x0C; //采样率<br>
                MPEG_inf&gt;&gt;=1;<br>
                if((buffer[1]&amp;0x18)==0x18)MPEG_inf=MPEG_inf | 0x01; //版本1<br>
                if((buffer[1]&amp;0x18)==0x10)MPEG_inf=MPEG_inf &amp; (~0x01);&nbsp;&nbsp;//版本2<br>
                ///////////////////////////////////////////////////////////////////////////<br>
                <br>
                ////////////////////////&nbsp;&nbsp;&nbsp;填充1K数据&nbsp;&nbsp;////////////////////////////////////<br>
                for(i=0;i&lt;512;i++)MP3DAT=buffer[i];<br>
                LBA++;<br>
                sectors_count--;<br>
                if(file_length&gt;512)file_length-=512;<br>
                else 
                {pause();MP3_decoder_disen();DAC_interface_disen();get_next_file();key=0;return;}<br>
                if(sectors_count==0){LBA=get_next_sector();sectors_count=dbr[driver_number].sectors_per_cluster;}<br>
                read_IDE_sector(LBA);<br>
                for(i=0;i&lt;512;i++)MP3DAT=buffer[i];<br>
                LBA++;<br>
                sectors_count--;<br>
                if(file_length&gt;512)file_length-=512;<br>
                else 
                {pause();MP3_decoder_disen();DAC_interface_disen();get_next_file();key=0;return;}<br>
                if(sectors_count==0){LBA=get_next_sector();sectors_count=dbr[driver_number].sectors_per_cluster;}<br>
                <br>
                MP3_decoder_en();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//启动解码器<br>
                DAC_start(DACFs[MPEG_inf]); //初始化DAC接口<br>
                byte_offset=512;<br>
                while(1)<br>
                &nbsp;&nbsp;{<br>
                &nbsp;&nbsp;&nbsp;&nbsp;if(key)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//如果有键按下<br>
                &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>
                &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;switch (key)<br>
                &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>
                &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case KEY_FUN:&nbsp;&nbsp;//功能键按下<br>
                &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>
                &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;function++;<br>
                &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(function&gt;=FUN_MAX)function=FUN_SEL;<br>
                &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;switch 
                (function)<br>
                &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>
                &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case 
                FUN_SEL:LED1=1;LED2=1;LED3=1;break;<br>
                &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case 
                FUN_VOL:LED1=0;LED2=1;LED3=0;break;<br>
                &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case 
                FUN_BAS:LED1=1;LED2=1;LED3=0;break;<br>
                &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case 
                FUN_MED:LED1=1;LED2=0;LED3=1;break;<br>
                &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case 
                FUN_TRE:LED1=0;LED2=1;LED3=1;break;<br>
                &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case 
                FUN_BOOT:LED1=0;LED2=0;LED3=0;break;<br>
                &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>
                &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;key=0;break;<br>
                &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>
                &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case KEY_UP:&nbsp;&nbsp;&nbsp;//上翻键按下<br>
                &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>
                &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;switch 
                (function)<br>
                &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>
                &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case 
                FUN_SEL:{MP3_decoder_disen();DAC_interface_disen();get_pre_file();key=0;return;}<br>
                &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case 
                FUN_VOL:{if(vol&lt;31)vol++;set_vol(vol);set_vor(vol);break;}<br>
                &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case 
                FUN_BAS:{if(bas&lt;31)bas++;set_bas(bas);break;}<br>
                &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case 
                FUN_MED:{if(med&lt;31)med++;set_med(med);break;}<br>
                &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case 
                FUN_TRE:{if(tre&lt;31)tre++;set_tre(tre);break;}<br>
                &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case 
                FUN_BOOT:{MP3_bass_boost();break;}<br>
                &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>
                &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;key=0;break;<br>
                &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>
                &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case KEY_DOWN:&nbsp;&nbsp;&nbsp;//下翻键按下<br>
                &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>
                &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;switch 
                (function)<br>
                &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>
                &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case 
                FUN_SEL:{MP3_decoder_disen();DAC_interface_disen();get_next_file();key=0;return;}<br>
                &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case 
                FUN_VOL:{if(vol&gt;0)vol--;set_vol(vol);set_vor(vol);break;}<br>
                &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case 
                FUN_BAS:{if(bas&gt;0)bas--;set_bas(bas);break;}<br>
                &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case 
                FUN_MED:{if(med&gt;0)med--;set_med(med);break;}<br>
                &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case 
                FUN_TRE:{if(tre&gt;0)tre--;set_tre(tre);break;}<br>
                &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case 
                FUN_BOOT:{MP3_no_bass_boost();break;}<br>
                &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>
                &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;key=0;break;<br>
                &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>
                &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case KEY_OK:<br>
                &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>
                &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MP3_decoder_disen();<br>
                &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DAC_interface_disen();<br>
                &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;status=STOP;<br>
                &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;key=0;<br>
                &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return;<br>
                &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>
                &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>
                &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>
                //&nbsp;&nbsp;&nbsp;&nbsp;if(MPREQ)<br>
                &nbsp;&nbsp;&nbsp;&nbsp;{<br>
                &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while(MPFREQ)<br>
                &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>
                &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MP3DAT=buffer[byte_offset];<br>
                &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;byte_offset++;<br>
                &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if((((unsigned char 
                *)&amp;byte_offset)[0])&amp;0xFE)<br>
                &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>
                &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;read_IDE_sector(LBA);<br>
                &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LBA++;<br>
                &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;byte_offset=0;<br>
                &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sectors_count--;<br>
                &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;f

⌨️ 快捷键说明

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