资源简介
上次 硬盘MP3播放器 的原理图及源代码改进版
经过一段时间的使用,上次的硬盘MP3播放器增加了USB下载文件功能;
汉字LCD显示功能;子文件夹功能等。并对软件做了一些修改。并将
硬件电路图画出来了。由于做得仓促,难免有不妥之处,请大家谅解,
欢迎指出错误。谢谢。
现在情况如下:
支持FAT32,FAT16/12还未做。
支持USB下载文件功能,速度300KB/S左右(USB1.1)。
无录音功能。
7.5*2个汉字LCD显示功能,能显示歌曲名,路径名(滚动显示)
支持多个文件夹功能。
有前后选曲、暂停、软件音量、高、中、低音控制,重低音音效等功能。
无软关机功能,现在拔电源操作^_^。
软件还在完善中,有一些bug。
代码片段和文件信息
/************************************************************************************
本程序仅供广大电子爱好者制作MP3学习和参考使用,不得用于其它用途,否则后果自负
file_system.c file
Created by Computer-lov. Date: 2005.3.19
Last edited date: 2005.5.31
version 1.1
Copyright (c) 2005 Computer-lov
All rigths reserved
*************************************************************************************/
#include “file_system.h“
#include “IDE.H“
#include “hardware.h“
#include “lcd.h“
#include “mp3.h“
#include “keyboard.h“
FILE xdata file;
unsigned int dir_length; //文件名长度
unsigned int folder_length; //文件夹名长度
//////////////////////////////////// 判断是否为一个 MP3 文件 ///////////////////////////////
unsigned char is_a_mp3_file(void)
{
if((file.name[0]==0x00)||(file.name[0]==0xE5)||(file.name[0]==‘.‘))return 0;
if(file.attribute==0x0F)return 0; //此项目为长文件名项目
if(file.attribute & 0x04)return 0; //此文件为系统文件
if(file.attribute & 0x08)return 0; //此项目为系统标卷
if(file.attribute & 0x10)return 0; //此项目为子目录
if((file.name[8]==‘M‘)&&(file.name[9]==‘P‘)&&(file.name[10]==‘3‘))return 1;
else return 0;
}
///////////////////////////////////////////////////////////////////////////////////////////////
unsigned long int LAST_FAT_LBA;
//最后一次读取FAT时的逻辑块地址,用来判断本次读取是否需要重新从硬盘中读取,以加快速度
unsigned int disp_count=0;
unsigned char disp_time;
////////////////////////////////////////////////////////////////////////////////////////////////
unsigned long int get_next_sector(void) //根据当前簇号,获取下一个扇区地址
{
unsigned long int LBA;
unsigned int i;
LBA=(file.next_cluster_number)/((dbr[driver_number].bytes_per_sectors)/4); //计算扇区地址
i=(file.next_cluster_number)*4-LBA*dbr[driver_number].bytes_per_sectors; //计算偏移地址
if(LAST_FAT_LBA!=LBA) //如果数据不在FAT_buffer[]中,则需要重新读取
{
LAST_FAT_LBA=LBA;
LBA=LBA+FAT_start_sector[driver_number];
read_IDE_FAT_sector(LBA);
}
((unsigned char *)&(file.next_cluster_number))[3]=FAT_buffer[i];
i++;
((unsigned char *)&(file.next_cluster_number))[2]=FAT_buffer[i];
i++;
((unsigned char *)&(file.next_cluster_number))[1]=FAT_buffer[i];
i++;
((unsigned char *)&(file.next_cluster_number))[0]=FAT_buffer[i]; //获取下一簇号
LBA=file.next_cluster_number-(dbr[driver_number].root_cluster_num); //保存簇号
LBA=LBA*(dbr[0].sectors_per_cluster)+DATA_start_sector[0]; //转换成扇区地址
// IDE_LED=!IDE_LED; //硬盘指示灯闪烁
disp_time++;
if(disp_time>3)
{
disp_time=0;
LCD_go_home();
disp_count+=2;
for(i=0;i<14;i++)write_LCD_data(((unsigned char *)dir_name)[(i+disp_count)%(dir_length+4)]);
}
return LBA;
}
////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////// 获取文件夹的下一扇区地址 ///////////////////
unsigned long int get_dir_next_sector(void)
{
unsigned long int LBALBA2;
unsigned int i;
LBA=current_dir.curren
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 865 2006-03-02 23:11 MP3_OK\MP3.h
文件 17650 2006-03-02 23:11 MP3_OK\file_system.c
文件 14225 2006-03-02 23:11 MP3_OK\IDE.C
文件 2767 2006-03-02 23:11 MP3_OK\Initial.c
文件 1030 2006-03-02 23:11 MP3_OK\keyboard.c
文件 4825 2006-03-02 23:11 MP3_OK\LCD.C
文件 4930 2006-03-02 23:13 MP3_OK\main.c
文件 7648 2006-03-02 23:11 MP3_OK\MP3.c
文件 7809 2005-04-06 18:53 MP3_OK\MP32.c
文件 25805 2006-03-02 23:11 MP3_OK\Usb.c
文件 7872 2005-04-02 19:50 MP3_OK\AT89C51SND1C.h
文件 1909 2006-03-02 23:11 MP3_OK\file_system.h
文件 1197 2006-03-02 23:11 MP3_OK\hardware.h
文件 5825 2006-03-02 23:11 MP3_OK\IDE.h
文件 2259 2006-03-02 23:11 MP3_OK\Initial.h
文件 635 2006-03-02 23:11 MP3_OK\Keyboard.h
文件 845 2006-03-02 23:11 MP3_OK\LCD.H
文件 2474 2005-06-17 19:07 MP3_OK\MASS_STORAGE.H
文件 119327 2006-03-02 23:08 MP3_OK\UNICODE.H
文件 6255 2005-06-17 19:06 MP3_OK\USB.H
文件 2619 2005-05-31 18:09 MP3_OK\MP3.Uv2
文件 161 2006-03-02 23:12 MP3_OK\MP3.plg
文件 115079 2006-03-02 23:11 MP3_OK\MP3.M51
文件 124125 2006-03-02 23:11 MP3_OK\MP3.hex
文件 7794 2006-03-02 23:11 MP3_OK\main.LST
文件 23821 2006-03-02 23:11 MP3_OK\main.OBJ
文件 21704 2006-03-02 23:11 MP3_OK\IDE.LST
文件 33689 2006-03-02 23:11 MP3_OK\IDE.OBJ
文件 25563 2006-03-02 23:11 MP3_OK\file_system.LST
文件 48589 2006-03-02 23:11 MP3_OK\file_system.OBJ
............此处省略17个文件信息
- 上一篇:ns2 ad hoc 网络模拟tcl脚本
- 下一篇:语义分析程序的设计与实现
评论
共有 条评论