单片机数字音乐盒课程设计.docx
- 文档编号:8959894
- 上传时间:2023-02-02
- 格式:DOCX
- 页数:22
- 大小:278.74KB
单片机数字音乐盒课程设计.docx
《单片机数字音乐盒课程设计.docx》由会员分享,可在线阅读,更多相关《单片机数字音乐盒课程设计.docx(22页珍藏版)》请在冰豆网上搜索。
单片机数字音乐盒课程设计
数字音乐盒的设计
摘要
随着人类社会的发展,人们对视觉、听觉方面的享受提出了越来越高的要求。
小小的音乐盒可以给人们带来美好的回忆,提高人们的精神文化享受。
传统音乐盒,多是机械型的,体积笨重,发音单调,不能实现批量生产。
本设计是一个基于AT89C51系列单片机的音乐盒。
该音乐盒主要由按键电路、复位电路、时钟电路、显示电路以及蜂鸣器组成。
使用四个按键控制音乐盒,其中两个按键用来控制歌曲的播放、暂停,另两个用来控制液晶上歌曲次序的变化,本音乐盒共有三首歌曲。
播放歌曲时,相应歌曲对应相应数码管上歌曲次序及歌名的显示。
关键词:
AT89C51,蜂鸣器,LCD液晶显示
1绪论
1.1课题描述
随着科学技术的进步和社会的发展,人类所接触的信息也在不断增加并且日益复杂。
面对浩如烟海的信息,人们已经能够利用计算机等工具高效准确地对之进行处理,但要想将处理完的信息及时,清晰地传递给别人,还必须通过寻求更加卓越的显示技术来实现。
单片机技术与液晶显示技术的结合,使信息传输交流向着智能可视化方向迅速发展。
小小的音乐盒可以给人们带来美好的回忆,提高人们的精神文化享受。
传统音乐盒是机械型的,体积笨重,发音单调,不能实现批量生产。
本文设计的音乐盒是以单片机为核心元件的电子式音乐盒,体积小,重量轻,能演奏和旋音乐,功能多,外观效果多彩,使用方便,并具有一定的商业价值。
1.2基本工作原理及框图
本次设计是一个基于AT89C51单片机的音乐盒,该音乐盒主要由按键电路、复位电路、时钟电路、蜂鸣器以及显示电路组成。
使用其中两个按键来控制播放和暂停另外两个按键用来控制换曲。
利在液晶上显示曲目的更换,共三首音乐,蜂鸣器每播放一首歌时液晶上显示相对应的歌曲次序。
系统组成框图如图1。
图1基本工作原理框图
2相关芯片及硬件电路设计
2.1AT89C51芯片
图2AT89C51引脚图
2.1.1AT89C51的功能特性
AT89C51提供以下标准功能:
4K字节Flash闪速存储器,128字节内部RAM,32个I/O口线,两个十六位定时/计数器,一个5向量两级中断结构,一个全双工串行通信口,片内振荡器及时钟电路。
同时,AT89C51可降至0Hz的静态逻辑操作,并支持两种软件可选的节电工作模式。
空闲方式停止CPU的工作,但允许RAM,定时/计数器,串行通信口及中断系统继续工作。
掉电方式保存RAM中的内容,但振荡器停止工作并禁止其他所有部件工作直到下一个硬件复位。
2.1.2AT89C51的主要性能参数
AT89C51主要性能参数如下:
●与MC-51产品指令系统完全兼容
●K字节可编程闪烁存储器
●寿命:
1000写/擦循环
●数据保留时间:
10年
●全静态工作:
0Hz-24Hz
●三级程序存储器锁定
●128*8位内部RAM
●32可编程I/O线
●两个16位定时器/计数器
●5个中断源
●可编程串行通道
●低功耗的闲置和掉电模式
●片内振荡器和时钟电路
2.2晶振电路
晶体振荡器,简称晶振,它可以等效成一个电容和一个电阻并联再串联一个电容的二端网络。
晶振有一个重要的参数,那就是负载电容值,选择与负载电容值相等的并联电容,就可以得到晶振标称的谐振频率。
晶振在应用具体起到的作用,微控制器的时钟源可以分为两类:
一种是皮尔斯振荡器配置,适用于晶振和陶瓷谐振槽路。
另一种为简单的分立RC振荡器。
RC振荡器能够快速启动,成本也比较低,但通常在整个温度和工作电源电压范围内精度较差,会在标称输出频率的5%至50%范围内变化,震荡脉冲频fosc在0至24MHZ范围内变化。
但其性能受环境条件和电路元件选择的影响。
图3为晶振电路。
图3晶振电路
2.3复位电路
单片机在启动时都需要进行复位,以使CPU及系统各部件处于确定的初始状态,并从初态开始工作。
51系列单片机的复位信号是从RST引脚输入到芯片内的施密特触发器中的。
当系统处于正常工作状态时,且振荡器稳定后,如果RST引脚上有一个高电平并维持2个机器周期(24个振荡周期)以上,则CPU就可以响应并将系统复位。
单片机系统的复位方式有:
手动按钮复位和上电复位。
图4为复位电路。
图4复位电路
2.4驱动电路
由于蜂鸣器的工作电流一般比较大,以致于单片机的I/O口是无法直接驱动的(但AVR可以驱动小功率蜂鸣器),所以要利用放大电路来驱动,一般使用三极管来放大电流就可以了。
蜂鸣器驱动电路一般都包含以下几个部分:
一个三极管、一个蜂鸣器、一个续流二极管和一个电源滤波电容。
图5为蜂鸣器驱动电路。
图5蜂鸣器驱动电路
2.4.1蜂鸣器
发声元件,在其两端施加直流电压(有源蜂鸣器)或者方波(无源蜂鸣器)就可以发声,其主要参数是外形尺寸、发声方向、工作电压、工作频率、工作电流、驱动方式(直流/方波)等。
这些都可以根据需要来选择。
2.4.2续流二极管
蜂鸣器本质上是一个感性元件,其电流不能瞬变,因此必须有一个续流二极管提供续流。
否则,在蜂鸣器两端会产生几十伏的尖峰电压,可能损坏驱动三极管,并干扰整个电路系统的其它部分。
2.4.3滤波电容
滤波电容C1的作用是滤波,滤除蜂鸣器电流对其它部分的影响,也可改善电源的交流阻抗,如果可能,最好是再并联一个220uF的电解电容。
2.4.4三极管
三极管Q1起开关作用,其基极的高电平使三极管饱和导通,使蜂鸣器发声;而基极低电平则使三极管关闭,蜂鸣器停止发声。
2.5显示电路
2.5.1线段的显示
点阵图形式液晶由M×N个显示单元组成,假设LCD显示屏有64行,每行有128列,每8列对应1字节的8位,即每行由16字节,共16×8=128个点组成,屏上64×16个显示单元与显示RAM区1024字节相对应,每一字节的内容和显示屏上相应位置的亮暗对应。
例如屏的第一行的亮暗由RAM区的000H——00FH的16字节的内容决定,当(000H)=FFH时,则屏幕的左上角显示一条短亮线,长度为8个点;当(3FFH)=FFH时,则屏幕的右下角显示一条短亮线;当(000H)=FFH,(001H)=00H,(002H)=00H,……(00EH)=00H,(00FH)=00H时,则在屏幕的顶部显示一条由8段亮线和8条暗线组成的虚线。
这就是LCD显示的基本原理。
2.5.2字符的显示
用LCD显示一个字符时比较复杂,因为一个字符由6×8或8×8点阵组成,要找到和显示屏幕上某几个位置对应的显示RAM区的8字节,还要使每字节的不同位为“1”,其它的为“0”,为“1”的点亮,为“0”的不亮。
这样一来就组成某个字符。
但由于内带字符发生器的控制器来说,显示字符就比较简单了,可以让控制器工作在文本方式,根据在LCD上开始显示的行列号及每行的列数找出显示RAM对应的地址,设立光标,在此送上该字符对应的代码即可。
图6为显示电路。
图6显示电路
2.6按键电路
P1.0-P1.5作为控制按键,其中P1.0-P1.1扫描行,P1.4-P1.5扫描列;可通过功能键选择乐曲、暂停、播放。
图7为按键电路。
图7按键电路
3系统软件设计
总体原理:
播放一段音乐需要的是两个元素,一个是音调,另一个是音符。
首先要了解对应的音调,音调主要由声音的频率决定,同时也与声音强度有关。
对一定强度的纯音,音调随频率的升降而升降;对一定频率的纯音、低频纯音的音调随声强增加而下降,高频纯音的音调却随强度增加而上升。
另外,音符的频率有所不同。
基于上面的内容,这样就对发音的原理有了一些初步的了解。
音符的发音主要靠不同的音频脉冲。
利用单片机的内部定时器/计数器0,使其工作在模式1,定时中断,然后控制P3引脚的输出音乐。
只要算出某一音频的周期(1/频率),然后将此周期除以2,即为半周期的时间,利用定时器计时这个半周期时间,每当计时到后就将输出脉冲的I/O反相,然后重复计时此半周期时间再对I/O反相,就可在I/O脚上得到此频率的脉冲。
3.1软件设计程序流程图
流程图如图8所示。
图8程序流程图
按下电源开关键后,整体电路开始运作,电源指示灯发光。
此时,按下连接于P1.4和P1.5端口的开关按键开始选曲,每按一下单片机将依序更换歌曲并在液晶上显示歌曲次序及歌名。
歌曲次序及歌名将在数码管上以文字“1+歌曲名,2+歌曲名,3+歌曲名”的形式循环呈现。
当开始按下连接于P1.0的开关按键后,单片机将依序播放歌曲,按下P1.1开关按键后歌曲播放将暂停。
3.2节拍的确定
若要构成音乐,光有音调是不够的,还需要节拍,让音乐具有旋律(固定的律动),而且可以调节各个音的快满度。
“节拍”,即Beat,简单说就是打拍子,就像我们听音乐不自主的随之拍手或跺脚。
若1拍实0.5s,则1/4拍为0.125s。
至于1拍多少s,并没有严格规定,就像人的心跳一样,大部分人的心跳是每分钟72下,有些人快一点,有些人慢一点,只要听的悦耳就好。
音持续时间的长短即时值,一般用拍数表示。
休止符表示暂停发音。
一首音乐是由许多不同的音符组成的,而每个音符对应着不同频率,这样就可以利用不同的频率的组合,加以与拍数对应的延时,构成音乐。
了解音乐的一些基础知识,我们可知产生不同频率的音频脉冲即能产生音乐。
对于单片机来说,产生不同频率的脉冲是非常方便的,利用单片机的定时/计数器来产生这样的方波频率信号。
因此,需要弄清楚音乐中的音符和对应的频率,以及单片机定时计数的关系。
3.3编码
doremifasolasi分别编码为1~7,重音do编为8,重音re编为9,停顿编为0。
播放长度以十六分音符为单位(在本程序中为165ms),一拍即四分音符等于4个十六分音符,编为4,其它的播放时间以此类推。
音调作为编码的高4位,而播放时间作为低4位,如此音调和节拍就构成了一个编码。
以0xff作为曲谱的结束标志。
举例1:
音调do,发音长度为两拍,即二分音符,将其编码为0x18。
举例2:
音调re,发音长度为半拍,即八分音符,将其编码为0x22歌曲播放的设计。
先将歌曲的简谱进行编码,储存在一个数据类型为unsignedchar的数组中。
程序从数组中取出一个数,然后分离出高4位得到音调,接着找出相应的值赋给定时器0,使之定时操作蜂鸣器,得出相应的音调;接着分离出该数的低4位,得到延时时间,接着调用软件延时。
3.4仿真
图9仿真初始界面
图10仿真播放第一首
图11仿真播放第二首
图12仿真播放第三首
总结
这次单片机课程设计相对来说,硬件部分是比较简单的,主要是程序的设计,因为需要计算频率和歌曲时间,用了两个定时器。
另一个难点在于对音调和节拍的理解,对于这个知识点我花了两天的时间翻阅图书,最终明白了,对于音调和节拍的编写。
在大学课堂的学习只是纯理论的专业知识,而我们应该把所学的用到现实生活中去,此次的音乐盒设计给我奠定了一个实践基础,我会在以后的学习、生活中磨练自己,使自己适应社会激烈的竞争。
通过此次课程设计,却改变了很多,首先,对于硬件电路的工作原理有了进一步的学习,同样就有了进一步的认识;其次,软件方面,在程序的设计,程序的调试方面都学到了很多东西。
致谢
经过近一个星期的忙忙碌碌,这次的单片机课程设计已经快要接近尾声了。
在这次的单片机课程设计过程中,无论是在理论学习阶段,还是在设计的选题、资料查询和撰写的每一个环节,我都得到到了许多人的悉心的指导和帮助。
首先,借此机会我向我们的单片机授课教师及课程设计指导老师表示衷心的感谢,老师的指导和帮助,是我顺利完成本次课程设计的基础和前提。
另外,感谢各位同学的帮助和勉励。
同窗之谊和手足之情,我将终生难忘!
我愿在未来的学习和研究过程中,以更加丰厚的成果来答谢曾经关心、帮助和支持过我的所有老师、同学和朋友。
参考文献
[1]何立民.单片机高级教程[M].北京:
北京航空航天大学出版社,2001.3.
[2]赵晓安.MCS-51单片机原理及应用[M].天津:
天津大学出版社,2001.3.
[3]肖洪兵.跟我学用单片机[M].北京:
北京航空航天大学出版社,2002.8.
[4]夏继强.单片机实验与实践教程[M].北京:
北京航空航天大学出版社,
2001.4.
[5]于凤明.单片机原理及接口技术[M].北京:
中国轻工业出版社.1998.5.
[6]陈伟人.单片微型计算机原理与应用[M].北京:
清华大学出版社,2006.5.
[7]李广第.单片机基础[M].北京:
北京航空航天大学出版社,1999.3.
附录
总体电路图:
图13总体电路图
程序:
#include
#include
#defineucharunsignedchar
#defineuintunsignedint
ucharm,n;
uchari,timecount=0,timesec=0,timemin=0,timecheck=0;
charr0=2;
sbitbeepIO=P3^0;
typedefunsignedcharBYTE;
typedefunsignedintWORD;
typedefbitBOOL;
sbitrs=P2^0;
sbitrw=P2^1;
sbitep=P2^2;
sbitpausekey=P1^1;
uchark,q,f;
ucharcodedis1[]={"1jimoshazhou"};
ucharcodedis2[]={"2tonghua"};
ucharcodedis3[]={"3qiannianlian"};
ucharcodeT[49][2]={{0,0},
{0xF8,0x8B},{0xF8,0xF2},{0xF9,0x5B},{0xF9,0xB7},{0xFA,0x14},{0xFA,0x66},{0xFA,0xB9},{0xFB,0x03},{0xFB,0x4A},{0xFB,0x8F},{0xFB,0xCF},{0xFC,0x0B},
{0xFC,0x43},{0xFC,0x78},{0xFC,0xAB},{0xFC,0xDB},{0xFD,0x08},{0xFD,0x33},{0xFD,0x5B},{0xFD,0x81},{0xFD,0xA5},{0xFD,0xC7},{0xFD,0xE7},{0xFE,0x05},
{0xFE,0x21},{0xFE,0x3C},{0xFE,0x55},{0xFE,0x6D},{0xFE,0x84},{0xFE,0x99},{0xFE,0xAD},{0xFE,0xC0},{0xFE,0x02},{0xFE,0xE3},{0xFE,0xF3},{0xFF,0x02},
{0xFF,0x10},{0xFF,0x1D},{0xFF,0x2A},{0xFF,0x36},{0xFF,0x42},{0xFF,0x4C},{0xFF,0x56},{0xFF,0x60},{0xFF,0x69},{0xFF,0x71},{0xFF,0x79},{0xFF,0x81}
};
ucharcodemusic1[][2]={{0,4},
{22,4},{22,4},{17,4},{15,4},{15,4},{17,12},
{15,4},{15,2},{17,2},{15,4},{13,4},{13,4},{15,12},{0,4},
{20,4},{20,4},{20,4},{17,4},{20,4},{20,4},{20,4},{17,4},
{22,4},{17,4},{17,4},{15,4},{15,4},{17,12},
{22,4},{22,4},{17,4},{15,4},{15,4},{17,12},
{15,4},{15,2},{17,2},{15,4},{13,4},{13,4},{15,12},
{20,4},{20,4},{20,2},{17,2},{17,4},{20,4},{20,4},{20,2},{17,2},{17,2},{17,2},
{24,4},{20,4},{20,2},{17,2},{17,4},{20,4},{22,12},
{17,4},{22,4},{25,4},{25,4},{17,4},{22,4},{25,8},
{24,4},{22,2},{24,2},{22,4},{20,4},{15,4},{17,12},
{15,4},{15,4},{15,4},{10,4},{15,4},{17,4},{20,8},
{17,4},{24,4},{24,4},{20,4},{15,4},{17,12},
{17,4},{22,4},{25,4},{25,4},{17,4},{22,4},{25,8},
{29,4},{27,2},{29,2},{27,4},{25,4},{25,4},{27,12},
{29,4},{29,2},{27,4},{25,4},{27,6},{27,2},{25,4},{24,4},
{20,4},{20,2},{17,2},{20,4},{20,2},{22,2},{22,16},
{0xFF,0xFF}};
ucharcodemusic2[][2]={{0,4},
{16,6},{19,2},{19,6},{16,2},{14,6},{0,10},{16,6},{19,2},{19,6},{16,2},{14,8},{0,8},
{26,8},{21,6},{24,2},{23,6},{21,2},{19,8},{21,16},{0,8},
{16,6},{19,2},{19,6},{16,2},{14,8},{0,8},{26,8},{21,6},{23,2},{21,14},
{24,6},{23,2},{21,6},{19,2},{16,6},{14,2},{13,8},{14,16},{0,4},
{19,6},{19,2},{21,6},{21,2},{23,8},{21,4},{0,4},{19,6},{19,2},{16,6},{19,2},{16,8},{14,6},{0,4},
{19,6},{19,2},{21,6},{21,2},{23,8},{21,4},{0,4},{19,6},{19,2},{16,6},{19,2},{16,8},{14,6},{0,4},
{26,16},{21,4},{26,4},{21,4},{26,16},{21,4},{26,16},{0,4},
{16,8},{16,8},{14,8},{16,8},{21,4},{26,4},{21,4},{26,4},{0,8},{16,8},{16,8},{14,8},{16,8},{21,4},{26,4},{21,4},{26,4},{0,8},
{19,8},{19,6},{21,2},{16,8},{0,8},{19,6},{21,2},{19,6},{21,2},{16,8},{0,8},
{21,8},{26,8},{21,4},{24,12},{23,6},{21,2},{19,8},{21,16},
{14,4},{21,4},{14,4},{19,4},{16,6},{14,2},{13,8},{14,16},
{0xFF,0xFF}};
ucharcodemusic3[][2]={{0,4},
{27,4},{19,4},{19,4},{27,4},{26,4},{26,2},{27,2},{24,8},
{22,4},{17,4},{24,4},{22,4},{19,16},
{15,4},{12,4},{12,4},{15,4},{17,8},{19,8},
{26,6},{26,2},{26,4},{24,4},{24,4},{19,4},{19,8},
{27,4},{19,4},{19,4},{27,4},{26,4},{26,2},{27,2},{24,6},{24,2},
{22,4},{17,4},{24,4},{22,4},{19,16},
{15,4},{12,4},{12,4},{15,4},{17,8},{19,8},{19,6},{19,2},{19,4},{17,4},{14,4},{14,4},{14,4},{7,4},{12,24},
{0xFF,0xFF}};
uchartimetable[]="00:
00";
voiddelay(ucharp)
{
uchari,j;
for(;p>0;p--)
for(i=181;i>0;i--)
for(j=181;j>0;j--);
}
BOOLlcd_bz()
{
BOOLresult;
rs=0;
rw=1;
ep=1;
_nop_();
_nop_();
_nop_();
_nop_();
result=(BOOL)(P0&0x80);
ep=0;
returnresult;
}
voidlcd_wcmd(BYTEcmd)
{
while(lcd_bz());
rs=0;
rw=0;
ep=0;
_nop_();
_nop_();
P0=cmd;
_nop_();
_nop_();
_nop_();
_nop_();
ep=1;
_nop_();
_nop_();
_nop_();
_nop_();
ep=0;
}
voidlcd_pos(BYTEpos)
{
lcd_wcmd(pos|0x80);
}
voidlcd_wdat(BYTEdat)
{
while(lcd_bz());
rs=1;
rw=0;
ep=0;
P0=dat;
_nop_();
_nop_();
_nop_();
_nop_();
ep=1;
_nop_();
_nop_();
_nop_();
_nop_();
ep=0;
}
voidlcd_init()
{
lcd_wcmd(0x38);
delay
(1);
lcd_wcmd(0x0c);
delay
(1);
lcd_wcmd(0x06);
delay
(1);
lcd_wcmd(0x01);
delay
(1);
}
voidpause()
{
uchari,j;
for(i=150;i>0;i--)
for(j=150;j>0;j--);
}
voidtimecount_init()interrupt3
{
TH1=(65535-45872)/256;
TL1=(65535-45872)%256;
timecount++;
if(timecount==20)
{
timesec++;
timecount=0;
if(timesec==60)
{timesec=0;
timemin++;
}
}
}
voidadfa()interrupt0
{timesec=0;
timemin=0;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 数字 音乐盒 课程设计