前 言
这是本人在大学期间的《单片机控制技术》课程中,所作的结课作业项目,而我也正想要一个电子音乐播放器,而且这样设计的音乐播放器可以发出宜人的音乐旋律,能给生活增加不少的乐趣,本次作业项目也就让我用51系列单片机设计这个电子音乐播放器。
这方面不仅仅是需要掌握单片机的基本知识、也是需要掌握一定的单片机程序设计的知识,也包括硬件方面的选型、电路设计、各元器件的作用等。
目 录
1、基本概论
2、使用说明
2.1 按键部分
2.2 接口部分
3、电路设计
3.1 原硬件设计方案
3.2 重新选型
3.3 新型设计方案
4、程序设计
4.1 定时器初始化设置
4.2 中断程序
4.3 蜂鸣器头文件程序
4.4 音乐节奏头文件程序
5、总结收获
==================================================
1、基本概论:
音乐盒可以发出宜人的音乐旋律,能给生活增加不少的乐趣,本次作业项目也让我想到了用51系列单片机设计一个电子音乐播放器。
这方面不仅仅是需要掌握单片机的基本知识、也是需要掌握一定的单片机程序设计的知识,也包括硬件方面的选型、电路设计、各元器件的作用等。
经过思考与验证,决定基本功能如下:
- 基本功能实现:
利用I/0口产生一定频率的方波,驱动蜂鸣器,发出不同的音调,从而演奏乐曲;
- 按键功能实现:
可通过功能键选择乐曲,暂停,播放;
- USB供电功能:
可以通过USB接口进行电源输入,系统得电运行;
- 整机小型化:
通过选型和优化整体设计,才用9CM*7CM的板子为基底设计电路。
2、使用说明
2.1 按键部分:
电路硬件设计上有四处按键,而上部分的TS6643ZJ轻触开关是原先设计的方案遗留,实则没有作用。
侧边三个按键分别是:
红色按键为播放键,红色为中心,两边按键分别为“上一首”和“下一首”的切换键。
2.2 接口部分:
电路硬件设计上有两处接口,分别为USB接口和4PIN接口。
USB接口可以直接接入DC 5V电源的USB接口,以此得电,让播放器工作;
4PIN接口可以通过USB转TTL接口连接电脑,编译程序和供电调试工作。
3、电路设计
最初的电路设计当中,我采用的是STC89C51单片机,经过Proteus 8.11仿真软件设计和实际电路焊接后,调试发现效果不佳,询问专业的同学和查阅资料所知,若要实现更好的功能应当采用更好的单片机系统,在后期就换选了STC15F2K60S2单片机,而这种单片机与之前的STC89C51单片机有以下区别(通过芯片说明手册对比):
- 两者都是直流供电电压单片机,STC89C51电压为4.5V-5.5V,而STC15F2K60S2为3.8V-5.5V,而且其Flash程序存储器是60K;
- STC15F2K60S2不需要外部晶振和外部复位的单片机;大容量2K字节SRAM;双串口;高速10位8通道A/D转换器T0-T2 三个定时器:EEPROM;CCP/PCA/PWM;SPI功能;
- STC15F2K60S2有先进的指令集结构,也可以兼容原先的普通8051指令集,也有硬件乘法/除法指令。
总体而言,可以理解成STC15F2K60S2芯片就是增强版的STC89C51芯片。文章来源:https://www.toymoban.com/news/detail-462659.html
3.1 原硬件设计方案:
在硬件设计工具的选用上,开始还是Proteus 8.11仿真工具,后来随着需求增加,进而增用了立创EDA工具,该软件也同时支持STC15F2K60S2芯片的设计,BOM表的制作与对比。
起初用Proteus 8.11对STC89C51单片机设计的最基本的音乐播放器电路设计方案设计如下:
时钟电路:左上处以晶振为主的电路为时钟电路,本音乐播放器配备的单片机系统是一个复杂的同步时序电路,为了保证该系统的同步工作的实现,加入这种唯一时钟信号控制下进行有序工作。
复位电路:左中处以一个复位按键为主的电路为复位电路,该系统刚开始接上电源时,还是断电或者发生故障后都要复位。而这样的设计就是使 CPU和系统中的其他功能部件都恢复到一个确定的初始状态,并从这个状态开始工作。
发光电路:右上处以两个二极管(不同色)所组装的电路为播放器的发光二极管示意,一边绿色与一边红色所示意两种音乐的播放。
发声电路:右下处以蜂鸣器为主的电路为发声电路,通过9012三极管配置产生向系统外发声信号,而蜂鸣器发声原理则是电流通过内部的电磁线圈,使电磁线圈产生磁场来驱动振动膜发声的,因此需要一定的电流才能驱动发声。
电路焊接设计后如下:
3.2 重新选型:
该电路设计完之后,在实际硬件设计下设计出现了一些问题,首先蜂鸣器的选型存在问题,再者最为主要的是芯片选型上档次较低,后来选用STC15F2K60S2芯片。
STC15F2K60S2系列单片机中包含中央处理器(CPU)、程序存储器(Flash)、数据存储器(SRAM)、定时器、I/0口、高速A/D转换、看门狗、UART超高速异步串行通信口1/串行通信口2,CCP/PWM/PCA,1组高速同步电行端口SPI,片内高精度R/C时钟及高可靠复位等模块。STC15F2K60S2系列单片机几乎包含了数据采集和控制中所需的所有单元模块,可称得上是一个片上系统。
重新选型后的硬件系统就要换上其他关键元器件,以下表格则为更换的关键元器件以及使用原因:
元件名称 |
型号 |
数量 |
使用原因 |
无源电磁蜂鸣器 |
SEA-12095-16 |
1 |
发声部分 |
稳压二极管 |
1N4148W |
1 |
续流作用 |
4PIN排针 |
X6511WV-04H-C30D60 |
1 |
方便USB转TTL |
发光二极管 |
204-10SURT/S530-A3 |
2 |
方便观察电路状态 |
三极管 |
MPS8550-D-AT/PC |
1 |
放大作用 |
芯片 |
STC15F2K60S2-28I-PDIP40 |
1 |
相较于STC89C51芯片有更佳的性能 |
USB接口 |
USB-05 |
1 |
USB供电方式 |
3.3 新型设计方案:
通过使用立创EDA软件设计了个STC15F2K60S2芯片为主的音乐播放器电路:
因为起初还想着用STC89C51芯片继续原方案设计,仅是改动部分电路和程序,所以在实际硬件电路中还留着晶振时钟电路。
实际焊接后电路如下:
红圈为复位电路:以一个复位按键为主的电路为复位电路,该系统刚开始接上电源时,还是断电或者发生故障后都要复位。而这样的设计就是使 CPU和系统中的其他功能部件都恢复到一个确定的初始状态,并从这个状态开始工作,但其实更换了STC15F2K60S2芯片后,这个功能没有什么用了。
黄圈为时钟电路:本音乐播放器原方案的STC89C51单片机系统是一个复杂的同步时序电路,为了保证该系统的同步工作的实现,加入这种唯一时钟信号控制下进行有序工作,但是后来STC15F2K60S2则不需要外部晶振,所以故此设计是原方案遗留,实际电路工作没有作用。
蓝圈为发声电路:以蜂鸣器为主的电路为发声电路,通过1N4148W稳压二极管和MPS8550三极管配置产生向系统外发声信号,而因为蜂鸣器在电气属性上是属于电感类元件,会自感产生电动势,所以需要有个稳压二极管来放电,无源电磁蜂鸣器发声原理则是利用电磁感应现象,为音圈接入电流后形成的电磁铁与永磁铁相吸或相斥而推动振膜发声。
白圈为USB接口电路:本音乐播放器可以通过USB接口供电工作,一边直接介入5V电路,一遍直接接地,其中通过电解电容过滤低频杂波,USB的两端EH端直接短接一起并接地。
绿圈为发光电路:以两个二极管(不同色)所组装的电路为播放器的发光二极管示意,一边绿色与一边红色所示意两种音乐的播放。
灰圈为4PIN电路:通过4PIN排针可以接入USB转TTL电平转换板。
4、程序设计
基本的程序部分参考了许多资料,尤其是音乐演奏程序部分,这方面是进制转换与音乐节奏相关专业的交叉学科内容,所以参考了CSDN论坛的资料,集合了各种方式来调试,调用部分的.h头文件。
4.1 定时器初始化设置:
定时器,简单来说可以比喻为一个闹钟,当你把他打开以后,他就会每秒动一下,+1,+1,+1,+1,如果你设置了某一个时间点闹钟会向以后,那么当闹钟的时间点+1,+1,+1,+到了你设置的时间的就会进入中断,也就是闹钟响了。
程序及其注释:
void Timer0Init(void) //1毫秒@24.000MHz
{
AUXR |= 0x80; //定时器时钟1T模式
TMOD &= 0xF0; //设置定时器模式
TL0 = 0x40; //设置定时初始值
TH0 = 0xA2; //设置定时初始值
TF0 = 0; //清除TF0标志
ET0=1;
TR0 = 1; //定时器0开始计时
}
配置好定时器,并且设置了定时器要做什么事,接下把他放进main函数里面:
void main()
{
Timer2Init();
Timer0Init();
EA=1;
4.2 中断程序:
其作用是中断此线程(此线程不一定是当前线程),但实际上只是给线程设置一个中断标志,线程仍会继续运行。
程序示例:
void Timer0 ()interrupt 1
{
Keyboard_out();
Buzzer_out();
LED_flash();
}
4.3 蜂鸣器头文件程序:
蜂鸣器程序的无符号数据类型有做每分钟的节拍数节拍延时计数、音乐计数等;变量时会发生字节截断的整型数据有单个节拍的时间、音高序号、音乐开始标志位等。
程序示例:
typedef struct
{
unsigned char flag;
unsigned char divisions;//divisions值暂且不明
unsigned int BeatNumber;//每分钟的节拍数
unsigned char BeatTime;//单个节拍的时间
unsigned char PitchNumber;//音高序号
unsigned char Start_flag; //音乐开始标志位
unsigned int BeatCount;//节拍延时计数
unsigned int MusicCount;// 音乐计数
unsigned char *Music;
unsigned char Music_num; //乐曲序号
}BuzzerTypedef;
extern BuzzerTypedef Buzzer;
void Buzzer_out();
void Buzzer_start(unsigned char Music[]);
void Buzzer_stop();
void Timer2Init(void); //毫秒@24.000MHz
void Switch_music(unsigned Music_num);
void Switch_music_Init();
#endif
关于divisions值这个代表一个基本节拍时间,也就是10ms。拿生成的节拍数/基本节拍时间,就可以知道这个音符需要保持的时长。
4.4 音乐节奏头文件程序:
添加音乐对应的单片机代码,程序里边的数字为每分钟节拍数、数组结尾放入0表示结束。中间的值按顺序每两个表示一个音高和维持的时间(需要通过换算求出实际时间)。
程序示例(生日快乐歌):
code unsigned char happy_birthday_to_you[]={
2,96,
8,6,2,8,6,2,5,4,2,
5,4,1,6,4,2,5,4,2,
1,5,2,7,4,4,5,4,1,
5,4,1,6,4,2,5,4,2,
2,5,2,1,5,4,5,4,1,
5,4,1,5,5,2,3,5,2,
1,5,2,7,4,2,6,4,2,
4,5,1,4,5,1,3,5,2,
1,5,2,2,5,2,1,5,6,
0
};
5、总结收获
经过对这一段时间对单片机控制技术作业项目的研究与制作,我不仅收获到了STC89C51系列单片机的一些基础知识,以及它的控制原理,在这次作业当中,经过不断的调试之后,我决定选用其他的 芯片,也就换成了STC15F2K60S2芯片,而在这个过程当中,也懂得了新芯片的连接方式,以及包括USB的基本连接和知识。
硬件方面采用的是STC89C51单片机,经过Proteus 8.11仿真软件设计和实际电路焊接后,调试发现效果不佳,询问专业的同学和查阅资料所知,若要实现更好的功能应当采用更好的单片机系统,在后期就换选了STC15F2K60S2单片机,而这种单片机与之前的STC89C51单片机有以下区别(通过芯片说明手册对比):
a) 两者都是直流供电电压单片机,STC89C51电压为4.5V-5.5V,而STC15F2K60S2为3.8V-5.5V,而且其Flash程序存储器是60K;
b) STC15F2K60S2不需要外部晶振和外部复位的单片机;大容量2K字节SRAM;双串口;高速10位8通道A/D转换器T0-T2 三个定时器:EEPROM;CCP/PCA/PWM;SPI功能;
c) STC15F2K60S2有先进的指令集结构,也可以兼容原先的普通8051指令集,也有硬件乘法/除法指令。
总体而言,可以理解成STC15F2K60S2芯片就是增强版的STC89C51芯片。
而程序方面其实是参考了相对多的资料,在整个过程中是比较煎熬的,因为换过很多程序,也出过很多BUG,搬运过不少资料,也借鉴了很多CSDN上面的资料,也翻阅了很多芯片的说明书,在硬件选型上面也是换过几个题材,最开始的是有流水灯,然后简易音乐盒到现在的小型USB接口的音乐盒。文章来源地址https://www.toymoban.com/news/detail-462659.html
到了这里,关于【单片机】电子音乐播放器的设计与制作(说明书)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!