产品概述

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

小编 2024-10-06 产品概述 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文件打开等功能。

一款开源的裸机开发架构操作系统抽象层-OSAL

OSAL(Operating System Abstraction Layer),即操作系统抽象层。OSAL最初的概念是由德州仪器TI在ZigBee的协议栈Z-Stack上开发的,是个类操作系统的开源系统架构,并不是正真的操作系统。但是对单片机裸机开发非常友好,是能显著提升编码水平的一套架构,它就是为了优雅而生。其API修改历史。

图一,API修订历史记录

事件event是这个框架的最小单位,多个事件组成一个任务task。

系统上电之后首先进行底层硬件和程序环境的初始化,然后对系统所有的任务进行注册等处理,然后启动 OSAL 操作系统进入任务轮询,不断查询每个任务是否有事件产生。如果有任务事件发生,则 执行相应的事件处理函数,如果没有,就查询下一个任务,如此往复。

OSAL架构主要涉到的源文件和头文件:

图二,架构涉及到的源码文件和接口文件

启动类操作系统

图三,类系统的启动

创建普通任务

图四,添加任务

创建定时任务

图五,添加定时任务

图六,任务初始化

一图学会如何使用该架构开发自己的裸机程序

图七,OSAL工作机制

其实在工作中,单片机裸机开发是非常多的,有了这么一款类操作系统之后,让逻辑开发更加高效且优雅,毕竟优雅永远不会过时的。学生党get到了精髓之后,走上工作岗位也能写出让职场老鸟都自觉惊艳的裸机代码,岂不快哉?

最后再增加一点彩蛋,以下是一些开源免费的架构以及库,感兴趣的不妨读读源码,对自己的能力水平补补钙,即使现在用不着,以后说不着就能用到,赶紧收藏起来吧。

MultiTimer :一个软件定时器扩展模块,可无限扩展你所需的定时器任务,取代传统的标志位判断方式, 更优雅更便捷地管理程序的时间触发时序。

MultiButton:一个小巧简单易用的事件驱动型按键驱动模块,可无限量扩展按键,按键事件的回调异步处理方式可以简化你的程序结构,去除冗余的按键处理硬编码,让你的按键业务逻辑更清晰。

lw_oopc:是了高先生及其MISOO团队创作的lw_oopc宏,一个轻量级的C语言面向对象编程框架。

eepromfs : 基于EEPROM的简易类文件的数据读写库,方便做动态功能增减时参数管理。增减参数块类似增减文件,不会对已有数据存储带来影响。

EFSM (event finite state machine,事件驱动型有限状态机) : 是一个基于事件驱动的有限状态机,主要应用于嵌入式设备的软件系统中,EFSM的设计原则是:简单!

OpenBLT:主要用作STM32引导加载程序。它可以与几乎任何微控制器一起工作,并使用几乎任何类型的通信接口来执行固件更新。

EasyLogger:是一款超轻量级(ROM<1.6K, RAM<0.3K)、高性能的 C/C++ 日志库,非常适合对资源敏感的软件项目,

EasyFlash:是一款开源的轻量级嵌入式Flash存储器库,方便开发者更加轻松的实现基于Flash存储器的常见应用开发。

SFUD:一款开源的串行 SPI Flash 通用驱动库。解决 Flash 的差异现状而设计,让我们的产品能够支持不同品牌及规格的 Flash,提高了涉及到 Flash 功能的软件的可重用性及可扩展性,同时也可以规避 Flash 缺货或停产给产品带来的风险。

znfat :振南的znFAT是一套高效、完备、精简且具有高可移植性的嵌入式FAT32文件系统。

它们均可以在github,gitee等开源平台搜索查找到。

相关问答

有没读SD卡的 单片机 完整设计,PCB,SCH,CODE

[回答]我有,完整的SD卡程序和FAT文件系统实现代码,还可以播放MP3为什么每天都有成百上千的人来索取下面的资料?完整的舞蹈机器人设计方案(95MB)完整的智能...

猜你喜欢