做这个mp3前后有很长时间了,总体感觉不是很难,当然收获也是不小的,对51单片机有了更深入的了解,在这个学习的过程中碰到了很到的问题,譬如单片机的内存,单片机的通信速度以及程序的优化等。刚开始做这个项目的时候发现RAM总是不够用,以至于每次写程序都得小心翼翼,最后通过学习对程序经行的大量优化,使得RAM不再捉襟见肘,对程序的效率以及内存的分配和速度有了深刻的认识。这个mp3项目最重要的一点是单片机与VS1003的通信速度,如果你对单片机不熟悉的话,最后可能你会发现播放的歌曲根本就无法播放 ,听到的歌曲一点都不流畅,由于51单片机没有硬件spi,需要单片机模拟spi总线,这就需要模拟的spi总线是否高效,在这个项目中采用了汇编来模拟spi,通过混编的方式来组织程序。现在对于320kps的mp3歌曲都能流畅的播放。U盘的是通过ch375来实现与单片机的通信的,vs1003和ch375的驱动程序是自己对着数据手册的时序图一点一点写出来的,感觉这样才来的实在,打好基本功是关键。最后花了半个星期才搞定。碰到的问题也很多。记忆最深刻的就是总线的问题,把位选信号CS和A0放在P2口的低两位,可能在平常不会出现错误,但是在ch375的驱动中外部数据储存器使用超过了512byte,那么就会对P2.0有影响。致使时序错误,最后花了很大的力气才解决。感受颇深啊!总线是51单片机的精华,只有理解了单片机总线才能算的上熟悉51单片机。记得上次到东莞找工作,应聘了一个测试工程师的职位,笔试考的单片机的知识很基础,譬如对单片机引脚ALE,PSEN,EA的理解和应用。但是我相信对于看了这篇文字的人不看书不一定都能答得出来,这就是考基本功,如果你没有理解熟悉总线的时序,不熟悉单片机的储存器,是答不出来的。
完成了VS1003和ch375的驱动,配合winhex软件找到音频文件的起始扇区就能够播放歌曲,STC单片机有倍速的功能,可以提高单片机一倍的速度,这个功能不知道大家知道波!在STC-ISP烧录软件中可以配置。记得由“12/单倍速”到“6T/双倍速”转换的时候需要下载两次。下载一次是不会改变的。
听到歌曲了就要开始搞文件系统了,在mp3项目中其实最难得是文件系统以及液晶显示部分,这个DIYMP3完全支持长文件名,在液晶屏lcd12864上显示最多39字符的文件名。学习文件系统最好的资料我觉得是《fat文件系统原理》这个资料了!!论坛里可以下载。我花了一天的时间通过这份资料用winhex看U盘里的重要数据,基本上了解了文件系统的结构和存储方式。最后通过串口调试助手写程序读取文件的一些重要数据,以及和胡水涛的交流,很快的理解了文件系统。如果有人需要学习文件系统我觉得可以借鉴这个方法,完成了文件的初始化后,就可以读取音频文件,通过液晶显示短文件名了。短文件名采用的是“8+3”的形式存储的。文件名超过8byte就会截断,看起来很不爽,所以搞定长文件名很有必要。
这个就涉及到文件名的存储形式和gbk码与unicode的转换。我总共花了2天时间解决,当然串口调试时必不可少的工具。需要通过观察从U盘文件读取的数据发现和纠正程序的错误。充分利用好串口调试工具是解决问题的关键。
完成文件了系统相当于成功的一大半。接下来就只需要完成菜单的编写了。我做的DIYMP3只写了一个菜单界面,没有目录显示及其他复杂功能。屏太小了不好搞,而且对菜单编程不是很熟悉。打算开学了买个彩屏回来搞一下,现在的功能是能够顺序播放,音量调节和上一曲.下一曲的切换.网上看到有人用stm32和彩屏做的毕业设计mp3很强悍,有点心动,也打算买个开发板学习哈!
用到的模块:STC89C58RD+(mini51),CH35模块,vs1003模块,LCD12864,按键。
系统占用的内存:Program Size: data=86.1 xdata=691 code=9899
流畅播放的码率:320kbps
ch375测试程序:
ch375.rar
(65.42 KB, 下载次数: 59)
|