论文部分内容阅读
摘 要:在工业控制现场,监测结果通常要以声音的形式进行播报,以提醒操作人员进行处理。蜂鸣器是一种简单可靠,成本低廉的声音播报设备。本文介绍了一种以51单片机作为控制核心,以蜂鸣器为发声器件的音乐播放器的设计。首先介绍了该装置的硬件构成及设计原理,其次介绍了软件设计的基本原理。
关键词:蜂鸣器;音乐播放;单片机;软件;硬件设计原理
Abstract: In the field of industrial control, monitoring results are usually broadcast in the form of sound to remind operators to process. Buzzer is a simple, reliable, low-cost audio broadcasting device. This paper introduces the design of a music player based on the 51 MCU as the control core and the buzzer as the voice producing device. First, the hardware structure and design principle of the device are introduced. Secondly, the basic principle of software design is introduced.
Keywords: Buzzer; music player; MCU; software; hardware; design principle
引言
蜂鸣器是一种简单可靠,成本低廉的声音播报设备。在一些要求比较简单的场合,只要蜂鸣器具备发声和不发生两种特性,就能解决问题。而在一些要求比较高的场合,则需要蜂鸣器发出不同曲调不同长度的声音以对不同情况进行播报。本文所介绍的,就是一款能利用蜂鸣器播放音乐的装置。
1 总体架构
本装置的核心是一颗51单片机,声音播报设备是一颗无源蜂鸣器。蜂鸣器能在单片机的控制下播放音乐。同时,电路板上还有一个行列式键盘,可以通过键盘按键的输入来控制音乐播放的速度以及选择不同的音乐进行播放。
2 硬件电路设计原理
(1)蜂鸣器驱动电路设计
蜂鸣器输入端所需要的驱动电流视具体型号不同,一般从十几毫安到几十毫安不等。51单片机并行I/O口的驱动能力则从几毫安到十几毫安不等。因此,通常需要在单片机的并行I/O口和蜂鸣器的输入端之间加上可以放大驱动电流的电路。三级管或场效应管是一个不错的选择,其驱动原理简单,价格也低廉。具体的电路设计如图1所示:
(2)行列式键盘扫描电路设计
本装置除了能播放音乐片段之外,还有如选歌、快进、慢进、暂停、播放等控制功能。这些操作需要通过键盘操作进行输入。本设计选用了16键的4×4行列式键盘。该键盘的具体电路设计如图2所示:
3 软件设计原理
乐曲的播放需要实现曲调和节拍的控制。不同曲调的播放通过向蜂鸣器发出不同频率的方波就可以实现。比如:要让蜂鸣器发出低音的1,只要向蜂鸣器发送一个262Hz的方波即可。而要发出中音的3,则要发送一个659Hz的方波。节拍就是一个曲调持续的时间。因此,乐曲的播放总结起来其实就是两个要素:(1)控制单片机I/O口发出某固定频率的方波;(2)控制该方波的持续时间。何时应发出何种频率的方波,该方波持续多长时间,由具体乐谱中的曲调和节拍决定。软件设计时通常直接存储在不同的数组中。
本装置利用单片机的两个定时器来分别实现对曲调和节拍的控制。这种方法代码短,对CPU的时间占用率低,是一种十分高效的实现方法。基于此方法,用蜂鸣器播放《上学歌》的核心代码如下所示:
#include
sbit BELL=P1^2;
int i_m=0,i_s=0,j_s=0;
unsigned char t1_cz_1=0XFC,t1_cz_0=0X44;
unsigned char music_table[]={0xfc,0x44,0xfc,0xac,0xfd,0x09, 0xfc,0x44,0xfd,0x82,0xfd,0xc8, 0xfd,0xc8,0xfe,0x22,0xfd,0xc8,
0xfd,0x82,0xfd,0xc8,0xfd,0xc8, 0xfe,0x22,0xfd,0x82,0xfd,0xc8,
0xfd,0x09,0xfd,0xc8,0xfd,0x82, 0xfd,0x09,0xfd,0x82,0xfd,0x09,
0xfc,0x44,0xfc,0xac,0xfd,0x09, 0xfc,0x44};
unsigned char step_table[]={5,5,5,5,10,5,5,5,5,10, 5,5,10,5,5,10,5,5,5,5,5,5,5,5,20};
main()
{
TH0=0X70; //T0用于產生基本节拍,一次中断0.04s
TL0=0X00;
TH1=0XFC; //T1用于产生发出音符所需的周期性
TL1=0X44; //脉冲,初始化为中音的"1"(64580d=fc44h)
TMOD=0X11; //T0、T1均为方式1定时,不用门控
IE=0X8a; //中断使能
TR0=1; //T0、T1开始计数 TR1=1;
while(1)
;
}
void timer0_int() interrupt 1
{
int temp;
TL0=0X70; //重设初值
TH0=0X00;
j_s++;
temp=step_table[i_s]-j_s;
if(temp==0)
{
i_s++;
i_m=i_m+2;
j_s=0;
if(i_m==50)
i_m=0;
if(i_s==25)
i_s=0;
}
t1_cz_1=music_table[i_m];
t1_cz_0=music_table[i_m+1];
}
void timer1_int() interrupt 3
{
TH1=t1_cz_1; //重设初值
TL1=t1_cz_0;
BELL=~BELL;
}
在以上代码中,定时计数器0用于产生节拍,一次中断时间设计为40ms。定时计数器1用于产生曲调。乐曲中所有节拍都是基于定时计数器0这个40ms的基准时间产生的。而数组step_table中,则存储了每一个节拍对应的该基准时间的个数。当一个曲调对应的节拍时间完成后,在定时计数器0中,会向存储定时计数器1初值的全局变量t1_cz_1和t1_cz_2装入新的初值。而在定时计数器1的下一次中断中,该初值被重装,新的曲调便产生了。
4 结束语
本文介绍了一种基于51单片机的音乐播放装置装置的设计。包括该装置的整体架构、以及软硬件设计原理的及介绍。该设计成本低廉,功能也很丰富。
参考文献
[1]Maxim Technology,Datasheet of MAX232,19-0175;Rev 5;10/03.
[2]張毅刚,彭喜元,彭宇.单片机原理及应用[M].高等教育出版社,2009.
关键词:蜂鸣器;音乐播放;单片机;软件;硬件设计原理
Abstract: In the field of industrial control, monitoring results are usually broadcast in the form of sound to remind operators to process. Buzzer is a simple, reliable, low-cost audio broadcasting device. This paper introduces the design of a music player based on the 51 MCU as the control core and the buzzer as the voice producing device. First, the hardware structure and design principle of the device are introduced. Secondly, the basic principle of software design is introduced.
Keywords: Buzzer; music player; MCU; software; hardware; design principle
引言
蜂鸣器是一种简单可靠,成本低廉的声音播报设备。在一些要求比较简单的场合,只要蜂鸣器具备发声和不发生两种特性,就能解决问题。而在一些要求比较高的场合,则需要蜂鸣器发出不同曲调不同长度的声音以对不同情况进行播报。本文所介绍的,就是一款能利用蜂鸣器播放音乐的装置。
1 总体架构
本装置的核心是一颗51单片机,声音播报设备是一颗无源蜂鸣器。蜂鸣器能在单片机的控制下播放音乐。同时,电路板上还有一个行列式键盘,可以通过键盘按键的输入来控制音乐播放的速度以及选择不同的音乐进行播放。
2 硬件电路设计原理
(1)蜂鸣器驱动电路设计
蜂鸣器输入端所需要的驱动电流视具体型号不同,一般从十几毫安到几十毫安不等。51单片机并行I/O口的驱动能力则从几毫安到十几毫安不等。因此,通常需要在单片机的并行I/O口和蜂鸣器的输入端之间加上可以放大驱动电流的电路。三级管或场效应管是一个不错的选择,其驱动原理简单,价格也低廉。具体的电路设计如图1所示:
(2)行列式键盘扫描电路设计
本装置除了能播放音乐片段之外,还有如选歌、快进、慢进、暂停、播放等控制功能。这些操作需要通过键盘操作进行输入。本设计选用了16键的4×4行列式键盘。该键盘的具体电路设计如图2所示:
3 软件设计原理
乐曲的播放需要实现曲调和节拍的控制。不同曲调的播放通过向蜂鸣器发出不同频率的方波就可以实现。比如:要让蜂鸣器发出低音的1,只要向蜂鸣器发送一个262Hz的方波即可。而要发出中音的3,则要发送一个659Hz的方波。节拍就是一个曲调持续的时间。因此,乐曲的播放总结起来其实就是两个要素:(1)控制单片机I/O口发出某固定频率的方波;(2)控制该方波的持续时间。何时应发出何种频率的方波,该方波持续多长时间,由具体乐谱中的曲调和节拍决定。软件设计时通常直接存储在不同的数组中。
本装置利用单片机的两个定时器来分别实现对曲调和节拍的控制。这种方法代码短,对CPU的时间占用率低,是一种十分高效的实现方法。基于此方法,用蜂鸣器播放《上学歌》的核心代码如下所示:
#include
sbit BELL=P1^2;
int i_m=0,i_s=0,j_s=0;
unsigned char t1_cz_1=0XFC,t1_cz_0=0X44;
unsigned char music_table[]={0xfc,0x44,0xfc,0xac,0xfd,0x09, 0xfc,0x44,0xfd,0x82,0xfd,0xc8, 0xfd,0xc8,0xfe,0x22,0xfd,0xc8,
0xfd,0x82,0xfd,0xc8,0xfd,0xc8, 0xfe,0x22,0xfd,0x82,0xfd,0xc8,
0xfd,0x09,0xfd,0xc8,0xfd,0x82, 0xfd,0x09,0xfd,0x82,0xfd,0x09,
0xfc,0x44,0xfc,0xac,0xfd,0x09, 0xfc,0x44};
unsigned char step_table[]={5,5,5,5,10,5,5,5,5,10, 5,5,10,5,5,10,5,5,5,5,5,5,5,5,20};
main()
{
TH0=0X70; //T0用于產生基本节拍,一次中断0.04s
TL0=0X00;
TH1=0XFC; //T1用于产生发出音符所需的周期性
TL1=0X44; //脉冲,初始化为中音的"1"(64580d=fc44h)
TMOD=0X11; //T0、T1均为方式1定时,不用门控
IE=0X8a; //中断使能
TR0=1; //T0、T1开始计数 TR1=1;
while(1)
;
}
void timer0_int() interrupt 1
{
int temp;
TL0=0X70; //重设初值
TH0=0X00;
j_s++;
temp=step_table[i_s]-j_s;
if(temp==0)
{
i_s++;
i_m=i_m+2;
j_s=0;
if(i_m==50)
i_m=0;
if(i_s==25)
i_s=0;
}
t1_cz_1=music_table[i_m];
t1_cz_0=music_table[i_m+1];
}
void timer1_int() interrupt 3
{
TH1=t1_cz_1; //重设初值
TL1=t1_cz_0;
BELL=~BELL;
}
在以上代码中,定时计数器0用于产生节拍,一次中断时间设计为40ms。定时计数器1用于产生曲调。乐曲中所有节拍都是基于定时计数器0这个40ms的基准时间产生的。而数组step_table中,则存储了每一个节拍对应的该基准时间的个数。当一个曲调对应的节拍时间完成后,在定时计数器0中,会向存储定时计数器1初值的全局变量t1_cz_1和t1_cz_2装入新的初值。而在定时计数器1的下一次中断中,该初值被重装,新的曲调便产生了。
4 结束语
本文介绍了一种基于51单片机的音乐播放装置装置的设计。包括该装置的整体架构、以及软硬件设计原理的及介绍。该设计成本低廉,功能也很丰富。
参考文献
[1]Maxim Technology,Datasheet of MAX232,19-0175;Rev 5;10/03.
[2]張毅刚,彭喜元,彭宇.单片机原理及应用[M].高等教育出版社,2009.