数字音乐盒

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
65030
F
3又3/4拍
1
高音DO
B
65058
2
高音RE
C
65110
3
高音MI
D
65157
4
高音FA
E
65178
5
高音SO
F
65217
对照乐谱编码时,可以查上表进行对应的编码
3硬件电路
3.1电路图
图2 数字音乐盒电路图
电路参数:
芯片:AT89C51C1:10uF
C2:30pFC3:30pF
R1:200ΩR2:1KΩ
(3)具体代码见附录
5仿真调试
(1)运行结果
图6 运行结果
由运行时的电路变化可以看出LS1相连的端口电压不断变化,这是由于定时器产生了驱动电流驱动其发声,当按下与K2相连的按钮时开始唱歌,按与K1相连的按钮时唱歌暂停,再次按下时继续播放,并且无论歌曲是否暂停,如果当前播放不为最后一首音乐,当按下K2相连按钮时系统将播放下一首音乐,如果为最后一首则停止播放,系统恢复至初始化之后状态。
参考文献
[1]张毅刚,彭喜元,董继成.单片机原理及应用.高等教育出版社,2003.
[2]童诗白,华成英.模拟电子技术基础.高等教育出版社,2006.
[3]张大明,刘振鹏.单片微机控制应用技术实操指导书,机械工业出版社,2007.
[4]徐晨,陈继红,王春明,徐慧.微机原理及应用,高等教育出版社,2004.
课程论文
题 目:数字音乐盒电路的设计与仿真
学生姓名:
学生学号:
系 别:电子工程学院
专 业:通信工程
年 级:2013级
任课教师:
数字音乐盒电路的设计与仿真
学生:
指导教师:
电子工程学院 通信工程专业
1项目概括
本设计是一个基于AT89C51系列单片机的音乐盒,依据单片机技术原理,通过硬件电路制作以及软件编译,设计制作出一个多功能音乐盒。该音乐盒主要由按键电路、复位电路、时钟电路以及蜂鸣器组成。使用两个按键控制音乐盒,一个用来切换歌曲。播放歌曲时,蜂鸣器发出某个音调,与之对应的LED亮起。本设计利用KEILC编程软件对音乐盒源程序进行编程并调试,配合PROTEUS仿真软件对硬件进行仿真调试,节约了设计时间。
6体会
一分耕耘,一分收获。只有亲自用实践来验证这句话,在能得其要领。经过这次单片机课程设计,我从一个单片机实践的门外汉,已经越升为略知一二的新手。虽然还有很多有关单片机的应用有待学习,但万变不离其宗,只要深入了解单片的原理,全部知识点,各个细节,一切设计皆有可能。在实验的开始几天,基本上没有收获,不知何从下手,不知所措。为了看得更远,不妨站在前人的肩膀上,我在整体思路模糊的情况下,在网上大量招资粮,各种与电子时钟相关的文章,我阅读了不少。随着涉猎的点滴积累,我对电子时钟的设计方案已经慢慢酝酿而成。有了方向和不少知识储备后,在接下来的几天,几乎每天都有突破,虽然有时只是一句程序的修改或诞生,但那种收获的感觉很暖人心。在课程设计的过程中:遇到的最大的问题就是硬件问题,在自己课程设计的过程中遇到的很多情况下或是导线损坏或是实验箱上的I/O口不能正确的输出。在这一方面,我们所能做的是,每天开始做实验时就要检查所用的导线没有问题及各个I/O接口是否能够正确输出。具体方法如下:把每一根导线连接每个I/O口到发光二极管,上电后每个发光二极管是不是能点亮,按一下复位键后,发光二极管是不是还是继续正确的亮着。在整个课程设计中我懂得了许多东西,也培养了我独立工作的能力,树立了对自己工作能力的信心,相信会对今后的学习工作生活有非常重要的影响。而且大大提高了动手的能力,使我充分体会到了在创造过程中探索的艰难和成功时的喜悦。虽然这个课程设计做的还是有一些遗憾,但是在设计过程中所学到的东西是这次课程设计的最大收获和财富。最后,无论如何都要好好的感谢指导老师的帮助,在整个课程设计过程中,几乎每一个程序的设计成功都离不开老师的指导和帮助。在老师的辛勤指导之下,学到了很多有用的经验和使用的知识。而且还得感谢身边同学的帮助和交流,在互相帮助和交流的过程中能够学到很多很有创意的编程思想,自己也有所提高。
表1 计数初值表
低音
频率
T
参数
中音
频率
T
参数
高音
频率
T
参数
Do
262
1908
229
Do
523
956
115
Do
1046
57
57
Do﹟
277
1805
217
Do﹟
554
903
108
Do﹟
1109
54
54
Re
294
1701
204
Re
587
852
102
Re
1175
51
51
Re﹟
311
16来自百度文库8
193
Re﹟
622
图1 AT89C51引脚排列图
2.2音调的产生
不同的音调对应着不同的物理频率,而若要产生一定频率的声音,我们只需用一定频率的方波来驱动蜂鸣器即可。对于固定频率的产生方法,本系统中用定时器0设置为工作方式1(TMOD=0x01),对不同的音调依据频率装入对应的计数初值,定时器计数完时将输出端取反(编程中采用异或),进而产生对应的方波。具体计算如下:
[5]薛峰,朱晓骏.单片机原理及应用,北京理工大学出版社,2011.
7附录(代码)
#include"reg51.h"
#include"stdio.h"
#define uchar unsigned char
#define uint unsigned int
sbit p3_2=P3^3;
sbit fout=P2^3;
Uchar code S2[]={0x08,0x08,0x08,0x11,0x11,0x21,0x32,0x31,0x22,0x21,0x22,
//自你走后心憔悴
0x21,0x31,0x51,0x52,0x31,0x52,0x61,0x13,0x12,
804
97
Re﹟
1245
48
48
Mi
330
1515
182
Mi
659
759
91
Mi
1318
45
45
Fa
349
1433
172
Fa
698
716
86
Fa
1397
43
43
Fa﹟
370
1351
162
Fa﹟
740
676
81
Fa﹟
1480
41
41
So
392
1276
153
So
784
638
77
So
1568
38
38
So﹟
void delay(uint p)
{uint j;
uint k,l;
for(l=0;l<p;l++)
for(k=165;k>0;k--)
for(j=0;j<160;j++);
}
通过此程序,每一拍为107ms,可以实现要求,对于节拍没有固定的时间,也可以通过调节循环初值进行延时修改。
2.4音符的编码
(2)中断服务子程序流程图
外部中断服务0:暂停与继续播放
图4 暂停与继续播放流程图
外部中断服务1:开始、停止、切歌子程序流程图
图5开始、停止、切歌子程序流程图
流程图说明:由于外部中断服务执行与否来取决于外部硬件,并且可能在执行主程序的任何一个时刻发生,因此在此单独列出两个中断服务子程序,执行完之后将自动跳回主程序中继续执行。
晶振:12MHZ
(1)晶振回路:12MHZ晶振电路,其中C1和C2为微调电容
(2)复位电路:采用按键电平复位
原理介绍:
电路运行时,通过中断K1和K2向CPU发出中断申请,执行相应中断服务,通过调整各标志位实现相应的功能。
4软件设计
(1)主程序流程图(主程序为死循环,在此略去主循环部分,没有结束框)
图3 主程序流程图
415
1205
145
So﹟
831
602
72
So﹟
1661
36
36
La
440
1136
136
La
880
568
68
La
1760
34
34
La﹟
464
1078
129
La﹟
932
536
64
La﹟
1865
32
32
Si
494
1012
121
Si
988
506
61
Si
1976
30
30
2.3节拍的确定
学习音乐时,每个音符都有对应的节拍,我们唱拍的时候通常叫做打拍子,用来区分音符之间所间隔的时间,因此音符的产生不仅要有频率,还要有节拍。我们知道一共有12中不同的节拍,每一拍的时间都是最短拍的整数倍,例如4/4拍是1/4拍的4倍,因此我们可以确定一个基准的延时时间,然后用它的倍数表示不同的节拍,用一个无符号整数来表示其倍数。具体代码如下
0x34,0x62,0x74,0x62,0x96,0xa6,
0xb3,0xa1,0x91,0x81,0x72,0x82,0x92,0xa3,0x91,0x81,0x71,0x66,
0x73,0x81,0x71,0x61,0x73,0x81,0x71,0x61,
0x76,0x02,0x71,0x81,0x91,0xa1,0xff};
如对于编码为1的低音SO,其频率为392HZ,我们实验中采用的为12M晶振,因此机器周期为1us,那么该音调对应的计数初值为:65536-1000000/(2*392)=65536-1276=64270
解释:由于工作方式0中计数器的THO和TL0所有位均用于装载计数初值,因此最大计数值为256*256=65536,周期为1x s,频率为392HZ,每定时一次对输出取反,因此计数初值应除以2。以下为所有音调标准频率及其在本设计中的的计数初值表。
(2)程序调试中出现的问题及解决的办法:
编程时要注意,在程序开始时,要写入各定时器中断的入口地址。编程过程中要注意加注释或分割线,否则,在程序过长时容易变得很乱,不便于查找或更改。程序的结构要设计的合理,避免上下乱调用的现象,这样会使程序更加清晰化。编程前要加流程图,这样会使思路清晰,例如数字音乐盒的设计思路完全可以按着MP3的工作方式列写流程图。
(1)利用I/O口产 生一定频率的方波,驱动蜂鸣器,发出不同的音调,从而演奏乐曲
(2)可通过功能键选择乐曲,暂停,播放。
2系统原理
2.1芯片AT89C51的介绍
AT89C51是一种带4K字节闪存可编程可擦除只读存储器(FPEROM-FlashProgrammable and Erasable Read Only Memory)的低电压,高性能CMOS-8位微处理器,俗称单片机。AT89C2051是一种带2K字节闪存可编程可擦除只读存储器的单片机。单片机的可擦除只读存储器可以反复擦除100次。该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,AT89C2051是它的一种精简版本。AT89C51单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。
5
低音SO
1
64260
1
1/4拍
6
低音LA
2
64400
2
2/4拍
7
低音TI
3
64524
3
3/4拍
1
中音DO
4
64580
4
1拍
2
中音RE
5
64684
5
1又1/4拍
3
中音MI
6
64777
6
1又1/2拍
4
中音FA
7
64820
8
2拍
5
中音SO
8
64898
A
2又1/2拍
6
中音LA
9
64968
C
3拍
7
中音TI
A
0xFD,0x43,
0xFD,0x6A,
0xFD,0xB3,
0xFD,0xF3,
0xFE,0x2D,
0xFE,0x47,//高八度1-7
0xFE,0x76,
0xFE,0xA1,
0xFE,0xC7,
0xFE,0xD9,
0xFE,0xF9,
0xFF,0x16
};
表2 编码表
简谱
发音
简谱码
T值
节拍码
节拍数
(3)LCD计时正常显示的解决办法:
两个定时器同时工作,存在中断时序问题,刚开始时我们把定时器1设定在方式3,计250us,由于定时中断过于频繁,使CPU负载过大,导致音乐不能正常播放,时间不能正常显示。解决办法:将定时器1设定在工作方式1,16位计数,计50ms,效果有很大改观。但还有问题。当音乐为全4拍起始时,此时音乐节奏与定时器T1中断频率错开,LCD显示和音乐播放都会好一些。另外,在歌曲中,当遇到一个音符发音为4拍,在编曲中为*CH,托因时间长,当定时器T1此时来中断时,就会对歌曲播放产生影响,若改为发音一拍,中断对歌曲播放影响减弱,但音乐效果变差。
由计数初值表可以看到,如果采用将每一个音符的所对应的计数初值都直接编入音乐的码流中,每个码占两个字节,并且不易记忆,因此我们采用将不同音符的频率写入一个如下所示码表中,通过查表确定计数初值。
uchar code yd[]={
0xff,0xff,//占位
0xFC,0x8E,//中央C调1-7
0xFC,0xED,
sbit key=P3^7;
sbit p0_2=P2^0;
//p0_2=0;
uchar fout1=0;
uint i;
uint id=0;
uchar t1;
uchar t2;
uint count=0;
uchar S;
//
uchar code S1[]={
0x34,0x62,0x74,0x62,0x74,0x82,0x36,
相关文档
最新文档