单片机控制蜂鸣器汇总
单片机实验报告蜂鸣器
一、实验目的1. 熟悉51单片机的基本结构和工作原理。
2. 掌握51单片机的I/O口编程方法。
3. 学习蜂鸣器的驱动原理和应用。
4. 通过实验,提高动手实践能力和问题解决能力。
二、实验原理蜂鸣器是一种将电信号转换为声音信号的器件,常用于产生按键音、报警音等提示信号。
根据驱动方式,蜂鸣器可分为有源蜂鸣器和无源蜂鸣器。
1. 有源蜂鸣器:内部自带振荡源,将正负极接上直流电压即可持续发声,频率固定。
2. 无源蜂鸣器:内部不带振荡源,需要控制器提供振荡脉冲才能发声,调整提供振荡脉冲的频率,可发出不同频率的声音。
在本次实验中,我们使用的是无源蜂鸣器。
51单片机通过控制P1.5端口的电平,产生周期性的方波信号,驱动蜂鸣器发声。
三、实验器材1. 51单片机实验板2. 蜂鸣器3. 连接线4. 电路焊接工具5. 编程软件(如Keil)四、实验步骤1. 电路连接:- 将蜂鸣器的正极连接到51单片机的P1.5端口。
- 将蜂鸣器的负极接地。
2. 程序编写:- 使用Keil软件编写程序,实现以下功能:1. 初始化P1.5端口为输出模式。
2. 通过循环,不断改变P1.5端口的电平,产生方波信号。
3. 调整方波信号的频率,控制蜂鸣器的音调。
3. 程序下载:- 将程序下载到51单片机中。
4. 实验观察:- 启动程序后,观察蜂鸣器是否发声,以及音调是否与程序设置一致。
五、实验结果与分析1. 实验结果:- 成功驱动蜂鸣器发声,音调与程序设置一致。
2. 结果分析:- 通过实验,我们掌握了51单片机的I/O口编程方法,以及蜂鸣器的驱动原理。
- 在程序编写过程中,我们学习了方波信号的生成方法,以及如何调整方波信号的频率。
六、实验总结本次实验成功地实现了51单片机控制蜂鸣器发声的功能,达到了预期的实验目的。
通过本次实验,我们提高了以下能力:1. 对51单片机的基本结构和工作原理有了更深入的了解。
2. 掌握了51单片机的I/O口编程方法。
3. 学习了蜂鸣器的驱动原理和应用。
51单片机蜂鸣器的工作原理
51单片机蜂鸣器的工作原理蜂鸣器是一种常见的声音输出设备,广泛应用于各种电子产品中。
在51单片机中,蜂鸣器也被广泛使用,用于发出警报、提示和音乐等声音信号。
那么,51单片机蜂鸣器的工作原理是什么呢?一、蜂鸣器的基本原理蜂鸣器是一种由压电陶瓷材料制成的声音输出器件。
当在蜂鸣器的两个引脚上加上一定的电压时,压电陶瓷材料会产生机械振动,从而产生声音。
蜂鸣器的发声频率取决于电压信号的频率和振动器的特性。
二、51单片机蜂鸣器的接口在51单片机中,蜂鸣器通常通过一个IO口连接。
通过向该IO口输出高电平或低电平信号,可以控制蜂鸣器的开关状态,从而发出不同的声音。
三、蜂鸣器的工作方式1. 通过IO口控制在51单片机中,通过向蜂鸣器的接口引脚输出高电平或低电平信号,可以控制蜂鸣器的工作状态。
当向蜂鸣器接口输出高电平时,蜂鸣器处于工作状态,发出声音;当向蜂鸣器接口输出低电平时,蜂鸣器处于停止状态,不发出声音。
2. 软件控制除了通过IO口控制蜂鸣器的开关状态外,还可以通过软件控制蜂鸣器发出不同的声音。
通过改变蜂鸣器接口引脚的电平信号的频率和持续时间,可以发出不同频率和持续时间的声音信号。
四、51单片机蜂鸣器的应用1. 发出警报信号蜂鸣器可以被用于发出警报信号,用于提醒和警示。
例如,在安防系统中,当检测到入侵者或异常情况时,通过控制蜂鸣器发出警报声,以引起注意。
2. 提示和提示音蜂鸣器还可以用于发出各种提示和提示音。
比如,在电子设备中,当按下按钮或操作出现错误时,可以通过蜂鸣器发出滴滴声或警示声,以提醒用户。
3. 音乐播放通过控制蜂鸣器的频率和持续时间,可以模拟出一些简单的音乐。
虽然蜂鸣器的音质较差,但在一些简单的应用场景中,如游戏机、玩具等,仍然可以发挥一定的作用。
五、总结51单片机蜂鸣器的工作原理是通过控制IO口的电平信号来控制蜂鸣器的开关状态,进而发出不同的声音信号。
蜂鸣器可以应用于警报、提示和音乐等方面,为电子设备提供声音输出功能。
单片机蜂鸣器编程技巧
单片机蜂鸣器编程技巧1.音乐节奏控制:在编写程序时,可以使用定时器来控制蜂鸣器的音符持续时间。
通过调整定时器的参数值,可以实现不同音长的音符,从而控制节奏感。
2.音符频率控制:不同音符具有不同的频率,可以根据乐谱中各个音符的频率,将其对应的频率值存储在一个数组中。
通过控制蜂鸣器输出的频率,可以实现不同音高的音符。
3.延时函数:在单片机编程中,经常需要使用延时函数来控制时间间隔。
在输出音乐时,可以通过延时函数控制每个音符的持续时间。
通过调整延时函数的参数值,可以实现不同音符间的时间间隔,从而实现更好听的音乐效果。
4.音乐合奏:在编写程序时,可以将不同乐器的音符同时输出到不同的蜂鸣器上,从而实现多个乐器的合奏效果。
通过合理地组合不同乐器的频率和节奏,可以编写出更丰富的音乐作品。
5.音乐循环播放:通过编写循环结构,可以实现音乐循环播放的效果。
通过精确地确定循环次数,可以实现指定音乐节拍的循环播放效果。
6.音乐速度调节:通过调整延时函数的参数值,可以控制音乐的播放速度。
加快延时时间可以使音乐播放加速,减慢延时时间可以使音乐放慢。
7.音乐音量控制:通过控制蜂鸣器输出的PWM信号的占空比,可以实现音乐的音量控制。
调整PWM信号占空比的大小,可以改变音量的大小。
8.音乐渐变效果:在编写程序时,可以使用渐变效果来实现音乐的过渡效果。
通过逐渐增加或减小频率和音量,可以实现音乐渐变的效果,使音乐更加流畅自然。
9.使用音乐库:在单片机编程中,有一些常用的音乐库可以使用。
通过引用这些音乐库,可以简化音乐的编写过程,提高编程效率。
10.节奏变化:在编写程序时,可以尝试在音乐的不同位置加入一些节奏变化,使音乐更加有层次感。
例如,在特定位置加入加速、变慢、停顿等效果。
总结:以上是一些常用的单片机蜂鸣器编程技巧。
通过合理运用这些技巧,可以编写出更多样化、更复杂的音乐效果。
当然,这只是冰山一角,还有很多其他的编程技巧可以尝试,通过对单片机蜂鸣器的深入研究和实践,我们可以更好地掌握这些技巧,创作出独特的音乐作品。
单片机蜂鸣器音乐
单片机蜂鸣器音乐单片机在我们的生活中无处不在,它被广泛地应用在各种电子产品中,为我们的生活带来了便利。
今天,我要向大家介绍的是一种基于单片机的蜂鸣器音乐播放器。
一、硬件部分1、单片机:我们选用的是AT89C51单片机,它具有低功耗、高性能的特点,非常适合用于音乐播放器。
2、蜂鸣器:蜂鸣器是用来发出声音的,我们将其连接在单片机的输出口上。
3、存储芯片:为了能够播放存储在芯片中的音乐,我们需要将音乐以某种格式存储在芯片中。
常用的存储芯片有EEPROM和Flash芯片。
4、按键:为了能够选择播放不同的音乐,我们需要添加一个按键。
二、软件部分1、音乐编码:我们需要将音乐转换成二进制编码,这样才能被单片机读取并播放。
常用的音乐编码格式有MIDI、WAV等。
2、音乐播放:当按下按键时,单片机读取存储芯片中的音乐数据,并通过蜂鸣器播放。
3、音乐选择:通过按键可以选择不同的音乐进行播放。
4、音量控制:我们可以通过编程来控制蜂鸣器的音量大小。
三、调试与测试1、硬件调试:检查连接是否正确,确保没有短路或断路的情况。
2、软件调试:将程序下载到单片机中进行调试,确保能够正常播放音乐。
3、综合测试:将所有硬件和软件都连接起来进行测试,确保能够正常工作。
四、总结与展望通过本次实验,我们成功地制作了一个基于单片机的蜂鸣器音乐播放器。
它具有简单、实用的特点,可以用来播放存储在芯片中的音乐。
未来,我们可以进一步扩展其功能,例如添加更多的按键来选择不同的音乐、添加显示屏来显示歌曲名称等。
我们也可以将其应用到其他领域,例如智能家居、智能安防等。
单片机蜂鸣器唱歌程序在许多应用中,单片机蜂鸣器经常被用来发出声音或音乐。
下面是一个使用单片机蜂鸣器唱歌的程序示例。
我们需要确定单片机和蜂鸣器的连接方式。
通常,单片机具有一个内置的蜂鸣器输出引脚,可以将蜂鸣器连接到这个引脚上。
在以下的示例中,我们将假设单片机具有一个内置蜂鸣器输出引脚,并将其连接到P1.0端口上。
51单片机实现蜂鸣器警车、救护车、消防车声
------------------------------------------------*/
main()
{
Init_Timer0(); //初始化定时器
while(1)
{
DelayMs(1); //延时1ms,累加频率值
frq++;
}
}
/*------------------------------------------------
void DelayUs2x(unsigned char t)
{
while(--t);
}
/*------------------------------------------------
mS延时函数,含有输入参数unsigned char t,无返回值
unsigned char是定义无符号字符变量,其值的范围是
日期:2009.5
修改:无
内容:模拟警车发声
------------------------------------------------*/
#include<reg52.h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义
sbit SPK=P1^2; //定义喇叭端口
unsi现方式做保护处理对用户上传分享的文档内容本身不做任何修改或编辑并不能对任何下载内容负责
1.
/*-----------------------------------------------
名称:喇叭
论坛:
编写:shifang
//TH0=0x00;//给定初值
//TL0=0x00;
EA=1; //总中断打开
单片机蜂鸣器工作原理
单片机蜂鸣器工作原理
单片机蜂鸣器是一种电子器件,用于产生声音信号。
其工作原理基于数字信号的控制和蜂鸣器内部的振动装置。
蜂鸣器内部通常由封装在柱状外壳中的震荡器、共振腔和发声膜组成。
震荡器由铁片和线圈组成,当线圈中通过电流时,铁片受到磁场的作用而振动。
同时,共振腔能够增强振动的效果。
单片机蜂鸣器通过控制IO口的输出电平来控制蜂鸣器的工作
状态。
通常情况下,将IO口设置为高电平,使得蜂鸣器内部
的振动装置受到激励,开始振动。
振动会产生一系列的声波,形成连续的声音。
通过在单片机中编写程序控制IO口的输出电平的变化,可以
产生不同频率和节奏的声音。
通过改变输出电平的高低时间,可以实现不同频率的振动和声音效果。
总结而言,单片机蜂鸣器通过控制IO口的输出电平来控制振
动装置的工作状态,从而产生声音信号。
不同的振动和声音效果通过编写程序中不同的输出电平变化来实现。
单片机蜂鸣器响一秒停一秒实验报告代码
单片机蜂鸣器响一秒停一秒实验报告代码实验目的:利用单片机控制蜂鸣器输出不同的频率和时间,实现蜂鸣器响一秒停一秒的功能。
实验器材:STC89C52单片机、蜂鸣器、 Jumper wires。
实验原理:STC89C52单片机的IO口可以用来控制外部器件,蜂鸣器连接到单片机的IO口上,通过程序控制IO口输出高电平或低电平控制蜂鸣器发声或停止发声。
实验步骤:1. 将STC89C52单片机片上系统搭建好,将蜂鸣器连接到单片机的一个IO口上;2. 使用Keil编译器编写程序代码,实现蜂鸣器响一秒停一秒的功能;3. 将程序代码烧录进单片机,连接电源后观察蜂鸣器是否正常响起。
代码如下:```c#include<reg52.h>#define ON 0 // 蜂鸣器控制IO口输出高电平#define OFF 1 // 蜂鸣器控制IO口输出低电平void delay(unsigned int x); // 延迟函数void main(){while (1){P1 = ON; // 蜂鸣器控制IO口输出高电平delay(1000); // 延时1秒P1 = OFF; // 蜂鸣器控制IO口输出低电平delay(1000); // 延时1秒}}void delay(unsigned int x){ // 延迟函数unsigned char i, j;for (i = x; i > 0; i--)for (j = 110; j > 0; j--);}```以上代码中,P1口控制蜂鸣器,利用循环控制蜂鸣器在高低电平间切换,延时用来实现响1秒停1秒的功能。
注意:实现蜂鸣器响一秒停一秒功能时,需要确保延时函数的时间间隔精度较高,否则会影响响停时间的准确性。
以上是单片机蜂鸣器响一秒停一秒的实验报告和代码,希望能对您有所帮助。
单片机中的蜂鸣器和音频输出技术
单片机中的蜂鸣器和音频输出技术蜂鸣器作为一种常见且常用的音频输出装置,在单片机应用领域中发挥着重要的作用。
本文将介绍蜂鸣器的原理、种类以及与单片机的联接方式。
同时,还会探讨音频输出技术在单片机应用中的应用场景和具体实现。
一、蜂鸣器的原理和种类蜂鸣器是一种能够产生声音的装置,其工作原理基于声音的震动。
按照其原理和结构的不同,蜂鸣器可以分为压电式蜂鸣器和电磁式蜂鸣器两类。
1. 压电式蜂鸣器压电式蜂鸣器是利用压电材料在电场作用下发生形变,进而产生声音的一种器件。
其内部结构由振动片和外壳组成。
当施加电压时,振动片发生震动,从而产生声音。
压电式蜂鸣器广泛应用于数字仪表、电子钟等场合,具有音质纯净、功耗低等特点。
2. 电磁式蜂鸣器电磁式蜂鸣器则是利用电磁铁产生的磁场作用于振片,振片受到电磁力的作用而振动,进而产生声音。
电磁式蜂鸣器结构简单,工作电压范围宽,适用于各种电子设备。
二、蜂鸣器在单片机中的连接方式在单片机应用中,将蜂鸣器与单片机相连接,通常有两种方式:直接驱动和驱动电路。
1. 直接驱动方式直接驱动方式是指将蜂鸣器的两极分别连接至单片机的IO口和GND。
通过控制单片机的IO口输出高、低电平,从而控制蜂鸣器工作与停止。
这种方式简单直接,适用于一些简单的音频输出场景。
2. 驱动电路方式驱动电路方式则是在直接驱动方式的基础上,增加了一个驱动电路。
驱动电路通常由三极管和电阻组成,通过调整电流大小控制蜂鸣器的工作与停止。
相比直接驱动方式,驱动电路方式可以实现更稳定的蜂鸣器控制和更好的音频效果。
三、音频输出技术在单片机应用中的实际应用除了蜂鸣器之外,单片机应用中还有许多其他音频输出技术。
下面将介绍两种常见的音频输出技术及其应用场景。
1. PWM音频输出技术PWM(脉宽调制)音频输出技术是一种通过调整方波脉冲的占空比来模拟出音频波形的技术。
在单片机应用中,通过控制PWM输出引脚的电平和占空比,可以实现简单的音频播放功能,如嵌入式音乐播放器、语音提示等。
51单片机实现蜂鸣器警车、救护车、消防车声
/*-----------------------------------------------
名称:喇叭
论坛:
编写:shifang
日期:2009.5
修改:无
内容:模救护车发声
------------------------------------------------*/
{
while(t--)
{
//大致延时1mS
DelayUs2x(245);
DelayUs2x(245);
}
}/*------------------------------------------------
定时器中断子程序
------------------------------------------------*/
main()
{
unsigned char i;
Init_Timer0(); //初始化定时器
while(1)
{ቤተ መጻሕፍቲ ባይዱ
frq=0;
for(i=0;i<60;i++)//播放1s左右一种频率
{
DelayMs(10);
}
frq=100;
for(i=0;i<60;i++)//播放1s左右另外一种频率
{
DelayMs(10);
//TH0=0x00;//给定初值
//TL0=0x00;
EA=1; //总中断打开
ET0=1; //定时器中断打开
TR0=1; //定时器开关打开
}
/*------------------------------------------------
主函数
单片机蜂鸣器实验报告
单片机蜂鸣器实验报告单片机蜂鸣器实验报告引言:单片机蜂鸣器是一种常用的电子元件,广泛应用于各种电子设备中。
本篇实验报告旨在介绍单片机蜂鸣器的基本原理和实验过程,并探讨其在不同应用场景中的应用。
一、实验目的:本次实验的主要目的是通过使用单片机控制蜂鸣器发出不同频率的声音,了解蜂鸣器的工作原理及其在电子设备中的应用。
二、实验器材和原理:1. 实验器材:- 单片机开发板- 蜂鸣器- 连接线- 电源2. 实验原理:蜂鸣器是一种能够发出声音的电子元件,它通过振动产生声音。
在单片机蜂鸣器实验中,我们使用单片机控制蜂鸣器的振动频率,从而产生不同的声音。
三、实验步骤:1. 连接电路:将蜂鸣器的正极连接到单片机开发板的IO口,将蜂鸣器的负极连接到开发板的地线。
确保连接稳固。
2. 编写程序:使用单片机开发板的编程软件,编写程序来控制蜂鸣器的振动频率。
可以通过调整程序中的延时时间来改变蜂鸣器发声的频率。
3. 上传程序:将编写好的程序通过USB线上传到单片机开发板中。
4. 运行实验:将电源接入单片机开发板,开启电源。
单片机将根据程序中设定的频率控制蜂鸣器发声。
四、实验结果与分析:通过修改程序中的延时时间,我们可以改变蜂鸣器发声的频率。
实验中,我们尝试了不同的延时时间,并观察了蜂鸣器发声的效果。
在较短的延时时间下,蜂鸣器发出的声音频率较高,声音连续不断。
而在较长的延时时间下,蜂鸣器发出的声音频率较低,声音间隔较长。
通过实验结果分析,我们可以得出结论:蜂鸣器的发声频率与延时时间成反比关系。
延时时间越短,蜂鸣器发声的频率越高;延时时间越长,蜂鸣器发声的频率越低。
五、实验应用:单片机蜂鸣器在实际应用中有着广泛的用途。
以下是几个常见的应用场景:1. 报警系统:将蜂鸣器连接到报警设备中,当设备检测到异常情况时,通过单片机控制蜂鸣器发出警报声,提醒用户注意。
2. 电子钟:通过单片机控制蜂鸣器发出定时的滴答声,实现电子钟的功能。
3. 游戏设备:将蜂鸣器连接到游戏设备中,通过单片机控制蜂鸣器发出不同的声音,增加游戏的趣味性和互动性。
蜂鸣器总结
一样的图,不一样的效果! 详情请见代码菌
#include<reg52.h> #define uchar unsigned char #define uint unsigned int void delay1(uint i) { while(i--) { uchar j; for(j=0;j<57;j++); } }
单片机 总结
2.3 相应的I/O的驱动波形图
B V VCC V VCC
0
t
t
电 平 驱 动
脉 冲 驱 动
图5
A
1
2
单片机 总结
3.1 电路原理分析
本电路只适合无源蜂鸣器,对有源蜂鸣器不能采用此线路。 音乐蜂鸣实际上就是在普通的蜂鸣器电路基础上加了一路电源产生余音。 图中I/O2输出频率信号控制三极管TR3的通断使蜂鸣器发声。 TR1,TR2导通为蜂鸣器供电的同时给电容C1供电使电压不能突变,当TR1 关断后C1放电使电压不能突变,加在蜂鸣器两端的电压是缓变电压就能使蜂 鸣器产生余音。(不同的VCC对应不同的参数) R4、R5控制电容充放电时间从而控制余音长短。 R6为放电电阻(容性蜂鸣器采用)。 如图6的波形图可见,I/O1输出的是开关信号,I/O2输出的是频率信号,在I/O1 关断的时候,I/O2还在输出频率信号,通过C1供电使蜂鸣器产生余音。通过I/O1和I/ O2的互相配合可输出比较动听的音乐。 音乐电路中蜂鸣器的频率常为1K-4KHz。
I/O C
单片机 总结
2.2 电路原理分析
• 图1为I/O口直接驱动的蜂鸣器。 • 此方式既可以驱动有源蜂鸣器也可以驱动无源蜂鸣器。但前提是 MCU的I/O口有足够大的驱动电流去驱动蜂鸣器。
单片机使用4个独立按键控制蜂鸣器代码
单片机使用4个独立按键控制蜂鸣器代码下面是使用单片机控制蜂鸣器,使用4个独立按键的示例代码:```c#include <reg52.h> // 8052 单片机头文件sbit beep=P1^5; // 将蜂鸣器引脚定义为 P1.5sbit key1=P3^1; // 定义四个按键引脚为 P3.1 到 P3.4sbit key2=P3^2;sbit key3=P3^3;sbit key4=P3^4;void delay(unsigned int t) // 延时函数{unsigned int i,j;for(i=0;i<t;i++)for(j=0;j<125;j++);}void main(){beep = 0; // 蜂鸣器关闭while(1){if(key1 == 0) // 首先检测按键1是否按下{beep = ~beep; // 取反控制蜂鸣器开/关delay(500); // 延时以避免误触}else if(key2 == 0) // 随后检测按键2是否按下{beep = 0; // 关闭蜂鸣器delay(500);}else if(key3 == 0) // 然后检测按键3是否按下{beep = 1; // 打开蜂鸣器delay(500);}else if(key4 == 0) // 最后检测按键4是否按下{beep = 0; // 关闭蜂鸣器delay(500);}}}```在上述代码中,我们首先定义了蜂鸣器引脚 `beep`,以及四个按键引脚 `key1` 到 `key4`。
然后,我们通过 `delay` 函数来延时防止误碰。
在无限循环中,我们检测四个按键的状态,如果有按键被按下,我们会对蜂鸣器进行相应的操作。
按键1控制开/关蜂鸣器,按键2关闭蜂鸣器,按键3打开蜂鸣器,按键4同样关闭蜂鸣器。
(2)AT89C52有源蜂鸣器控制
/*名 称:
AT89S51 通过 CD4094 驱动 LED
*/
/*功 能:
用 CD4094 扩充 I/O 口,每片 4094 可以扩充 8 个 I/O 口 */
/*芯片类型:
AT89S51
*/
/*晶振频率:
11.0592MHZ
*/
/*作 者:
救火车
*/
/*版 权:
7
//unsigned char bdata p6,p7;//定义扩展 P6,P7 口
void update4094() {
unsigned char i,j,tt; STR4094=0; for (j=HOWMANY4094;j>0;j--) {
tt=*(&P4+j-1); for(i=0;i<8;i++) {
D4094=(tt&0x80)>0;//数据脚 CLK4094=0; CLK4094=1; tt<<=1; } } STR4094=1; }
8
key_times++;
if(3==key_times)
{
key_times=0;
delay_ms(1000);
sound_3(); //模拟声 3 报警音
}
} //if((last_key==1)&&(this_key==0))
if((0==last_key)&&(0==this_key)) {
k++; if(60==k) {
/*名 称:
蜂鸣器模拟报警音
*/
/*功 能:
每按一次按键,指示灯闪烁 8 次
关于单片机的一些小实验_05 蜂鸣器控制实验
*功能:利用P1.3输出高低电平来控制蜂鸣器蜂鸣。
*********************************************************************************************/
void main (void)
{
while(1) //死循环
sbit P1_3 = P1 ^ 3; //定义位变量
#define BEEP_ON() (P1_3=0) //定义"BEEP_ON()"为P1.3输出低电平,控制蜂鸣器蜂鸣
#define BEEP_OFF() (P1_3=1) //定义"BEEP_OFF()"为P1.3输出高电平,控制蜂鸣器不蜂鸣
/*与编译器无关的数据类型定义*/
/********************************************************************************************/
typedef unsigned char uint8; //无符号8位整型变量
/********************************************************************************************
*功能:利用P1.3输出高低电平来控制蜂鸣器蜂鸣。
*硬件条件:1.CPU型号:AT89S52
* 2.晶振:12.000MHz
typedef signed char int8; //有符号8位整型变量
typedef unsigned short uint16; //无符号16位整型变量
单片机汇编程序代码(闪烁灯、流水灯、蜂鸣器、点阵)
db 20h,10h,20h,10h,2bh,10h,26h,30h,30h,80h,18h,20h,18h,20h,26h,20h
db 20h,20h,20h,40h,26h,20h,2bh,20h,30h,20h,30h,20h,1ch,20h,20h,20h
;TP0: DB 00H,3CH,42H,42H,42H,42H,3CH,00H ;圆形
;TP2: DB 07Fh,0BFh,0DFh,0EFh,0F7h,0FBh,0FDh,0FEh
END
MOV 20H,#00H ;中断计数器清0
MOV B,#00H ;表序号清0
MUSIC1:
NOP
CLR A
MOVC A,@A+DPTR ;查表取代码
JZ END0 ;是00H,则结束
CJNE A,#0FFH,MUSIC5
LJMP MUSIC3
MUSIC5:
NOP
MOV R6,A
db 20h,80h,1ch,20h,1ch,20h,1ch,20h,30h,20h,30h,60h,39h,10h,30h,10h
db 20h,20h,2bh,10h,26h,10h,2bh,10h,26h,10h,26h,10h,2bh,10h,2bh,80h
db 18h,20h,18h,20h,26h,20h,20h,20h,20h,60h,26h,10h,2bh,20h,30h,20h
一、闪烁灯
ORG 0000H
AJMP MAIN
ORG 0030H
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
单片机控制蜂鸣器20年月日目录绪论 (1)1、硬件设计 (2)1.1 总体设计图 (2)1.2 简易结构框图 (2)1.3各部分硬件设计及功能 (3)1.3.1 蜂鸣器发声电路:(如图1.3.1) (3)1.3.2 电源稳压电路: (4)1.4 元件清单 (4)2、软件设计 (5)2.1设计思想 (5)2.2 程序流程图 (5)2.3 音调、节拍以及编码的确定方法 (6)2.3.1音调的确定 (6)2.3.2 节拍的确定 (8)2.3.3 编码 (9)3、电路仿真与分析 (10)4、电路板焊接、调试 (11)4.1 焊接 (11)4.2 调试 (12)5、讨论及进一步研究建议 (12)6、心得 (12)7、单片机音乐播放器程序实例(卡农) (13)绪论蜂鸣器播放音乐电路设计对于单片机初学者来说是一个简单易实现的课题。
通过编写程序使单片机产生一定频率的方波信号,方波信号进入蜂鸣器便产生我们熟知的音调。
我们用定时/计数器使单片机产生方波,利用定时/计数器使输出管脚在一定周期内反复翻转,达到所需频率,而我们给定时/计数器的初始值就是我们的音符—半周期数据表,通过我们播放的音乐的乐谱,来对数据表进行调用。
我们用延时子程序来表示节拍,不同的节拍代表不同的延时。
完成此次设计之后完全可以进行扩展,例如增加按键以及LED灯光效果,制成一个简易的音乐盒,给人以视觉听觉等全方位的享受。
1、硬件设计1.1 总体设计图1.2 简易结构框图电源蜂鸣器STC89C52晶振1.3各部分硬件设计及功能1.3.1 蜂鸣器发声电路:(如图1.3.1)图1.3.1如图所示,蜂鸣器发声电路是播放音乐电路的主要执行电路,它由一个蜂鸣器,一个三极管和一个电位器组成。
蜂鸣器负责发声,三极管将电流放大,而电位器则控制流过蜂鸣器电流的大小,来达到控制音量的目的。
1.3.2 电源稳压电路:我们采用DC005电源供电,供电电压为5V。
稳压电路用来达到稳定输入电压的目的,它由一个整流二极管,两个电容和一个三端稳压器组成。
二极管和电容组成整流电路,将交流整流成直流,而三端稳压器则用来稳定电压。
1.4 元件清单元件数量晶振11.0592M 1电容30pf 2STC89C52RC 1三极管 1电容10uF 1极性电容47uf 1极性电容1000 uf 1单端稳压器 1二极管1N4007 1DC005插头插座 1蜂鸣器 1电位器10K 1电阻10K 2电阻1K 1按键 12、软件设计2.1设计思想将乐谱中的每个音符的音调及节拍变换成相应的音调参数和节拍参数,将他们做成数据表格,存放在存储器中,通过程序取出一个音符的相关参数,播放该音符,选择需要的声响时间,即可完成一个音符的播放。
该音符唱完后,接着取出下一个音符的相关参数……,如此直到播放完毕最后一个音符。
中间可根据需要将音符和音符之间插入时间延时,以产生需要的节拍,用01H或02H、03H 等等,具体根据歌曲的实际需要设置。
根据需要也可循环不停地播放整个乐曲。
利用INTO在中断中是属于最高优先级的特点,外部端口P3.2接中断0即可完成中断造成的歌曲选择——下一首的播放。
另外,对于乐曲中的休止符,一般将其音调参数设为FFH,FFH,其节拍参数与其他音符的节拍参数确定方法一致,乐曲结束用节拍参数为00H来表示。
声音输出接一个三极管,利用通断放大声音。
2.2 程序流程图2.3 音调、节拍以及编码的确定方法一般说来,单片机演奏音乐基本都是单音频率,它不包含相应幅度的谐波频率,也就是说不能像电子琴那样能奏出多种音色的声音。
因此单片机奏乐只需弄清楚两个概念即可,也就是“音调”和节拍表示一个音符唱多长的时间。
2.3.1音调的确定不同音高的乐音是用C、D、E、F、G、A、B来表示,这7个字母就是音乐的音名,它们一般依次唱成DO、RE、MI、FA、SO、LA、SI,即唱成简谱的1、2、3、4、5、6、7,相当于汉字“多来米发梭拉西”的读音,这是唱曲时乐音的发音,所以叫“音调”,即Tone。
把C、D、E、F、G、A、B这一组音的距离分成12个等份,每一个等份叫一个“半音”。
两个音之间的距离有两个“半音”,就叫“全音”。
在钢琴等键盘乐器上,C–D、D–E、F–G、G–A、A–B两音之间隔着一个黑键,他们之间的距离就是全音;E–F、B–C两音之间没有黑键相隔,它们之间的距离就是半音。
通常唱成1、2、3、4、5、6、7的音叫自然音,那些在它们的左上角加上﹟号或者b号的叫变化音。
﹟叫升记号,表示把音在原来的基础上升高半音,b叫降记音,表示在原来的基础上降低半音。
例如高音DO的频率(1046Hz)刚好是中音DO的频率(523Hz)的一倍,中音DO的频率(523Hz)刚好是低音DO频率(266 Hz)的一倍;同样的,高音RE的频率(1175Hz)刚好是中音RE的频率(587Hz)的一倍,中音RE的频率(587Hz)刚好是低音RE频率(294 Hz)的一倍。
知道了一个音符的频率后,怎样让单片机发出相应频率的声音呢?一般说来,常采用的方法就是通过单片机的定时器定时中断,将单片机上对应蜂鸣器的I/O口来回取反,或者说来回清零,置位,从而让蜂鸣器发出声音,为了让单片机发出不同频率的声音,我们只需将定时器予置不同的定时值就可实现。
那么怎样确定一个频率所对应的定时器的定时值呢?以标准音高A为例:A的频率f = 440 Hz,其对应的周期为:T = 1/ f = 1/440 =2272μs由上图可知,单片机上对应蜂鸣器的I/O口来回取反的时间应为:t = T/2 = 2272/2 = 1136μs这个时间t也就是单片机上定时器应有的中断触发时间。
一般情况下,单片机奏乐时,其定时器为工作方式1,它以振荡器的十二分频信号为计数脉冲。
设振荡器频率为f0,则定时器的予置初值由下式来确定:t = 12 *(TALL – THL)/ f0式中TALL = 216 = 65536,THL为定时器待确定的计数初值。
因此定时器的高低计数器的初值为:TH = THL / 256 = ( TALL – t* f0/12) / 256TL = THL % 256 = ( TALL – t* f0/12) %256 将t=1136μs代入上面两式(注意:计算时应将时间和频率的单位换算一致),即可求出标准音高A在单片机晶振频率f0=12Mhz,定时器在工作方式1下的定时器高低计数器的予置初值为:TH440Hz = (65536 – 1136 * 12/12) /256 = FBHTL440Hz = (65536 – 1136 * 12/12)%256 = 90H根据上面的求解方法,我们就可求出其他音调相应的计数器的予置初值。
C调各音符频率与计数值T的对照表如表4.1所示。
表2.3.1 C调各音符频率与计数值T的对照表低音频率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 1608 193 Re﹟622 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﹟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 32Si 494 1012 121 Si 988 506 61 Si 1976 30 302.3.2 节拍的确定若要构成音乐,光有音调是不够的,还需要节拍,让音乐具有旋律(固定的律动),而且可以调节各个音的快满度。
“节拍”,即Beat,简单说就是打拍子,就像我们听音乐不自主的随之拍手或跺脚。
若1拍实0.5s,则1/4 拍为0.125s。
至于1拍多少s,并没有严格规定,就像人的心跳一样,大部分人的心跳是每分钟72下,有些人快一点,有些人慢一点,只要听的悦耳就好。
音持续时间的长短即时值,一般用拍数表示。
休止符表示暂停发音。
一首音乐是由许多不同的音符组成的,而每个音符对应着不同频率,这样就可以利用不同的频率的组合,加以与拍数对应的延时,构成音乐。
了解音乐的一些基础知识,我们可知产生不同频率的音频脉冲即能产生音乐。
对于单片机来说,产生不同频率的脉冲是非常方便的,利用单片机的定时/计数器来产生这样的方波频率信号。
因此,需要弄清楚音乐中的音符和对应的频率,以及单片机定时计数的关系。
表2.3.2节拍与节拍码对照节拍码节拍数节拍码节拍数1 1/4拍 1 1/8拍2 2/4拍 2 1/4拍3 3/4拍 3 3/8拍4 1拍 4 2/1拍5 1又1/4拍 5 5/8拍6 1又1/2拍 6 3/4拍8 2拍8 1拍A 2又1/2拍 A 1又1/4拍C 3拍 C 1又1/2拍F 3又3/4拍每个音符使用1个字节,字节的高4位代表音符的高低,低4位代表音符的节拍,图5.2为节拍码的对照。
如果1拍为0.4秒,1/4拍实0.1秒,只要设定延迟时间就可求得节拍的时间。
假设1/4拍为1DELAY,则1拍应为4DELAY,以此类推。
所以只要求得1/4拍的DELAY时间,其余的节拍就是它的倍数,如图5.3为1/4和1/8节拍的时间设定。
表2.3.2 1/4和1/8节拍的时间设定曲调值DELAY 曲调值DELAY调4/4 125毫秒调4/4 62毫秒调3/4 187毫秒调3/4 94毫秒调2/4 250毫秒调2/4 125毫秒2.3.3 编码do re mi fa so la si分别编码为1~7,重音do编为8,重音re编为9,停顿编为0。
播放长度以十六分音符为单位(在本程序中为165ms),一拍即四分音符等于4个十六分音符,编为4,其它的播放时间以此类推。
音调作为编码的高4位,而播放时间作为低4位,如此音调和节拍就构成了一个编码。
以0xff作为曲谱的结束标志。
举例1:音调do,发音长度为两拍,即二分音符,将其编码为0x18。
举例2:音调re,发音长度为半拍,即八分音符,将其编码为0x22歌曲播放的设计。