/************************************************************************************
本程序仅供广大电子爱好者制作MP3学习和参考使用,不得用于其它用途,否则后果自负
AT89C51SND1C 解码芯片做的硬盘MP3,软件还在完善中,现在只支持一块硬盘,一个分区,
只支持根目录歌曲播放,不支持文件夹。只支持FAT32文件系统,部分MP3文件不能解码。
*************************************************************************************/
/* MAIN.C File
The MP3 main file
Created by Computer-lov date: 2005.3.19
Copyright (c) 2005 Computer-lov
version 1.0
*/
#include "AT89C51SND1C.H"
#include "ide.h"
#include "hardware.h"
#include "file_system.h"
#include "Initial.h"
#include "keyboard.h"
#include "MP3.H"
//////////////////////////////////////////// 主函数 ///////////////////////////////
void main(void)
{
system_initial(); //初始化
status=START;
driver_number=0; //选择第一个分区
key=0;
function=FUN_SEL; //歌曲选择状态
while(1)
{
switch (status)
{
case START: //开机
{
vol=10;
bas=10;
med=10;
tre=10;
set_vol(vol);
set_vor(vol);
set_bas(bas);
set_med(med);
set_tre(tre); //音量等初始化
while(!key);
if(key==KEY_OK)
{
status=PLAY;
key=0;
break;
}
}
case STOP:{ //停止
while(!key);
if(key==KEY_OK)
{
status=PLAY;
key=0;
break;
}
}
case PLAY:{play();break;} //播放
case USB: {break;} //USB下载
key=0;
}
}
}
/////////////////////////////////////////////////////////////////////////////////////////
/* IDE.C File
Created by Computer-lov Date: 2005.3.19
Copyright (c) 2005 Computer-lov
version 1.0
*/
#include "AT89C51SND1C.h"
#include "file_system.h"
#include "IDE.H"
#include "hardware.h"
unsigned char DISK_CAPACITY[8];
//unsigned char IDE_Buffer_H,IDE_Buffer_L;
unsigned char driver_number=0; //磁盘驱动器
////////////////////////////////////// IDE 状态寄存器 ////////////////////////////////////
unsigned char bdata IDE_status;
sbit IDE_BSY = IDE_status^7;
sbit IDE_DRDY = IDE_status^6;
sbit IDE_DWF = IDE_status^5;
sbit IDE_DSC = IDE_status^4;
sbit IDE_DRQ = IDE_status^3;
sbit IDE_CORR = IDE_status^2;
sbit IDE_IDX = IDE_status^1;
sbit IDE_ERR = IDE_status^0;
//////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////// IDE 错误寄存器 ////////////////////////////////////
unsigned char bdata IDE_error_register;
sbit IDE_BBK = IDE_error_register^7;
sbit IDE_UNC = IDE_error_register^6;
sbit IDE_MC = IDE_error_register^5;
sbit IDE_IDNF = IDE_error_register^4;
sbit IDE_MCR = IDE_error_register^3;
sbit IDE_ABRT = IDE_error_register^2;
sbit IDE_TKONF= IDE_error_register^1;
sbit IDE_AMNF = IDE_error_register^0;
//////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////
void delayXms(unsigned int x) //延时x毫秒,时间不准的
{
unsigned int i;
for(;x>0;x--)
for(i=0;i<500;i++);
}
//////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////// IDE 复位 ///////////////////////////////////////////////
void reset_IDE(void)
{
IDE_Address=IDE_Reset;
IDE_ALE=1;
IDE_ALE=0;
delayXms(200);
IDE_Address=IDE_Bus_Not_Use;
IDE_ALE=1;
IDE_ALE=0;
delayXms(200);
while(!IDE_IORDY);
}
///////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////// 读IDE 16位,未用 ////////////////////////////////////////
/*void read_IDE_16(unsigned char address)
{
while(!IDE_IORDY);
IDE_Address=address;
set_IDE_address();
IDE_DATA_H=0xFF;
IDE_DATA_L=0xFF;
IDE_DIOR=0;
IDE_Buffer_H=IDE_DATA_H;
IDE_Buffer_L=IDE_DATA_L;
IDE_DIOR=1;
IDE_Address=IDE_Bus_Not_Use;
set_IDE_address();
}*/
///////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////// 写IDE 16位,未用 ////////////////////////////////////////
/*void write_IDE_16(unsigned char address)
{
while(!IDE_IORDY);
IDE_Address=address;
set_IDE_address();
IDE_DIOW=0;
IDE_DATA_H=IDE_Buffer_H;
IDE_DATA_L=IDE_Buffer_L;
IDE_DIOW=1;
IDE_Address=IDE_Bus_Not_Use;
set_IDE_address();
}*/
///////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////// 读IDE 低8位 /////////////////////////////////
unsigned char read_IDE_8(unsigned char address)
{
unsigned char temp;
while(!IDE_IORDY);
IDE_Address=address;
set_IDE_address();
IDE_DATA_H=0xFF;
IDE_DATA_L=0xFF;
IDE_DIOR=0;
temp=IDE_DATA_L;
IDE_DIOR=1;
IDE_Address=IDE_Bus_Not_Use;
set_IDE_address();
return temp;
}
///////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////// 写IDE 低8位 /////////////////////////////////
void write_IDE_8(unsigned char address,unsigned char w_data)
{
while(!IDE_IORDY);
IDE_Address=address;
set_IDE_address();
IDE_DIOW=0;
IDE_DATA_L=w_data;
IDE_DIOW=1;
IDE_Address=IDE_Bus_Not_Use;
set_IDE_address();
}
///////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////// 从IDE读一个字 //////////////////////////////////
/*void read_IDE_word(void)
{
read_IDE_16(IDE_Data);
}*/
///////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////// 往IDE写一个字 ///////////////////////////////////
/*void write_IDE_word(void)
{
write_IDE_16(IDE_Data);
}*/
///////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////// 读 IDE 状态寄存器 /////////////////////////////////
void read_IDE_status(void)
{
IDE_status=read_IDE_8(IDE_Status); //结果保存在状态寄存器中
}
///////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////// 读 IDE 错误寄存器 ///////////////////////////////////
void read_IDE_error(void)
{
IDE_error_register=read_IDE_8(IDE_Error_Register); //结果保存在错误寄存器中
}
///////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////// 等待IDE ///////////////////////////////////////////
unsigned char wait_IDE_busy(void)
{
while(!IDE_IORDY);
do
{
read_IDE_status();
if(IDE_ERR)
{
read_IDE_error();
}
}while(IDE_BSY);
IDE_Address=IDE_Bus_Not_Use;
set_IDE_address();
return 0;
}
//////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////// 写 IDE 命令 /////////////////////////////////////
void write_IDE_command(unsigned char command)
{
write_IDE_8(IDE_Command,command);
wait_IDE_busy();
}
///////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////// IDE 软复位 /////////////////////////////////////
/*(void soft_reset_IDE(void)
{
write_IDE_8(IDE_Device_Control,0xFD);
wait_IDE_busy();
}
*/
///////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////// 写IDE 逻辑块地址LBA //////////////////////////////
void write_IDE_LBA(unsigned long int _LBA)
{
unsigned char LBA0;
LBA0=((unsigned char *)&_LBA)[0];
LBA0&=0x0F;
LBA0|=0xE0;//磁盘0工作在LBA模式下
write_IDE_8(IDE_LBA_Bits_24_27,LBA0);
write_IDE_8(IDE_LBA_Bits_16_23,((unsigned char *)&_LBA)[1]);
write_IDE_8(IDE_LBA_Bits_8_15,((unsigned char *)&_LBA)[2]);
write_IDE_8(IDE_LBA_Bits_0_7,((unsigned char *)&_LBA)[3]);
}
///////////////////////////////////////////////////////////////////////////////////////////////
unsigned char xdata buffer[512]; //扇区缓冲
unsigned int byte_offset; //字节偏移
unsig
硬盘MP3源码.rar_AT89C51SND1C_at89c51snd_mp3_硬盘 MP3_硬盘MP3
版权申诉
47 浏览量
2022-09-22
16:34:01
上传
评论
收藏 10KB RAR 举报
朱moyimi
- 粉丝: 61
- 资源: 1万+
最新资源
- STM8L101F3P6单片机+CC1100模块433M遥控器设计硬件(原理图+PCB)工程文件.zip
- 上传下载铁人下载系统 Liuxing 1.0-liuxing1.0.rar
- 南京邮电大学数学实验实力雄厚,凭借其优秀的师资力量、丰富的实践教学资源和卓越的科研成果,成为国内一流的数学实验教学和科研基地
- 【火爆朋友圈的今天吃什么源码 v1.0】随机的为用户带来每一天的用餐选择和推荐.rar
- MPU6050中文版数据手册
- 上传下载手机电影下载-mobiledy.rar
- 响应式旅游网站源码下载 马尔代夫旅游网站.rar
- CMS小涴熊漫画连载系统漫画网站源码 带采集API.rar
- 福袋点点.apk
- 基于STM32的电子秤采用0.96寸OLED显示UI界面源码.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈