设计与开发

mp3单片机 DIY大神 自己制作单片机MP3(附电路图)

小编 2024-11-24 设计与开发 23 0

DIY大神 自己制作单片机MP3(附电路图)

最开心事的事没过于每个小小的梦想通过自己的努力都能慢慢实现……

用STC12LE5A60S2单片机驱动,DS1302时钟芯片,DS18B20温度传感器,VS1003音频解码芯片在5110显示屏上显示时间温度,闹钟,播放SD卡中MP3文件等功能。

做了4年的MP3维修一直想设计个属于自己的MP3播放器,但苦于自己所学的知识有限。一直只能把它放在心里,直到2年前一个偶然的机会接触到了单片机,一开始像所有的单片机初学者一样热情很高。买块51开发板对着网上的教程慢慢的一边学习C语言,一边学习硬件设计,就这样半来年过去了,对单片机也只是有个初步的了解。除了点流水灯别的啥都不会,网上资料很多,但大多数都是些点流水灯,驱动蜂鸣器,继电器等一些基础到不能再基础的例子,想做个大点的程序,网上的资料少的可怜,于是像大多人一样开始放弃单片机,选择了学习VB,C#等编程语言。但结果都不太理想,学了点基础知识,感觉都比想向中的难学。开始自我反思,我是个搞硬件维修的,我在纯软件编程上没有一点优势,想以后在IT行业混口饭吃必需的将以前学习的硬件知识用到软件上,于是又再次选择了单片机这条路上摸所。

在实际制中感慨挺深的,所遇到的困难也远比想像的多,在做这之前呢对这个了解并不多,根本就没去想过这东西能做好吗,能实现些什么功能之类的问题。只是想用这次制作来打发时间,就这么开始了,在网上找资料,这里抄上一点那里改一下电路 原理图完成了,打算先试着做3台很快在淘宝网上买了3套所需的电子元件,通过20多个小时PCB板画好了,在网上找了家板厂做了10块PCB板 ,板跟电子元件共用了160多块钱吧,大概4天左右PCB板做好了,开始焊接PCB板发现功放IC的元件封装跟PCB对不上只好飞线连上整个硬件到此基本上完成了。

开始写软件程序,在网上找了很多相关资料但呢都不怎么全,没办法自己对着芯片手册按照时序图对寄存器一个一个的设置,时钟芯片ds1302跟温度传感器18B20的驱动程序我之前写好的可以直接使用,音频解码vs1003在买芯片时有送参考例程稍微修改下便能听到测试音,SD卡驱动没现成的代码只好对着SD卡通讯协议一遍一遍的看,程序边写边调,在串口调试助手下察看读的内容大概3天左右SD卡驱动编写完成。到此就只差fat32文件系统没搞好了,一开始呢我是想移值FAT.FS这个现成的文件系统,在网上找了好多关与它移值的方法不知是我理解能力太差还是他们进的不够细反正就是不知道怎么移值,没办法只有自己写文件系统驱动了,找了份fat32系统详解,跟fat32文件系统原理看了好几遍 对文件系统有了个初步的了解开始在电脑上用winhex软件查看sd卡中存的数据,下步就是用C语言去实现把SD卡的数据读到单片机中,这是整个制作中最难实现的部分,写了好长一段时间但呢一点思路都没有。心烦了 工作也忙了这个制作也就把它放一边了, 刚开始呢工作不怎么忙时还调试下程序,后来干脆就把它忘了,想用单片机在fat32文件系统中找出MP3文件还真不是一般的难,不知道过了多久换了份新的工作环境,新的工作量并不是很大就是无聊的很,像关在笼子样,无聊时开始我的文件系统学习,就这样时间一天天的过去了,大约4个来月后吧,我终于能将SD卡中的根目录的指定文件名的MP3文件数据给送到VS1003解码芯片中,在这fat32数据上的读取中,我深深的体会到了指针,结构体,数组等在C语言中的重要性,听到音乐的那一刻真的好辛酸 ,不容易呀。第一步到此完成了,接着我又花了几个月的业余时间给它实现了SD卡中根目录和一层子目录音乐文件读出,长文件名实现,自动播放下一曲 ,音量加减,音调调节 ,暂停,播放,下一曲,上一曲 到此完成了音乐播放的基本功能,用了段时间后发现还有许多功能要实现的 ,后又用单片机内带的eeprom实现开机后继续上次播放的歌曲和音量大小, 用单片机内带的AD模块实现电池电量的测量,用5110做了个简单的显示屏,主要显示时间,播放到第几首歌曲 音量大小,和电池电量显示,以及 闹钟功能的实现,在设计硬件时没考虑到闹钟功能的实现,现在虽然能实现闹钟功能但功耗特别大一块2000毫安的电池基本不怎么用每天就用它做闹钟 放几分钟音乐不到半个月就要充次电,本想还给它加个字库IC和TFT彩屏再移值点简单的GUI实现图片跟TXT文档的打开功能,但51单片机的硬件资源明显不够用,要想完成普通MP3的全部功能只能在我以后学习的stm32中完成,在这漫天飘雪的莫斯科只有你是我唯一打发无聊时间的朋友……

下篇基于STM32单片机彩屏MP3正在制作中主要完成在彩屏上移植UCGUI界面,显示歌曲名,歌词,显示内存卡中图片,闹钟,TXT文件打开等功能。

单片机学习之十几行代码完成MP3播放器DIY

我不怕自己努力了不成功,我只怕比我成功的人,比我更努力。

今天开始给大家分享干货啦!!

MP3播放器,很多年以前可是很流行的,而且价格不菲,现在一个智能手机不近打败了MP3,连数码相机,单反相机也几乎全部干掉了,这就是趋势,跟不上趋势终将被淘汰。

我们这里演示MP3主要是前面项目里面正好用到了这个模块,而且对于新手来也容易上手,学习这个例子呢,其实你可能会感叹,产品开发原来也不难嘛!!事实也确实如此,开发产品其实就是把现有的技术拿来组装,要不怎么说工程师呢,其实就是干货的,农民工差不多,都是搬砖的,呵呵,扯远了。但是要真正开发出一款好产品,不仅仅是简单组合,而是要组合的恰到好处,即好看,又可靠,这才是合格产品设计师,往大了说才是合格的架构师。

言归正传,我们今天的例子是基于ARM的,说到ARM可能大家首先想到的是ST公司的STM32系列,确实现在单片机领域STM32占领了32位单片机领域的大半边天,但是TM32太贵了,这里给大家推荐一个兆易创新的GD32F130,国产的芯片性价比更高,稳定性也不错。这次MP3播放器也是给予这个芯片演示的。

MP3播放器的功能比较简单,就是在主循环里面,循环播放SD卡里面预存的8个MP3歌曲,所以流程图太简单,就不上了,直接上代码了,总共十几行代码。

int main(void)

{

int song=0;//定义当前播放的歌曲

rcu_config();//配置模块时钟

gpio_config();//GPIO初始化

gd_eval_ledinit(LED1);//LED指示灯初始化

systick_config();//系统时钟初始化

uartInit();//串口初始化,通过串口给MP3模块发指令

delay_1ms(1000); //延时1000ms,主要是等待MP3模块上电初始化完成,否则的话发指令会不响应

SendDataN((uint8_t *)(Command1[0]),6);//设置音量大小

delay_1ms(100); //延时100毫秒

SendDataN((uint8_t *)(songs[song++]),7); //播放第一首歌曲,同时song指向下一首要播放的歌曲

while (1)//主循环

{

delay_1ms(1000*60); //延时1分钟,一首歌曲播放一分钟后切换到下一首

SendDataN((uint8_t *)(songs[song++]),7); //发送播放歌曲指令,同时song指向下一首要播放的歌曲

if(song>7)song=0;//歌曲总共有8首,播放到最后一首后,回到第一首循环播放

}

}

最后上效果视频:

视频加载中...

相关问答

单片机 speaker怎么添加自主音频?

要在单片机上添加自主音频,您需要完成以下步骤:1.生成音频数据:您需要创建或生成您想要播放的音频数据。这可以是以特定格式存储的音频文件,例如WAV或MP3文...

单片机 控制扬声器演奏音阶的原理是什么?

正好今天给在微头条里的朋友们分享了一个用单片机实现模拟电子琴的小制作,在这个小制作里除了给大家介绍了“mini”模拟电子琴所需的硬件外,还主要介绍了用单片...

请问 mp3 显示磁盘错误在手机上怎么解决? - Uo6v6moH8ZV 的回...

磁盘错误”这样的问题一般是因为你在电脑上把MP3格式化过了,因为现在的MP3一般都是依靠单片机为核心的技术来实现flash存储芯片的读写,所以要求必须...

x5效果器能不能插u盘?

不可以,只能导入音乐。只有选装了音乐接口才可以没办法,建议你用1G的优盘。用在车载mp3上的单片机一般是89c52/89c51,AVR的好一些。不可以,只能导入音乐。...

单片机 中的内存EEPROM和RAM以及flash的功能有何区别?

关系为:它们都是单片机系统的存储器区别主要是他们的用途不同:现在的单片机,RAM主要是做运行时数据存储器,FLASH主要是程序存储器,EEPROM主要是用以在...关...

我是大一学生(开学大二),学习 单片机 之前应该先学会什么,具备什么能力,还有开发 单片机 软件用什么?

懂得基本的元器件作用就差不多可以学了。或者学单片机的时候反过来查相关书籍也可以3)推荐学习stm32f10x系列单片机(不一定要从51系列学起)对应的开发软件为...

自己怎么制作蜂鸣器?

如果声音质量要求不高,比如市面上那种生日贺卡发出的蜂鸣声,只有音高变化即可的话,用单片机就行了,把乐谱写成数组,写程序按照乐谱输出对应音高频率的方波给...

什么是嵌入式系统?

单片机可以说是所有方向的基础,如果你单片机开发能力很强,那么ARM+Linux,又或者是FPGA/DSP对你来说都很容易上手。单片机开发也是嵌入式门槛最低的一个方向...

我用STC12C5系列 单片机 ,在串口级联了8片CD4094(8位串入并出)...

当然可以,首先CD4094是COMS工艺制造,那么它的输入阻抗还是比较高的,你CLK的上拉电阻小一点或是把单片机端口模式直接设置成推挽输出(不接上下拉电阻)就可以了。...

猜你喜欢