用Mega32+VS1003做的MP3(FAT32文件系统浏览)【恢复】
http://cache.amobbs.com/bbs_upload782111/files_11/ourdev_474738.jpg开机LOGO (原文件名:欢迎界面.jpg)
开学时做的一个MP3,用VS1003+Mega32+TEA5767等做的,程序参考了波仔等众多网友的代码,这里向各位表示感谢.同时也要感谢Chan HK 提供的VS1003芯片.整个制作过程总共花了大概两个月的时间,从7月份搞到九月12号基本完成(中间大概一个月时间在实习).最终实现了比较多的功能:该mp3可以支持wma/mp3/wav/midi格式的音乐播放,支持歌词显示,收音机功能,电子书功能,还特别加进了两个经典的游戏,俄罗斯方块和贪吃蛇游戏.
现在SD卡是用的我手机上的TF卡,对诸如金士顿的SD卡,识别不了,代码是参考别人的,不知道哪位有没有比较好的SD卡读写代码,能支持不同卡的,我这个只能支持Adapter的卡,很是郁闷.希望高人帮助下,不胜感激阿.
液晶用的是从淘宝上买来的,10块钱一块,原来看着便宜一次就买了十块,现在才用了一块.本来打算卖出去给师弟,可是好像大家都不需要,没办法,自己留着慢慢用,我把LCD当成数码管来用还不行吗?131*64的点阵大小,一般需求足够了,我想.
音效处理用的是CD3314的芯片,和3315差不多,只是多了几个声道输入(因为我要用两个音频输入,一个VS1003,一个TEA5767的),效果很好,加上这个音调处理芯片之后听起来是很不错的,尤其低音很好.和魅族的mp3都有的一拼.价格不高5块钱左右的样子.
mp3说明书ourdev_474698.pdf(文件大小:2.34M) (原文件名:说明书.pdf)
下面是一些照片(比较大,没办法实验室做的,只能这样了):
http://cache.amobbs.com/bbs_upload782111/files_11/ourdev_474718.jpg
拆开之后内部的结构 (原文件名:MP3拆开.jpg)
http://cache.amobbs.com/bbs_upload782111/files_11/ourdev_474719.jpg
和遥控器的合影 (原文件名:MP3合照1.jpg)
http://cache.amobbs.com/bbs_upload782111/files_11/ourdev_474720.jpg
正在播放音乐 (原文件名:MP3内部电路.jpg)
http://cache.amobbs.com/bbs_upload782111/files_11/ourdev_474721.jpg
内部控制板 (原文件名:MP3内部电路2.jpg)
http://cache.amobbs.com/bbs_upload782111/files_11/ourdev_474722.jpg
找到SD卡后的状态显示 (原文件名:拆开的MP3显示图.jpg)
http://cache.amobbs.com/bbs_upload782111/files_11/ourdev_474723.jpg
主界面视图 (原文件名:整体外形.jpg)
http://cache.amobbs.com/bbs_upload782111/files_11/ourdev_474724.jpg
正在播放带歌词显示的音乐 (原文件名:播放音乐(歌词显示).jpg)
http://cache.amobbs.com/bbs_upload782111/files_11/ourdev_474725.jpg
正在播放带歌词显示的音乐 (原文件名:播放音乐(歌词显示1).jpg)
http://cache.amobbs.com/bbs_upload782111/files_11/ourdev_474726.jpg
正在播放无歌词的音乐 (原文件名:播放音乐(标题).jpg)
http://cache.amobbs.com/bbs_upload782111/files_11/ourdev_474727.jpg
俄罗斯方块游戏中 (原文件名:俄罗斯方块游戏中.jpg)
http://cache.amobbs.com/bbs_upload782111/files_11/ourdev_474728.jpg
贪吃蛇游戏 (原文件名:贪吃蛇(游戏暂停).jpg)
http://cache.amobbs.com/bbs_upload782111/files_11/ourdev_474729.jpg
电子书阅读中 (原文件名:TXT内容.jpg)
http://cache.amobbs.com/bbs_upload782111/files_11/ourdev_474739.jpg
开机中... (原文件名:开机.jpg)
http://cache.amobbs.com/bbs_upload782111/files_11/ourdev_474740.JPG
系统的控制器,红外遥控器 (原文件名:遥控器.JPG)
http://cache.amobbs.com/bbs_upload782111/files_11/ourdev_474741.jpg
功能选择 (原文件名:maintxt.jpg)
http://cache.amobbs.com/bbs_upload782111/files_11/ourdev_474742.jpg
目录浏览 (原文件名:txt进入.jpg)
http://cache.amobbs.com/bbs_upload782111/files_11/ourdev_474743.jpg
目标目录下文件浏览(电子书) (原文件名:txt界面.jpg)
http://cache.amobbs.com/bbs_upload782111/files_11/ourdev_474744.jpg
目标目录下文件浏览(音乐) (原文件名:播放音乐(浏览文件).jpg)
http://cache.amobbs.com/bbs_upload782111/files_11/ourdev_474745.jpg
收音功能主界面 (原文件名:收音机界面.jpg)
下面发上我的原理图和PCB:
原理图和PCBourdev_474758.rar(文件大小:82K) (原文件名:PCB&SCH.rar)
下面传上我的源代码:
现在我在用的程序ourdev_474759.rar(文件大小:401K) (原文件名:最终版MP3程序3.rar)
调试的时候花了很多时间,主要是文件系统浏览的问题,由于刚开始接触这个东西,所以比较麻烦,啥都不懂,得一步步来.一直用串口调试,用的萧峰的调试助手,比较好用,就是不支持中文显示,很是郁闷,于是最近痛下苦心,自学BCB,写了个自己的串口调试助手,支持汉字显示了,^_^.已经发上来了,有兴趣的朋友可以去看看,有什么好建议不妨说出来. 代码是用CVAVR写的,一直觉得这个编译器很好用,不过奇怪好像比较少人用,不知何故阿! 如果有兴趣的朋友不妨一试,绝对不会让你失望的,呵呵... 好强
支持楼主 顶!
丁丁的那个串口助手可以支持中文的. 我想说三个字:牛X 不错 牛人!这款MP3好象是目前本坛里功能最多的。
PS:那个音效芯片是我们总公司的产品。 CD3314/3315是你们公司的产品来的?代理还是芯片厂商?
还不错哦,用过很多类似芯片,如TDA7315/3314/3315系列,还用过XR1071,各有特点,不过希望要是芯片体积再小点就妙了. 我说的是板子上那颗SC7314S, 我这里是下属子公司,专开发车载音响方案。
我也在做一个这样功能的MP3,只是进度慢得很。因为我用的是C8051F,坛子里大多都是玩AVR的,代码方面只能作下参考。反正自已玩的慢点快点都无所谓。
本贴被 hn_ny_dxs 编辑过,最后修改时间:2008-10-30,10:04:30. 好作品,顶一个~~~~~~ cool。楼主能展示下PCB另一面如何处理?
本贴被 logics 编辑过,最后修改时间:2008-10-30,10:09:41. hn_ny_dxs 夏风:SC7314和CD3314,TDA7314差不多的,代码都是通用的,可能你们的产品价格比较有优势,我在CVT实习的时候也看到你们的产品了.
至于你的进度就慢慢来吧,个人绝对最难搞的就是文件系统管理了,这个部分搞好了其他的就好说,我文件系统操作看了好久,2/3的时间花在这个上面,后面的就是把以前用过的东西加进去,比较容易搞.还记得开学从8月29号实习回来一直到9月12号,天天坐在电脑前编代码,课基本没去上.... 不错嘛 呵呵! FAT16/FAT32文件系统早就实现了,我的板子上有USB、SD、HDD,光把这三样硬件的底层驱动搞出来,并做好兼容性测试和改进,就花了很多时间。现在已能在这三种存储介质间进行动态切换播放,支持SD卡、U盘的热插拔,播放中拔出一种设备会自动转到另一设备播放,目前在搞文件系统浏览的架构,还没想好要怎样实现才方便以后的移值,就算是做一个简单的操作系统也说不定。 几天都没有“洗脸”的 PCB + 一流的功能 :-)
赞! 支持!!
请楼主用酒清把板子洗一下吧,还有,能不能用锉刀把你的屏开口修一下,用小刀弄成直线也行,美中不足啊!!!
还有,板子是热转印的吧?不错! hn_ny_dxs 夏风:你的SD卡可以支持各种卡嘛?有没有测试过?我的不行阿,如果测试过了,能发一份我参考下不?我的邮件地址:497610476@qq.com
fsclub 绿林好汉:我反正把它放到盒子里面装起来了,无所谓,板子上的线都是渡过焊锡的,所以不用考虑腐蚀的问题,应该能坚持很久.至于盒子的外观嘛,确实有点烂.那些孔都是在实验室用烙铁烙出来的,然后用小刀刮刮就算了,每有锉刀之类的工具.主要是这个液晶这里的孔开大了,当时没弄好. 你搜下我的帖子吧,早就发在坛子里了。
uint8 MMC_SD_init()
{
uint8 cnt;
uint8 retry;
uint8 r1=0;
uint8 type=0; // 卡类型返回值:0x10=SD, 0x20=MMC
SD_CS_En(); // 使能Card
SPI_speed=0x27; // 低速 SPI=300k Fsystem=24Mhz
retry = 0;
do
{
for(cnt=0;cnt<10;cnt++) SPI_SendByte(0xFF); //发送80个时钟,使卡同步
r1 = MMC_SD_SendCmd(0, 0); //发Cmd0(复位)命令
_nop_();_nop_();_nop_(); //适当延时
retry++;
if(retry == 50) return (type=0x01); //超时退出,个别卡需要更多次循环才有反应
} while(r1 !=0x01); // MMC、SD卡成功转到SPI模式
// cnt =0;
retry =0;
//****** SD卡在进入SPI模式后,激活命令和MMC卡一样为Cmd1,同时Cmd55+Cmd41 仍然有效******//
/* do
{
r1 = MMC_SD_SendCmd(1, 0); //发Cmd1(active激活)命令
retry++;
if(retry> 255) return 1; //超时退出
} while(r1);*/
do
{
r1 = MMC_SD_SendCmd(55, 0); // 先发送 Cmd55
if(r1 ==0x01) // 如果有反应
{
r1 = MMC_SD_SendCmd(41,0); // 再发送 Cmd41 进行激活
if(r1 ==0x00) type =0x10; // 激活成功就是SD卡
}
else { // 如果发送 Cmd55无反应,改发送 Cmd1
r1 = MMC_SD_SendCmd(1,0);
if(r1 ==0x00) type =0x20; // 激活成功就是MMC卡
}
_nop_();_nop_();_nop_(); //适当延时
cnt++;
if(cnt ==0xFF) retry++;
if(retry ==0xFF) return (type=0x01); // 超时退出, 个别卡需要更多次循环才有反应
} while(r1); // MMC、SD卡激活后的返回值均为0x00
r1 = MMC_SD_SendCmd(59, 0); //关CRC
r1 = MMC_SD_SendCmd(16, 512); //设置读取一次的字节数
SD_CS_Dis(); // 关闭Card
// SPI_speed=0x03;
return type; // 正常返回
} 好 armok来置个cool!! 太牛了! 不错.顶一下 不错,肯定花了不少时间吧 回复bozai 章其波: 差不多两个月把,参考了你很多程序来的,呵呵.FAT那部分基本参考你的.贪吃蛇本来也想用你的,不过你的有点问题,后来参考了另外一位网友的. 【23楼】 liujun6037 正点原子
呵呵,那个程序当时只是偶然想起来写的,写的简单后来也没有维护。 mark 顶!太强悍了!
楼主的原理图能发成99SE或PDF格式的就更好了!还有,你的收音IC是什么型号的呀? 好强啊,看来我得加紧学习了 不错,顶一下。 【24楼】 bozai 章其波:你的贪吃蛇有时候会脱节,那个算法有误.
【26楼】 henasuifeng :99SE基本没用过,发个pdf的上来把:
pcb和原理图的PDFourdev_476238.pdf(文件大小:2.39M) (原文件名:PCB&SCH.pdf)
至于那收音机的IC用的是模块来的TEA5767的模块,在淘宝上买的,8块钱一个,那老板加我一次把他的买完,总共三个,后来他给了四个算三个的钱,还是比较划算了.我去赛格问过tea5767这个芯片的价格,那人眼睛都不眨就说20快,靠!当我SB.二话没说就走了...
至于这个效果网上有很多介绍,我就不说了,昨天拆开我的昂达vx939里面居然也是用的TEA5767的模块.不过收音效果比我的好些,还是人家比较专业阿! to 楼主:
盒子的液晶窗口开毛毛躁躁可以用美工刀进行修改。
我最近做的一个盒子也是用美工刀修边的,发现很好用,修之前最好画条线,这样不至于修歪。
虽然窗口开的太大了,修的话可能会更大些,不过可以在边上加上装饰。做过装饰边。
注:美工刀太锋利了,注意安全! http://ouravr.com/bbs/bbs_upload/files_11/ourdev_476278.JPG
(原文件名:未命名.JPG) 高手!佩服! 这个一定要顶! 顶 to 【29楼】 liujun6037 正点原子
不知道你看的是哪一个版本的程序,那个帖子里有两个版本,第一个版本的的确会脱节,后来的版本没有了,我当时还做了很复杂的绕弯都没有发现问题。第二个版本的算法和第一个算法完全不一样。 【35楼】 bozai 章其波 :那我可能是用的第一个版本了.当时比较急,随便搜一个就改,呵呵... 学习了。 都是同一个学校的,我咋就这笨呢~ 顶哈 佩服佩服,不过那个外壳让我有点...... 学习了。楼主好厉害。 学习。 厉害 请问读取mp3文件名的时候怎么区分文件名中的全角汉字和半角英文字母的? 好! 吧电路图变成pdf格式的吧 【44楼】 FPGAer:英文字符的ASCII码<0X80(实际上不会超过127),而汉字的GB码每个字节都是>0X80的.这些基础知识多看看windows上的字符集就知道了. 想请教下那个电子书部分怎么实现的,能不能详细的介绍下,以便初学者学习。。 【48楼】 :很简单了.只要你能读FAT文件系统的文件了.txt文件是最简单的了,LRC的也差不多.只要你通过一些必要的措施把得到的数据在液晶上显示出来就变成文本浏览器了. 今天看了,楼主真强!最近刚在别人的帮助下能读FAT的图片了!楼主的代码应该能派上用场!谢谢! 无私的强人!我的MP3又多了个参考了!太谢谢了! mark! 真的很 强,支持了。 请问遥控器用的是什么编码IC? 【54楼】 lmwfq :买现成的.解码自己写的.用示波器看波形,然后解码. 开孔的话拿铁丝绑个刀片在烙铁上,切完了再用刀修修就可以了,就怕孔开得位置偏了,最后搞得巨丑。 做个标记 TO:liujun6037 正点原子
在网上搜到你的贴子(HI-Hi耳放)是用M8+Cd3315做的,是否可以提供程序参考下。最进想做台功放玩玩。谢 【58楼】 lmwfq :
是这个把:http://blog.ednchina.com/atom6037/113808/message.aspx
代码我回去后再发.我现在在外面.你去我EDN的博客下载就好了. 先谢谢了,期待你的代码 你EDN的博客好像没代码啊?另外:你的那个遥控器是什么型号?淘宝上有没得卖? 很漂亮 【61楼】 lmwfq :代码昨天忘传了,不好意思(^_^).今天晚上再传把.遥控器好像没有型号.小公司做的.淘宝上应该没有的买. 期待ing 【61楼】 lmwfq:代码已经上传。 顶,挺好的 挺好的,学习了 楼主,请问你用CVAVR是什么版本的?我打开你的代码编译失败哦 楼主,我把你的程序作了些调整,但又出现新的问题:
typedef struct
{
BYTE weCnt; //序号
#define WIN_LAST 0x40
#define WIN_CNT 0x3f
BYTE wePart1; //长文件名UNICODE码(第一部分)
BYTE weAttributes; //长文件名目录项标志
#define ATTR_WIN95 0x0f
BYTE weReserved1; //系统保留
BYTE weChksum; //校验值
BYTE wePart2; //长文件名UNICODE码(第二部分)
WORD weReserved2; //文件开始簇号
BYTE wePart3; //长文件名UNICODE码(第三部分)
}winentry;
结构类型里面有define定义可以的吗?我觉得是不可以的,在CVAVR里面编译出错的。 gshuang1 :我的CVAVR是1.25.8是可以支持在结构体里面define的 ,低版本不支持.我也遇到过这样的问题.你用这个新版本咯. 好的,我试试看,谢谢你的回复~~ 这壳子做的有点惨啊 好贴帮顶,支持DIY~~ 顶 不錯,記號 liujun6037 正点原子,你好我打开你的代码编译不能通过 估计是版本问题 你能抽点时间把你的CVAVR1.25.8版本发给我装下试试,我的邮箱lrt_2005@126.com 谢谢了 liujun6037 正点原子,你好!我采用了你的SD卡驱动,发现用它初始化我的金士顿MINI SD卡失败,连cmd0初始化都失败,你现在的程序能不能支持多种卡呢?有的话能发给我参考下吗?邮箱:s_gshuang1@stu.edu.cn,谢谢! 我的也只能读SanDisk的卡.兄台搞出来了给我参考参考看看. 经过仔细研究周立功的SD卡源代码,我把你的代码修改了一点,终于可以读我的金士顿了,以下是我修改过的代码:
//****************************************************************************
//Send a Command to MMC/SD-Card
//Return: the second byte of response register of MMC/SD-Card
//****************************************************************************
uchar SD_Write_Command(uchar cmd,unsigned long arg)
{
uchar tmp;
uchar retry=0;
SD_CS=0; //SD卡使能
Write_Byte_SPI((cmd & 0x3F) | 0x40); //送头命令
Write_Byte_SPI(arg>>24);
Write_Byte_SPI(arg>>16); //send 6 Byte Command to MMC/SD-Card
Write_Byte_SPI(arg>>8);
Write_Byte_SPI(arg&0xff);
Write_Byte_SPI(0x95); //仅仅对RESET有效的CRC效验码
//get 8 bit response
do //Read_Byte_MMC(); //read the first byte,ignore it.
{
tmp = Read_Byte_SPI(); //Only last 8 bit is used here.Read it out.
retry++;
}
while(((tmp&0x80)!=0)&&(retry<100)); //当没有收到有效的命令的时候
Read_Byte_SPI();
if(reading==0)SD_CS=1;//MMC_CS_PIN=1;
else SD_CS=0; //MMC_CS_PIN=0;
return(tmp);
}
//****************************************************************************
//SD卡初始化(SPI-MODE)
//****************************************************************************
uchar SD_Init(void)
{
uchar temp;
uint retry;
uchar i;
reading=0;
SD_CS=0; //SD卡使能
SD_SPIDelay(30);
SD_CS=1; /* 3. 置CS为高 dessert CS */
SD_SPIDelay(3);
retry=0;
do//Send Command CMD0 to MMC/SD Card
{
temp=SD_Write_Command(0,0);//retry 200 times to send CMD0 command
retry++;
if(retry==1000)
{
return 0xff;//CMD0 Error!
}
}
while(temp!=1);
retry=0;
do//Send Command CMD1 to MMC/SD-Card
{
temp=SD_Write_Command(1,0);//retry 100 times to send CMD1 command
retry++;
/* if(retry==1000)
{
PutStr(2,0," SD CMD1 INIT failed!");
dispint(3,4,temp);
return 0xfe;
}; */
// dispint(3,4,temp);
}while(temp!=0);
retry=0;
SD_Write_Command(16,512); //设置一次读写BLOCK的长度为512个字节
SD_CS=1; //MMC_CS_PIN=1; //set MMC_Chip_Select to high
// PutStr(0,0," SD INIT SUCCESSFUL~~");
return(0); //All commands have been taken.
} liujun6037:你好,我的线路板原理图里的VS1003和SD卡的接线和你的接法是一样的,而且也是用MEGA32L单片机。我现在在用你的源代码调试,SD卡已经可以读到文件名,不过只能读FAT32系统文件,当MP3文件是中文名时File_Search(CurDir,3)不通过。我在play()函数里面设置了一些标记来查看VS1003的数据接收情况,发现每次上电有时VS1003接收了几K字节就永远停止接收了,有时会不停得接收数据,音频输出只有轻轻的“沙沙”声,有时会发出重复性的杂音,如“哒哒”声。不知道问题出在哪里,好郁闷啊,你之前调试的时候有出现过这种问题吗?我对VS1003的工作原理不是很了解,无法确定问题出来哪,希望你能帮我下忙,我的QQ:514796458,谢谢~~~ 续上面的回复:前面的问题已经解决了,现在总算可以听到一点音乐了,不过只能听2~3秒钟,之后就声音就停在那了,VS1003也停止接收数据。好郁闷。 太强了 这个文件的key_process 函数在那里定义的? 怎么程序里没有C文件呢 全是头文件啊 哈哈,手工作品体现了DIY的精华,赞一个. mark mark 很好啊~~~~学习~~学习~~ 楼主用CD3314跟TDA7314应该是一样的,,TDA7314的供电范围为最小好像是6V,楼主有5V供电也能工作吗 【91楼】 bendyning :可以的。标称是6V ,5V 也跑的好好的。。。。。 本人刚入门,请教一下楼主,Mega32-16AC供电电压是4.5-5.5,你用3.3V供电能跑动吗?
哦,看你的照片上用的是Mega32L-8AI,看来是原理图小细节没改...不过原理图上Mega32的晶振12M,估计也是忘了改吧,呵呵 很好很强大 NB啊楼主辛苦啊!!
我也要做一个自己的MP3^ 哈哈哈哈 mark 想请问一下楼主,你的MP3能显示中文,你是不是做了字库到M32内呢?还是在SD卡中? 【97楼】 mj933 :MEGA32是存不下一个字库的
字库是在Sd卡里面 厉害 很不错呀!值得学习! 请问楼主,CD3314,用3.3V供电能工作吗?
页:
[1]
2