📄 源程序.htm
字号:
DAC_initial();<br>
keyboard_initial();<br>
IDE_initial();<br>
interrupt_initial();<br>
}<br>
//////////////////////////////////////////////////<br>
<br>
<br>
/* keyboard.c file<br>
Created by Computer-lov Date: 2005.3.19<br>
Copyright (c) 2005 Computer-lov<br>
*/<br>
<br>
#include "keyboard.h"<br>
#include "AT89C51SND1C.H"<br>
<br>
//////////////////////////////////////////////////<br>
unsigned char key=0;<br>
<br>
<br>
void ISR_keyboard(void) interrupt 11 //键盘中断处理<br>
{<br>
unsigned char key_press_status;<br>
key_press_status=KBSTA; //保存按键状态<br>
if(key)return; //如果上一次按键未处理,等待处理完后,再响应新的按键<br>
if(key_press_status&0x01){key=KEY_UP;} //散转<br>
if(key_press_status&0x02){key=KEY_FUN;}<br>
if(key_press_status&0x04){key=KEY_DOWN;}<br>
if(key_press_status&0x08){key=KEY_OK;}<br>
}<br>
//////////////////////////////////////////////////<br>
<br>
/* MP3.C File<br>
The MP3 play file<br>
Created by Computer-lov date: 2005.3.19<br>
Copyright (c) 2005 Computer-lov<br>
version 1.0<br>
*/<br>
<br>
#include "AT89C51SND1C.H"<br>
#include "Initial.h"<br>
#include "file_system.h"<br>
#include "IDE.H"<br>
#include "keyboard.h"<br>
#include "hardware.h"<br>
#include "MP3.H"<br>
<br>
unsigned char status; //程序运行状态<br>
<br>
extern unsigned char mp3_file_exist;<br>
<br>
void DAC_start(unsigned char clk) //DAC开始工作<br>
{<br>
set_DAC_CLK(clk); //根据MP3文件,设置相应的DAC时钟频率<br>
DAC_interface_en();<br>
DAC_data_request_en();<br>
}<br>
<br>
<br>
unsigned char function,vol,bas,med,tre; //保存音量等设置<br>
<br>
code unsigned char
MPEGVer[2][7]={"MPEG-2","MPEG-1"}; //版本显示信息<br>
code unsigned char Fs[8]={22,44,24,48,16,32,22,44}; //采样率<br>
code unsigned char DACFs[8]={33,16,30,15,46,22,33,16}; //256Fs<br>
//code unsigned char DACFs[8]={22,10,20,9,30,15,0,0}; //384Fs<br>
<br>
/////////////////////////// MP3 play /////////////////////////////////////////<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; //用来保存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侦头中获取采样率和压缩版本信息 //////////////<br>
MPEG_inf=buffer[2]&0x0C; //采样率<br>
MPEG_inf>>=1;<br>
if((buffer[1]&0x18)==0x18)MPEG_inf=MPEG_inf | 0x01; //版本1<br>
if((buffer[1]&0x18)==0x10)MPEG_inf=MPEG_inf & (~0x01); //版本2<br>
///////////////////////////////////////////////////////////////////////////<br>
<br>
//////////////////////// 填充1K数据 ////////////////////////////////////<br>
for(i=0;i<512;i++)MP3DAT=buffer[i];<br>
LBA++;<br>
sectors_count--;<br>
if(file_length>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<512;i++)MP3DAT=buffer[i];<br>
LBA++;<br>
sectors_count--;<br>
if(file_length>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(); //启动解码器<br>
DAC_start(DACFs[MPEG_inf]); //初始化DAC接口<br>
byte_offset=512;<br>
while(1)<br>
{<br>
if(key) //如果有键按下<br>
{<br>
switch (key)<br>
{<br>
case KEY_FUN: //功能键按下<br>
{<br>
function++;<br>
if(function>=FUN_MAX)function=FUN_SEL;<br>
switch
(function)<br>
{<br>
case
FUN_SEL:LED1=1;LED2=1;LED3=1;break;<br>
case
FUN_VOL:LED1=0;LED2=1;LED3=0;break;<br>
case
FUN_BAS:LED1=1;LED2=1;LED3=0;break;<br>
case
FUN_MED:LED1=1;LED2=0;LED3=1;break;<br>
case
FUN_TRE:LED1=0;LED2=1;LED3=1;break;<br>
case
FUN_BOOT:LED1=0;LED2=0;LED3=0;break;<br>
}<br>
key=0;break;<br>
}<br>
case KEY_UP: //上翻键按下<br>
{<br>
switch
(function)<br>
{<br>
case
FUN_SEL:{MP3_decoder_disen();DAC_interface_disen();get_pre_file();key=0;return;}<br>
case
FUN_VOL:{if(vol<31)vol++;set_vol(vol);set_vor(vol);break;}<br>
case
FUN_BAS:{if(bas<31)bas++;set_bas(bas);break;}<br>
case
FUN_MED:{if(med<31)med++;set_med(med);break;}<br>
case
FUN_TRE:{if(tre<31)tre++;set_tre(tre);break;}<br>
case
FUN_BOOT:{MP3_bass_boost();break;}<br>
}<br>
key=0;break;<br>
}<br>
case KEY_DOWN: //下翻键按下<br>
{<br>
switch
(function)<br>
{<br>
case
FUN_SEL:{MP3_decoder_disen();DAC_interface_disen();get_next_file();key=0;return;}<br>
case
FUN_VOL:{if(vol>0)vol--;set_vol(vol);set_vor(vol);break;}<br>
case
FUN_BAS:{if(bas>0)bas--;set_bas(bas);break;}<br>
case
FUN_MED:{if(med>0)med--;set_med(med);break;}<br>
case
FUN_TRE:{if(tre>0)tre--;set_tre(tre);break;}<br>
case
FUN_BOOT:{MP3_no_bass_boost();break;}<br>
}<br>
key=0;break;<br>
}<br>
case KEY_OK:<br>
{<br>
MP3_decoder_disen();<br>
DAC_interface_disen();<br>
status=STOP;<br>
key=0;<br>
return;<br>
}<br>
}<br>
}<br>
// if(MPREQ)<br>
{<br>
while(MPFREQ)<br>
{<br>
MP3DAT=buffer[byte_offset];<br>
byte_offset++;<br>
if((((unsigned char
*)&byte_offset)[0])&0xFE)<br>
{<br>
read_IDE_sector(LBA);<br>
LBA++;<br>
byte_offset=0;<br>
sectors_count--;<br>
f
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -