📄 mp3.lst
字号:
C51 COMPILER V7.06 MP3 03/02/2006 23:11:51 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE MP3
OBJECT MODULE PLACED IN MP3.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE MP3.c BROWSE DEBUG OBJECTEXTEND
stmt level source
1 /************************************************************************************
2 本程序仅供广大电子爱好者制作MP3学习和参考使用,不得用于其它用途,否则后果自负
3
4 MP3.C File
5 The MP3 play file
6 Created by Computer-lov. Date: 2005.3.19
7 Last edited date: 2005.5.31
8 version 1.1
9 Copyright (c) 2005 Computer-lov
10 All rigths reserved
11 ***************************************************************************************/
12
13 #include "AT89C51SND1C.H"
14 #include "Initial.h"
15 #include "file_system.h"
16 #include "IDE.H"
17 #include "keyboard.h"
18 #include "hardware.h"
19 #include "MP3.H"
20 #include "LCD.H"
21
22 unsigned char status; //程序运行状态
23
24 extern unsigned char mp3_file_exist;
25
26 void DAC_start(unsigned char clk) //DAC开始工作
27 {
28 1 set_DAC_CLK(clk); //根据MP3文件,设置相应的DAC时钟频率
29 1 DAC_interface_en();
30 1 DAC_data_request_en();
31 1 }
32
33
34 unsigned char xdata function,vol,bas,med,tre; //保存音量等设置
35
36 code unsigned char MPEGVer[2][7]={"MPEG-2","MPEG-1"}; //版本显示信息
37 code unsigned char Fs[8]={22,44,24,48,16,32,22,44}; //采样率
38 code unsigned char DACFs[8]={33,16,30,15,46,22,33,16}; //256Fs
39 //code unsigned char DACFs[8]={22,10,20,9,30,15,0,0}; //384Fs
40
41 /////////////////////////// MP3 play /////////////////////////////////////////
42 void play(void)
43 {
44 1 unsigned long int LBA;
45 1 unsigned int i;
46 1 unsigned char sectors_count;
47 1 signed long int file_length;
48 1 unsigned char count;
49 1 unsigned char MPEG_inf; //用来保存MP3版本和采样率
50 1
51 1 /*
52 1 bit0=0 vertion 2
53 1 bit0=1 bertion 1
54 1 */
55 1 LCD_go_home();
C51 COMPILER V7.06 MP3 03/02/2006 23:11:51 PAGE 2
56 1 prints(" ");
57 1 LCD_line_feed();
58 1 prints(" ");
59 1 file_length=file.length;
60 1 LBA=file.next_cluster_number-(dbr[driver_number].root_cluster_num);
61 1 LBA=LBA*(dbr[driver_number].sectors_per_cluster)+DATA_start_sector[driver_number];
62 1
63 1 MP3_CRC_disen();
64 1
65 1 sectors_count = dbr[driver_number].sectors_per_cluster;
66 1
67 1 read_IDE_sector(LBA);
68 1 if(buffer[0]!=0xFF){pause();MP3_decoder_disen();DAC_interface_disen();get_next_file();key=0;return;}
69 1 if((buffer[1]&0x06)!=0x02){pause();MP3_decoder_disen();DAC_interface_disen();key=0;LCD_line_feed();prints
-("MP3 层错误!! ");while(!key);get_next_file();return;}
70 1 //////////////////////// 从MP3侦头中获取采样率和压缩版本信息 //////////////
71 1 MPEG_inf=buffer[2]&0x0C; //采样率
72 1 MPEG_inf>>=1;
73 1 if((buffer[1]&0x18)==0x18)MPEG_inf=MPEG_inf | 0x01; //版本1
74 1 if((buffer[1]&0x18)==0x10)MPEG_inf=MPEG_inf & (~0x01); //版本2
75 1 ///////////////////////////////////////////////////////////////////////////
76 1
77 1 //////////////////////// 填充1K数据 ////////////////////////////////////
78 1 for(i=0;i<512;i++)MP3DAT=buffer[i];
79 1 LBA++;
80 1 sectors_count--;
81 1 if(file_length>512)file_length-=512;
82 1 else {pause();MP3_decoder_disen();DAC_interface_disen();get_next_file();key=0;return;}
83 1 if(sectors_count==0){LBA=get_next_sector();sectors_count=dbr[driver_number].sectors_per_cluster;}
84 1 read_IDE_sector(LBA);
85 1 for(i=0;i<512;i++)MP3DAT=buffer[i];
86 1 LBA++;
87 1 sectors_count--;
88 1 if(file_length>512)file_length-=512;
89 1 else {pause();MP3_decoder_disen();DAC_interface_disen();get_next_file();key=0;return;}
90 1 if(sectors_count==0){LBA=get_next_sector();sectors_count=dbr[driver_number].sectors_per_cluster;}
91 1
92 1 MP3_decoder_en(); //启动解码器
93 1 DAC_start(DACFs[MPEG_inf]); //初始化DAC接口
94 1 byte_offset=512;
95 1 key=KEY_FUN;
96 1 function=FUN_MAX;
97 1 while(1)
98 1 {
99 2 if(key) //如果有键按下
100 2 {
101 3 switch (key)
102 3 {
103 4 case KEY_FUN: //功能键按下
104 4 {
105 5 function++;
106 5 if(function>=FUN_MAX)function=FUN_SEL;
107 5 switch (function)
108 5 {
109 6 case FUN_SEL:LCD_go_home();for(count=0;count<14;count++)write_LCD_data(((unsigned char *)dir_n
-ame)[count]);LCD_line_feed();prints("当前曲号: ");printf(play_count);LED1=1;LED2=1;LED3=1;break;
110 6 case FUN_VOL:LCD_line_feed();prints("音量: ");printf(vol);prints(" ");LED1=0;LED2=1;LED3=
-0;break;
111 6 case FUN_BAS:LCD_line_feed();prints("低音: ");printf(bas);prints(" ");LED1=1;LED2=1;LED3=
-0;break;
112 6 case FUN_MED:LCD_line_feed();prints("中音: ");printf(med);prints(" ");LED1=1;LED2=0;LED3=
-1;break;
C51 COMPILER V7.06 MP3 03/02/2006 23:11:51 PAGE 3
113 6 case FUN_TRE:LCD_line_feed();prints("高音: ");printf(tre);prints(" ");LED1=0;LED2=1;LED3=
-1;break;
114 6 case FUN_BOOT:LCD_line_feed();prints("重低音: ");if(MP3CON&0x40)prints("开");else prints("关")
-;prints(" ");LED1=0;LED2=0;LED3=0;break;
115 6 }
116 5 key=0;break;
117 5 }
118 4 case KEY_UP: //上翻键按下
119 4 {
120 5 switch (function)
121 5 {
122 6 case FUN_SEL:{MP3_decoder_disen();DAC_interface_disen();get_pre_file();LCD_go_home();for(count=
-0;count<14;count++)write_LCD_data(((unsigned char *)dir_name)[count]);LCD_line_feed();prints("当前曲号: ");printf(play_c
-ount);key=0;return;}
123 6 case FUN_VOL:{if(vol<31)vol++;set_vol(vol);set_vor(vol);LCD_line_feed();prints("音量: ");printf
-(vol);prints(" ");break;}
124 6 case FUN_BAS:{if(bas<31)bas++;set_bas(bas);LCD_line_feed();prints("低音: ");printf(bas);prints(
-" ");break;}
125 6 case FUN_MED:{if(med<31)med++;set_med(med);LCD_line_feed();prints("中音: ");printf(med);prints(
-" ");break;}
126 6 case FUN_TRE:{if(tre<31)tre++;set_tre(tre);LCD_line_feed();prints("高音: ");printf(tre);prints(
-" ");break;}
127 6 case FUN_BOOT:{MP3_bass_boost();LCD_line_feed();prints("重低音: ");prints("开");prints(" "
-);break;}
128 6 }
129 5 key=0;break;
130 5 }
131 4 case KEY_DOWN: //下翻键按下
132 4 {
133 5 switch (function)
134 5 {
135 6 case FUN_SEL:{MP3_decoder_disen();DAC_interface_disen();get_next_file();LCD_go_home();for(count
-=0;count<14;count++)write_LCD_data(((unsigned char *)dir_name)[count]);LCD_line_feed();prints("当前曲号: ");printf(play_
-count);key=0;return;}
136 6 case FUN_VOL:{if(vol>0)vol--;set_vol(vol);set_vor(vol);LCD_line_feed();prints("音量: ");printf(
-vol);prints(" ");break;}
137 6 case FUN_BAS:{if(bas>0)bas--;set_bas(bas);LCD_line_feed();prints("低音: ");printf(bas);prints("
- ");break;}
138 6 case FUN_MED:{if(med>0)med--;set_med(med);LCD_line_feed();prints("中音: ");printf(med);prints("
- ");break;}
139 6 case FUN_TRE:{if(tre>0)tre--;set_tre(tre);LCD_line_feed();prints("高音: ");printf(tre);prints("
- ");break;}
140 6 case FUN_BOOT:{MP3_no_bass_boost();LCD_line_feed();prints("重低音: ");prints("关");prints("
- ");break;}
141 6 }
142 5 key=0;break;
143 5 }
144 4 case KEY_OK:
145 4 {
146 5 MP3_decoder_disen();
147 5 DAC_interface_disen();
148 5 status=STOP;
149 5 for(i=(folder_length/2);i<(7+folder_length/2);i++)dir_name[i]=0x2020;
150 5 LCD_line_feed();
151 5 prints("停止 ");
152 5 key=0;
153 5 return;
154 5 }
155 4 }
156 3 }
157 2 while(MPFREQ)
158 2 {
C51 COMPILER V7.06 MP3 03/02/2006 23:11:51 PAGE 4
159 3 if((((unsigned char *)&byte_offset)[0])&0xFE)
160 3 {
161 4 read_IDE_sector(LBA);
162 4 LBA++;
163 4 byte_offset=0;
164 4 sectors_count--;
165 4 file_length-=512;
166 4 while(MPFREQ)
167 4 {
168 5 MP3DAT=buffer[byte_offset];
169 5 byte_offset++;
170 5 if((((unsigned char *)&byte_offset)[0])&0xFE)break;
171 5 }
172 4 if(file_length<=0) {pause();MP3_decoder_disen();DAC_interface_disen();get_next_file();key=0;return;
-}
173 4 if(sectors_count==0){LBA=get_next_sector();sectors_count=(dbr[driver_number].sectors_per_cluster);}
174 4 }
175 3 if(MPFREQ)
176 3 {
177 4 MP3DAT=buffer[byte_offset];
178 4 byte_offset++;
179 4 }
180 3 }
181 2 }
182 1 }
183 ///////////////////////////////////////////////////////////////////////////////////////////
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 1840 ----
CONSTANT SIZE = 137 ----
XDATA SIZE = 5 ----
PDATA SIZE = ---- ----
DATA SIZE = 1 13
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -