基于51单片机的彩灯音乐盒设计
工程名称:基于51单片机的彩灯数字音乐盒设计
前言
众所周知电子入门从点灯开始!
本案例将点灯与音乐盒相结合,能让你了解电路设计,PCB设计,单片机程序设计,3D建模的使用等多方面的知识,也能让你感受入门电子的乐趣所在。
工程描述
基于STC89C52设计的彩灯数字音乐盒,由8个彩色的LED灯组成不同的音符,当蜂鸣器发出音符时,对应的LED灯将会闪烁。同时设计有上一曲,下一曲,暂停按钮,通过数码管显示当前播放第几首歌。还预留了Type-C供电口和程序下载串口,可通过串口对程序进行更新(可以翻译自己喜欢的歌曲后更新程序下载,歌曲翻译方法见后文程序设计部分)。
图1a 成品展示图
图1 b 成品展示图
图1 c 成品展示图
电路及PCB设计
本项目的电路主要是以单片机为核心设计的一些外围电路,使用的嘉立创平台,PCB的设计也使用该平台。PCB的下单制作也使用的是嘉立创的每月两次的免费下单。(在这里推荐一下嘉立创平台,能进行电路设计,PCB设计,PCB下单制作对于想简单制作一些硬件小项目的新手十分友好)
图2 电路原理图
图3 PCB原理图
电路模块分析
- 主控电路
主控使用STC89C52RC直插封装的MUC作为彩灯音乐盒的主控电路。
在使用51单片机时需要在P0的IO口上接一个4.7k-10k左右的上拉电阻,因为P0口在单片机内部是不带上拉的电阻的。一般对于51单片机的P0口的上拉电阻会选择使用排阻,在本例程中也同样使用了10k的排阻。
图4 主控电路
- 晶振模块与复位模块
STC89C52RC是没有内部时钟的,因此必须在外部配置晶振电路才能使用,晶振就相当于单片机心脏,是单片机工作的必要条件。
通过查阅资料可以STC89C52RC可以支持0-80Mhz的晶振使用的,但一般实际项目中通常在使用51单片机时,我们一般只会选择11.0592MHz和12MHz这两种晶振。
对于这两种晶振的区别如下:
12MHz的晶振,一个及其机器周期刚好是1us,在进行时间计算时比较方便,只需要计算1us相对应的倍数即可。
11.0592MHz的晶振,再进行串口通信波特率的计算时比较方便,能得到一个整数。
对于本项目,由于需要计算每个音符的发音时长所以选择了12MHz的晶振。
51单片机有四种复位方式:外部RST引脚复位,软件复位,掉电复位上电复位和看门狗复位。
一般使用较多的是外部向RST引脚施加脉冲信号复位,其原理是:单片机上电后电容两边电压不能骤变,+5v经过电解电容给单片机复位引脚施加高电平5v,一起经过10kΩ电阻向电容充电,使复位脚电压下降,经过大于10ms后复位角变为0v,给该电路并联一个开关即可实现开关复位。
图5 晶振与复位电路
- 下载接口电路
下载电路使用一个4P2.54的排针作为程序的烧录接口,可以使用USB转TTL串口烧录器进行程序烧录。
图6 串口下载电路
- 电源供电与TYPE-C供电电路
STC89C52RC的输入电压为3-5v之间,因此可以使用Type-C线通电脑充电线直接进行供电(使用充电线供电时尽量选择不带快充的避免电流过大),此外还预留了接线柱可接3-5v的电池直接进行供电。在电路中还设计了一个电源总开关,用来控制电源是否接入。
图7 电源供电与TYPE-C供电电路
- 蜂鸣器电路
蜂鸣器电路采用三极管放大电路,直接使用单片机驱动蜂鸣器会因为电压不够导致蜂鸣器声音很小,设计三极放大电路增强驱动能力。蜂鸣器采用无源蜂鸣器,需要单片机提供方波信号进行驱动,三极管采用NPN型,高电平导通。
图8 蜂鸣器电路
- 数码管显示电路
数码管采用共阴极七段数码管,接到单片机的P0口
图9 数码管显示电路
- 发光二极管电路
发光二极管电路为了增强驱动能力采用了低电平点亮的方式,正极接上拉电阻。
图10 发光二极管电路
- 按键电路
按键电路设计有三个按键分别为上一曲,下一曲和暂停按键,对于这三个按键从设计思路上预计实现即按即停,即按即切换的效果,因此需要采取中断触发的方式。但对于51单片机外部中断引脚只有两个INT0和INT1显然不够用,对于此问题可以采用中断拓展的方式进行解决。本项目采取的中断拓展方式原理为:将三个按键接入在不同的引脚,再利用二极管单向导通的特性将三个按键都接入INT0,当三个按键有任意一个按下时即进入中断,然后在程序中判断是哪一个按键按下。这样即可实现三个按键都能进入中断且只需占用一个INT0。
图11 按键电路
程序设计
程序设计使用keil C51进行编程开发,程序的编写上主要是对于蜂鸣器与彩灯的控制。彩灯的控制相对简单,规定彩灯1-7分别对应七个音符只需在响应音符时点亮相应的彩灯即可。而蜂鸣器的控制就较为复杂了,首先需要确定不同音符的发声频率,以C调为例查到频率如下:
图12 C调音符与频率对照表
然后每个音符对应的频率存在一个数组里方便后期调用。对于发声频率的实现通过定时器对蜂鸣器IO口电平反转实现,给定时器不同的初值以实现不同频率的反转即实现对发出每个音符。对于发声时长则通过延时函数来实现。最后将音符发声时长亮灯的数据装在一个数组里,通过主函数进行调用即能实现歌曲的播放。
而这个数组就是对每一首歌曲翻译好的谱子。
歌曲的翻译方法如下:
以C调为例:
对于低音的1 1# 2 2# 3 4 4# 5 5# 6 6# 7分别记为
L1 L1_ L2 L2_ L3 L4 L4_ L5 L5_ L6 L6_ L7
同理对于中音表示为M1 M1_ …,高音表示为H1,H1_ …。
按照上述方式翻译歌曲如下:
图 13 简谱翻译展示图
外观设计
对于外观设计主要是根据PCB上所焊接的电子原件,设计相应的孔位将所需要的按键,灯光,接口等元件显露出来其余部件进行包裹。焊接好元件的实物图如下:
图14 焊接完成的PCB图
基于上图实物进行包装外壳的设计通过solidworks先进行草图的绘制将对于孔位画好后再进行凸台拉伸,构建实体。分别绘制正面和底板后期进行组合成音乐盒。其建模效果图如下:
图15 外壳3D建模效果图
模型设计完成后,用切片软件进行切片,通过3D打印将外壳制作出来,效果如下:
图16 3D打印外壳与焊接完成的PCB实物图
最终将PCB与打印好的外壳按照对应孔位安装后,即可得到实物,效果如下:
图17 最终效果图
项目总结
最后来总结一下本次项目,在本项目中需要用到的知识比较多,首先需要对基本电路有一些了解其中也有模电和数电部分知识;然后就是对单片机需要有了解,因为本项目主要是基于单片机开展,因此必须要掌握单片机的基本操作;接下来就是需要了解电路板的设计,和一些常见的电路板设计软件的使用;最后还需掌握一些3D建模软件的使用如solidworks等。掌握以上技能就能很容易的实现本项目,以本项目为基础相信聪明的读者们能做出比本项目更好的制作。
相关资料:
链接:https://pan.baidu.com/s/163jdN_OpRK-hBkiq-cdK-A
提取码:2023