基于MSP430控制蜂鸣器演奏乐曲的设计.docx
《基于MSP430控制蜂鸣器演奏乐曲的设计.docx》由会员分享,可在线阅读,更多相关《基于MSP430控制蜂鸣器演奏乐曲的设计.docx(8页珍藏版)》请在冰豆网上搜索。
![基于MSP430控制蜂鸣器演奏乐曲的设计.docx](https://file1.bdocx.com/fileroot1/2022-12/6/667614fc-abee-49bd-86a5-8d0f0f334f02/667614fc-abee-49bd-86a5-8d0f0f334f021.gif)
基于MSP430控制蜂鸣器演奏乐曲的设计
基于MSP430控制蜂鸣器演奏乐曲的设计
指导老师:
队员:
学校:
延安大学
院系:
物理与电子信息学院
摘要:
本作品为了实现蜂鸣器演奏音乐,设计基于单片机MSP430,以高低电平控制音调,电流通过蜂鸣器的电磁线圈,从而带动振动膜发声为方案,达到演奏美妙音乐的目的。
技术报告以蜂鸣器演奏音乐的设计为主线,包括蜂鸣器演奏音乐的的框架设计,软硬件设计,以及对灯光随高低电平闪烁的研究等。
基于可靠的硬件设计和稳定的软件算法,实现题目要求。
关键词:
单片机MSP430 高低电平 蜂鸣器
Abstract:
Thisworkinordertoachieveabuzzerplaymusic,designbasedonthesinglechipmicrocomputerMSP430,withhighandlowlevelcontroltones,thecurrentthroughthebuzzerelectromagneticcoils,thuspromotevibrationmembranevoiceforplantomeetwonderfulmusicplayingthepurpose.Technicalreporttoplaymusicofthedesignofthebuzzermainline,includingplayingmusicoftheframeworkofthebuzzerdesign,softwareandhardwaredesign,andwithhighandlowleveloflightsflashing.Basedonreliablehardwaredesignandstablesoftwarealgorithm,andrealizethetopicrequest.
Keywords:
MSP430microcontroller Highandlowlevel buzzer
一、设计要求
(1)基于单片机MSP430为主控芯片,利用蜂鸣器发声,以高低电平控制音调,来实现演奏乐曲的功能。
(2)准备八个发光二级管,定义MSP430单片机的八个管脚分别为歌曲中的不同音符这样,每当蜂鸣器演奏一个音符时,相应的LED就会发光,随着闪烁。
二、硬件设计
(1)整体方案
通过改编430程序使其能够发出相应的音乐。
演奏乐曲,对于一个音符应该包括两个部分,一是声调,二是持续时间,在这个程序中声调是由简单的延时——电平翻转来实现,改变了延时时间就改变了声调,而时间是通过计数比较来实现,当计数值相等时就跳出循环演奏下一个音。
(2)系统框架
图
(一)
(3)主控芯片的选择
MSP430系列单片机是一个16位的单片机,采用了精简指令集(RISC)结构,具有丰富的寻址方式(7种源操作数寻址、4种目的操作数寻址)、简洁的27条内核指令以及大量的模拟指令;大量的寄存器以及片内数据存储器都可参加多种运算;还有高效的查表处理指令。
这些特点保证了可编制出高效率的源程序。
而且其运算速度快,超低功耗,片内资源丰富,方便高效的开发环境也是我们优先选择的主要原因.
图
(二)
(4)蜂鸣器
蜂鸣器分为两种:
压电式蜂鸣器和电磁式蜂鸣器
实验室中,我们一般使用电磁式蜂鸣器
电磁式蜂鸣器:
电磁式蜂鸣器由振荡器、电磁线圈、磁铁、振动膜片及外壳等组成。
接通电源后,振荡器产生的音频信号电流通过电磁线圈,使电磁线圈产生磁场。
振动膜片在电磁线圈和磁铁的相互作用下,周期性地振动发声。
如图所示:
蜂鸣器的正极接到电源上面,蜂鸣器的负极接到三极管发射极上,三极管的基极接到限流电阻R1上,由单片机的P3.7控制,当P3.7输出高电平时,三极管T1截止,没有电流流过线圈,蜂鸣器不发声;当P3.7输出低电平时,三极管T1导通,这样蜂鸣器的电流形成回路,发出声音。
因此,我们可以通过程序控制P3.7脚的电平来使蜂鸣器发出声音和关闭。
程序中改变单片机P3.7脚输出波形的频率,就可以控制蜂鸣器的音调,产生不同的音调,音色。
另外,改变P3.7输出高低电平的占空比,则可以控制蜂鸣器的声音的大小,这些我们都可以通过编程实验来验证。
图(三)
三、软件设计
程序功能:
MCU控制蜂鸣器演奏歌曲《祝你平安》。
拨码开关设置:
将BUZZER位拨至ON,其余位拨至OFF 。
测试说明:
聆听蜂鸣器“唱出”的乐曲 ,既然是演奏乐曲对于一个音符应该包括两个部分 ,一是声调 二是持续时间,在这个程序中声调是用简单的 ,延时-电平翻转来实现的,改变了延时的时间就改变了 ,声调,而时间是通过计数比较来实现的,当计数值相等时 ,就跳出循环演奏下一个音符。
流程图:
图(四)
四、结论及感想
该设计完成了基本功能,可以实现任意歌曲的播放,只要换下歌曲里面的程序即可。
不过让八个发光二级管随着歌曲的节奏闪烁完成的不够彻底。
程序也是在我们的修改下面目全非,好在基本功能倒是可以轻易显示。
总而言之,虽然课程结束了,但是我们依然不会放弃它的扩展功能的实现,我们会再接再厉,争取将它完好实现。
参考文献:
1.《MSP430学习笔记5---利用蜂鸣器演奏音乐》
2.蜂鸣器:
附录:
(1)程序:
*********************************************/
#include
#include "BoardConfig.h"
#include "music.h"
#define Buzzer BIT7
#define Buzzer_Port P6OUT
#define Buzzer_DIR P6DIR
ucharcounter;
voidPlay_Song(void);
/***************主函数****************/
voidmain(void)
{
uchari;
WDTCTL=WDTPW+WDTHOLD; //关闭看门狗
/*------选择系统主时钟为8MHz-------*/
BCSCTL1&=~XT2OFF; //打开XT2高频晶体振荡器
do
{
IFG1&=~OFIFG; //清除晶振失败标志
for(i=0xFF;i>0;i--); //等待8MHz晶体起振
}
while((IFG1&OFIFG)); //晶振失效标志仍然存在?
BCSCTL2|=SELM_2+SELS; //主时钟和从时钟都选择高频晶振
BoardConfig(0xf8); //关闭数码管、流水灯、电平转换
//设置定时器A每10ms中断一次
CCTL0=CCIE;
CCR0=10000;
TACTL|=TASSEL_2+ID_3;
//设置控制蜂鸣器的IO方向为输出
Buzzer_DIR|=Buzzer;
//打开全局中断
_EINT();
//循环演奏歌曲
while
(1)
{
Play_Song();
}
}
/*******************************************
函数名称:
TimerA_ISR
功 能:
定时器A的中断服务函数
参 数:
无
返回值 :
无
********************************************/
#pragmavector=TIMERA0_VECTOR
__interruptvoidTimerA_ISR(void)
{
counter++;
}
/*******************************************
函数名称:
Delay_Nms
功 能:
延时N个ms的函数
参 数:
n--延时长度
返回值 :
无
********************************************/
voidDelay_Nms(ucharn)
{
uchari,j;
for(i=0;i{
for(j=0;j<3;j++)
_NOP();
}
}
/*******************************************
函数名称:
Play_Song
功 能:
播放《祝你平安》的乐曲
参 数:
无
返回值 :
无
********************************************/
voidPlay_Song(void)
{
ucharTemp1,Temp2;
ucharaddr=0;
counter=0;//中断计数器清0
while
(1)
{
Temp1=SONG[addr++];
if(Temp1==0xFF) //休止符
{
TACTL&=~MC_1; //停止计数
Delay_Nms(100);
}
elseif(Temp1==0x00) //歌曲结束符
{
return;
}
else
{
Temp2=SONG[addr++];
TACTL|=MC_1; //开始计数
while
(1)
{
Buzzer_Port^=Buzzer;
Delay_Nms(Temp1);
if(Temp2==counter)
{
counter=0;
break;
}
}
}
}
}
(2)单片机实物图
(3)蜂鸣器实物图