物理与电气工程学院课程设计报告
设计名称:基于单片机控制的音乐播放器
院
部:物理与电气工程学院
专业班级:10 级 电信(4)班
学生姓名:丁林 080210196 余克伟 080210217
孟献强 080210238 郁林 080210239
指导老师:张朝龙
完成时间:2012 年 6 月 6 号
评阅意见:
丁林
080210196
余克伟 080210217
孟献强 080210238
郁林
080210239
评阅教师
日期
目录
1 引言……………………………………………………………………3
2 任务设计……………………………………………………………3
2.1 设计任务…………………………………………………………3
2.2 设计要求……………………………………………………3
2.3 发挥部分…………………………………………………………3
3 方案论证………………………………………………………………4
3.1 显示部分…………………………………………………………4
3.2 按键部分……………………………………………………4
4 总体方案…………………………………………………………………4
4.1 总体方案介绍…………………………………………………4
4.2 工作原理……………………………………………………5
5 硬件设计………………………………………………………7
5.1STC89C52RC 单片机最小系统………………………………7
5.2 蜂鸣器模块……………………………………………7
5.3LED 模块…………………………………………………7
5.4 显示模块……………………………………………8
5.5 按键模块…………………………………………………8
5.6 整体电路………………………………………………8
6 功能使用说明………………………………………………9
7 软件设计……………………………………………………9
7.1 使用单片机资源情况………………………………………9
7.2 程序框图……………………………………………………10
7.3 程序……………………………………………………11
8 误差分析………………………………………………………16
9 心得与体会……………………………………………………16
- 2 -
摘要
本设计是一个基于 STC89C52RC 系列单片机的音乐盒,依据单片机技术原理,通过
硬件电路制作以及软件编译,设计一个多功能音乐盒。该音乐盒主要由按键电路,发光
二极管电路,数码管显示电路以及蜂鸣器组成。本设计利用KEIL编程软件进行编程
并调试,配合 PROTEUS 仿真软件对硬件进行仿真调节,节约了设计时间。
关键字:音乐盒;STC89C52RC;KEIL;PROTEUS;
1 引言
利用单片机演奏音乐大概是单片机爱好者感兴趣的问题之一。利用单片机控制音乐播放
也多不胜举.音乐芯片也相当之多,而利用单片机存储音乐,控制播放最为广泛。它有功能
多﹑价格优﹑外围电路简单的特点,备受音乐爱好者及音乐芯片制造商的青昧。用
AT89S51 单电机及少数外围电路控制音乐播放,产生几首不同的歌曲。
对于单片机产生音乐,关键是控制频率的输出。我们知道,不同的声音对应不同的频率,
产生有规律的频率输出就可以得到相应规律的声音。采用了 T0 中断的方法产生不同频
率,采用 THO 产生中断进行歌曲选播,复位键进行重新开始,也可以通过选择键来选
择。
本文应用单片机和音乐发声的相关知识设计了一个简单的音乐播放器。所谓音乐播放
器,由单片机进行信息处理,再经过信号放大,由耳机或扬声器(喇叭)放出乐曲声。
我们知道,振动产生声音,振动频率不同,所发出的声音也就不同,有规律的振动发出
的声音叫“乐音”,音乐由音频和节拍构成,音频即发声的频率,节拍即延时的长短,
因此利用单片机的定时器/计数器产生一定频率的方波,本文比较详细地介绍了音乐播放
器的原理、设计思路、硬件的选择及相关作用、软件的实现方法及详细的程序清单、还
包括进行了软、硬件调试和测试,耳熟能详的歌曲的依次、轮回播放。
实现,而且还具有一定的创新功能。
关键字: STC89C52RC 单片机、8051 单片机,中断,编程,音乐,音乐播放器
2 任务设计:
2.1 设计任务:制作一个单片机控制的音乐播放器。
2.2 设计要求:
(1)利用 I/O 口产生一定频率的方波,驱动蜂鸣器,发出不同的音调,从而演奏歌曲。
(2)采用共阳七段数码管或 LCD 显示当前播放歌曲的序号。
(3)可以通过按键实现三首歌之间换歌的基本操作。
2.3 发挥部分:
1.暂停按键
2.暂停时可以使用上一曲键或下一区键切换歌曲
3.播放或暂停时可以通过按键重新播放正在播放的歌曲
4.可以通过“第一首歌曲按键 S9”,“第二首歌曲按键 S10”,“第三首按键
S11”
- 3 -
实现播放相应的的歌曲
3 方案论证:
3.1.显示部分:
显示部分是本次设计的重要部分,一般有以下两种方案:
方案一:
采用 LED 显示,分静态显示和动态显示。对于静态显示方式,所需的译码驱动装置很
多,引线多而复杂,且可靠性也较低。而对于动态显示方式,虽可以避免静态显示的问
题,但设计上如果处理不当,易造成亮度低,有闪烁等问题。
方案二:
采用 LCD 显示。LCD 液晶显示具有丰富多样性、灵活性、电路简单、易于控制而且功
耗小等优点,对于信息量多的系统,是比较适合的。
鉴于上述原因,且设计使用的开发板单片机没有液晶显示屏,我们采用方案一。
3.2 按键部分:
方案一:独立按键
跳帽 J11 连接左边构成独立按键 分别为 S1,S2,S,3,S4
方案二: 矩阵按键
跳帽 J11 连接右边构成矩阵键盘 为 S1,S2,S3……………………S15,S16
由于使用按键较多,而独立按键只有四个,所以采用矩阵键盘
4 总体方案:
4.1 总体方案介绍
作为单片机的重要硬件资源之一,利用定时器可以产生各种固定频率的方波信号,
也可以产生包括“Do“、“Re“、“Me“--等音阶在内的各种频率声音。在此设计中我们采用
12MHz的晶振,产生的频率信号即音乐信号由P3.7口输出,信号经过放大后由喇叭发
出声音。
乐曲中,每一音符对应着确定的频率,我们可以参照给出的各音符频率及其相应
的时间常数来编写程序,根据表中所提供的常数,将其16进制代码送入芯片里,可以奏
出音符。音符的节拍我们可以用定时器T0来控制,送入不同的初值,就可以产生不同的
- 4 -
定时时间。便如某歌曲的节奏为每分钟94拍,即一拍为0.64秒。其它节拍与时间的对应
关系也可以从两者关系表中得到。
定时器 T0 工作在定时方式 1,改变 TH0 及 TL0,产生不同的音频频率。要编写的
乐谱按要求以音符字节数据表的形式存放在程序中,改变乐曲就是通过改变该数据表的
内容来实现的。主程序的任务是按顺序读取数据表中的字节,根据情况调用音级子程序
和音长子程序,启动定时器 T0 进行工作。
4.2
工作原理
(1) 要生产音频脉冲,只要算出某一音频的周期(1/频率),然后将此周期除以 2,即为半
周期的时间.利用定时器计时这个半周期时间,每当计时到后就将输出脉冲的 I/O 反相,然
后重复计时此半周期时间再对 I/O 反相,就可在 I/O 脚上得到此频率的脉冲.
(2) 利用8051的内部定时器使用其工作在计数器模式MODE1下,改变计数值THO及
TLO以产生不同频率的方法.
(3) 例如频率为523Hz,其周期T=1/523=1912us,因此只要令计数器计时
956us/1us=956,在每次计数956次时将I/O反相,就可得到中音DO (523Hz).
计数脉冲值与频率的关系公式如下:
N=Fi÷2÷Fr……………………………………………1.1
N: 计算值;
Fi: 内部计时一次为1us, 故其频率为1MHz;
(4) 其计数值的求法如下:
T=65536-N=65536-Fi÷2÷Fr ……………………………1.2
例如: 设K=65536, F=1000000=Fi=1MHz, 求低音DO(261Hz).中音DO (523Hz).
高音的DO (1046Hz)的计算值. T=65536-N=65536-Fi÷2÷Fr=65536-1000000÷2÷Fr
=65536-500000/Fr。低音DO的 T=65536-500000/262=63627,中音DO的T=
65536-500000/523=64580,高音DO的 T=65536-500000/1047=65059
(5) C 调各音符频率与计数值 T 的对照表如表 1 所示.
表 1.1
C 调各音符频率与计数值 T 的对照表
音符
频率(HZ) 简谱码(T 值)
音符
频率(HZ) 简谱码(T 值)
低 1
DO
262
63628
# 4 FA#
740
64860
- 5 -
#1
DO#
277
63731
中 5 SO
784
64898
低 2
RE
294
63835
# 5 SO#
831
64934
#2 RE#
311
63928
中 6 LA
880
64968
低 3 M
330
64021
# 6
932
64994
低 4 FA
349
64103
中 7 SI
988
65030
# 4 FA#
370
64185
高 1 DO
1046
65058
低 5 SO
392
64260
# 1 DO#
1109
65085
# 5 SO#
415
64331
高 2 RE
1175
65110
低 6 LA
440
64400
# 2 RE#
1245
65134
# 6
466
64463
高 3 M
1318
65157
低 7 SI
494
64524
高 4 FA
1397
65178
中 1 DO
523
64580
# 4 FA#
1480
65198
(6) 每个音符使用1个字节,字节的高4位代表音符的高低,低4位代表音符的节拍,
表2为节拍与节拍码的对照.如果1拍为0.4秒,1/4拍是0.1秒,只要设定延迟时间就可求
得节拍的时间.假设1/4拍为1DELAY,则1拍应为4DELAY,以此类推.所以只要求得1/4拍的
DELAY时间,其余的节拍就是它的倍数,如表3为1/4和1/8节拍的时间设定.
- 6 -
8
2
7
2
6
2
5
2
4
2
3
2
2
2
1
2
5
1
A
7
4
1
A
6
3
1
A
5
2
1
A
4
1
1
A
3
0
1
A
2
/
/
/
/
/
/
.
.
.
.
.
.
2
P
2
P
2
P
2
P
2
P
2
P
9
A
1
/
8
A
0
/
.
.
2
P
2
P
2
3
3
3
5
3
4
3
6
3
7
3
5 系统硬件设计(单元电路设计及分析):
U1
AT89C51
5
D
A
5
4
D
A
4
3
D
A
3
2
D
A
2
1
D
A
1
0
D
A
0
7
D
A
7
6
D
A
6
/
/
/
/
/
/
/
/
8
3
9
3
.
.
.
.
.
.
.
.
0
P
0
P
0
P
0
P
0
P
0
P
0
P
0
P
A
E
E
L
A
N
E
S
P
1
3
0
3
9
2
5.1 STC89C52RC 单片机最小系统:
T
S
R
2
L
A
T
X
1
L
A
T
X
9
8
1
9
1
C1
22pF
X1
CRYSTAL
C1
22pF
R2
10k
R3
10k
复位键
X2
CRYSTAL
单片机真正可用的最简单配置的应用系统
5.2 蜂鸣器模块
Q1
MMBTA93
LS1
扬声器
R1
1k
利用单片机的 P2.7 口
产生不同音调所对应的方波来使蜂鸣器发声,使用 PNP 三级管来驱动。
5.3 LED 模块
.
0
1
P
.
1
1
P
.
2
1
P
.
3
1
P
.
4
1
P
.
5
1
P
,
6
1
P
.
7
1
P
当接通电源,单片机运行时,八个二极管随着不同的调子闪烁,增加美感。
- 7 -
5.4 显示模块
U2
OE
LE
1
11
9
8
7
6
5
4
3
2
2
3
3
3
4
3
5
3
6
3
7
3
8
3
9
3
7
D
A
7
6
D
A
6
5
D
A
5
4
D
A
4
3
D
A
3
2
D
A
2
1
D
A
1
0
D
A
0
/
/
/
/
/
/
/
/
.
.
.
.
.
.
.
.
0
P
0
P
0
P
0
P
0
P
0
P
0
P
0
P
D7
D6
D5
D4
D3
D2
D1
D0
Q7
Q6
Q5
Q4
Q3
Q2
Q1
Q0
12
13
14
15
16
17
18
19
74HC573
U1
AT89C51
C1
D1
1N4007
5
2
4
2
3
2
2
2
1
2
3
1
A
5
2
1
A
4
1
1
A
3
0
1
A
2
/
/
/
/
.
.
.
.
2
P
2
P
2
P
2
P
9
A
1
/
8
A
0
/
.
.
2
P
2
P
E
L
A
A
E
N
E
S
P
0
3
9
2
XTAL2
XTAL1
AT89C51
当有键按下时,数码管显示当前的曲目
22pF
2
L
A
T
X
1
L
A
T
X
T
S
R
9
8
1
9
1
5.5 按键模块
P3.7/RD
P3.6/WR
P3.5/T1
P3.4/T0
P3.3/INT1
P3.2/INT0
P3.1/TXD
P3.0/RXD
17
16
15
14
13
12
11
10
播放第一首S9
上一曲S13
播放第二首S10
下一曲S14
播放第三首S11
重播 S15
暂停/播放 S16
P2.7/A15
P2.6/A14
P2.5/A13
按下上一曲开关 S13 跳到上一曲播放,按下下一曲开关 S14 跳到下一曲播放
P2.4/A12
P2.3/A11
P2.2/A10
P2.1/A9
P2.0/A8
按下重播键 S15 重新播放该曲,按下暂停键 S16 实现暂停并使 LED 灯循环向右点亮
S9,S10,S11 按键可分别选曲
28
27
26
25
24
23
22
21
Q1
MMBTA93
5.6 整体电路:
P0.7/AD7
P0.6/AD6
P0.5/AD5
P0.4/AD4
P0.3/AD3
P0.2/AD2
P0.1/AD1
P0.0/AD0
32
33
34
35
36
37
38
39
- 8 -