-
2021-05-19 17:09:26
单片机可以控制蜂鸣器发声音
蜂鸣器是非常常见的发音元器,音乐卡、报警装置、电子琴、各种小家电等都会用到。单片机的PWM功能可以设置输出不同频率的信号,所以我们可以利用单片机的PWM控制三极管的通断来推动蜂鸣器发声。
当然,如果单纯控制方波信号的通断,只可以得到单调的“嘀”、“嘀”声。想要得到美妙的音乐,我们还需要控制音调、频率的变化,还有声音的强弱。把蜂鸣器的驱动电路改进一下,用三个三极管和两个单片机的IO来控制蜂鸣器。
BZ_PWM:用于控制蜂鸣器的发音频率
BZ_CONTROL:用于控制蜂鸣器的供电时间
当BZ_CONTROL为低电平时,三极管Q2、Q3是截止的,蜂鸣器没有供电,不会发声。
当BZ_CONTROL为高电平时,三极管Q2、Q3是导通的,蜂鸣器是否发声由BZ_PWM决定。
电路中的电容C10很关键,因为电容C10有储能的效果,BZ_CONTROL转为低电平后,蜂鸣器的供电还可以由电容C10提供,电容电量减少,音量就会逐渐减小,形成蜂鸣声渐隐的和弦音效果。
如果想实现变调的效果,就可以通过短时间内切换发出几种不同频率的蜂鸣声来实现。
单片机控制蜂鸣器演奏音阶实例
以4KHz频率的蜂鸣器为例,首先我们先定义Tf、Tv、F三个参数
Tf:驱动频率给定持续时间,单位为毫秒(ms),BZ_PWM引脚控制
Tv:蜂鸣器供电持续时间,单位为毫秒(ms),BZ_CONTROL引脚控制
F:单片机输出PWM频率,单位为KHz,BZ_PWM引脚控制
单声和弦音:短暂鸣响后音量渐隐
F=4.0,Tv=100,Tf=300,因为Tf=300ms,蜂鸣器响的时间为300ms,但蜂鸣器供电只有100ms,所以,前100ms是正常发音,后200ms为音量渐隐的效果。
两声错误提示和弦音:二升调,按音调分2个阶段
F=3.8,Tv=200,Tf=200
F=4.0,Tv=200,Tf=200
因为前300ms频率为3.8KHz,后200ms频率为4KHz,所以听起来会有升调的效果。
开机和弦音:三升调,按音调分3个阶段
F=3.8,Tv=200,Tf=200
F=4.0,Tv=200,Tf=200
F=4.2,Tv=200,Tf=1500
因为三声频率从3.8KHz升到4KHz再到4.2KHz,频率连续升高,最后一声的Tf时间较长,还有音量渐隐的效果。
关机和弦音:三降调,按音调分3个阶段
F=4.2,Tv=200,Tf=200
F=4.0,Tv=200,Tf=200
F=3.8,Tv=200,Tf=1500
因为三声频率从4.2KHz升到4KHz再到3.8KHz,频率连续降低,最后一声的Tf时间较长,还有音量渐隐的效果。
另外音乐是由Do,Re,Mi,Fa,So,La,Xi,Do几个音调组成的,电子琴上的按键对应着不同的音频频率,只要通过单片机的程序控制发声的频率和时间就演奏了哦!
更多相关内容 -
基于c51单片机编写简单蜂鸣器音乐程序的方法
2018-04-07 17:23:07控制脉冲形成的代码电平取反过程中含有相应的延时二控制脉冲持续时间的代码持 续的时间时候常常和音乐的拍子有相关性。 最后在主程序中运行子程序通过读rom里面的数组来达到连续播放各种不同音调的音 ... -
C51单片机控制蜂鸣器
2022-02-07 23:34:25单片机控制蜂鸣器发声的基本原理和方法:只需对驱动口输出驱动电平并通过放大电路放大驱动电流就能使蜂鸣器发出声音。改变引脚的频率,就可以调整蜂鸣器的音调,产生各种不同的声音。 同时改变输出电平的高低电平...在单片机应用上,蜂鸣器可以作为报警信号或者提示信号
单片机控制蜂鸣器发声的基本原理和方法:只需对驱动口输出驱动电平并通过放大电路放大驱动电流就能使蜂鸣器发出声音。改变引脚的频率,就可以调整蜂鸣器的音调,产生各种不同的声音。
同时改变输出电平的高低电平占空比,则可以控制蜂鸣器的声音大小。
开发板模块原理图
以下为驱动蜂鸣器的程序:
#include "reg52.h" //此文件中定义了单片机的一些特殊功能寄存器
typedef unsigned int u16; //对数据类型进行声明定义
typedef unsigned char u8;
sbit beep=P1^5;//定义蜂鸣器的引脚
void delay(u16 i)
{
while(i--);
}void Beep()
{
beep=~beep;//进行高低电平的转换
delay(100);//延时
}void main()
{
while(1)
{
Beep();
}
}
由开发板按键K1控制蜂鸣器声响,K2控制响停:源码如下
#include "reg52.h" //此文件中定义了单片机的一些特殊功能寄存器
typedef unsigned int u16; //对数据类型进行声明定义
typedef unsigned char u8;
sbit k1=P3^1; //定义按键连接
sbit k2=P3^0;
sbit beep=P1^5; //定义蜂鸣器连接
u8 start=0;
void delay(u16 i) //延时函数
{ while(i--); }
void sound()
{ u8 i=100;
while(i--)
{ beep=~beep;
delay(100);
}
}
void keypros() //检测按键函数
{ if(k1==0) //如果K1按下(开始)
{ delay(1000);
if(k1==0)
start=1;
while(!k1); //等待键释放
}
if(k2==0) //停止
{ delay(1000);
if(k2==0)
start=0; //建立开始标志
while(!k2); //等待键释放
}
}
void main()
{ while(1)
{ keypros();
if(start==1)
sound();
else
beep=1; //如果按下K2键(start=0),蜂鸣器停响
}
}
-
51单片机用按键控制蜂鸣器发出do re mi fa...的声音,
2021-05-20 06:11:48满意答案0fhk92017.12.30采纳率:53%等级:7已帮助:1961人T0HEQU30HT0LEQU31HORG0000HLJMPMAINORG000BHLJMPT0ISRORG0030HMAIN:MOVSP,#5FHMOVTMOD,#01HSETBET0SETBEALOOP:MOVDPTR,#...控制高中低音区MOVR1,#0AN...满意答案
0fhk9
2017.12.30
采纳率:53% 等级:7
已帮助:1961人
T0HEQU 30H
T0L EQU 31H
ORG 0000H
LJMP MAIN
ORG 000BH
LJMP T0ISR
ORG 0030H
MAIN:
MOV SP,#5FH
MOV TMOD,#01H
SETB ET0
SETB EA
LOOP:
MOV DPTR,#FREQ
MOV A,P2;控制高中低音区
MOV R1,#0
ANL A,#03H
JB ACC.0,LOOP01
MOV R1,#14
SJMP LOOP0
LOOP01:
JB ACC.1,LOOP0
MOV R1,#28
LOOP0:
JB P0.0,LOOP1;控制音频1234567
MOV A,R1
MOVC A,@A+DPTR
MOV T0H,A
INC DPTR
MOV A,R1
MOVC A,@A+DPTR
MOV T0L,A
LJMP LOOP
LOOP1:
JB P0.1,LOOP2
MOV A,R1
ADD A,#2
MOVC A,@A+DPTR
MOV T0H,A
INC DPTR
MOV A,R1
ADD A,#2
MOVC A,@A+DPTR
MOV T0L,A
LJMP LOOP
LOOP2:
JB P0.2,LOOP3
MOV A,R1
ADD A,#4
MOVC A,@A+DPTR
MOV T0H,A
INC DPTR
MOV A,R1
ADD A,#4
MOVC A,@A+DPTR
MOV T0L,A
LJMP LOOP
LOOP3:
JB P0.3,LOOP4
MOV A,R1
ADD A,#6
MOVC A,@A+DPTR
MOV T0H,A
INC DPTR
MOV A,R1
ADD A,#6
MOVC A,@A+DPTR
MOV T0L,A
LJMP LOOP
LOOP4:
JB P0.4,LOOP5
MOV A,R1
ADD A,#8
MOVC A,@A+DPTR
MOV T0H,A
INC DPTR
MOV A,R1
ADD A,#8
MOVC A,@A+DPTR
MOV T0L,A
LJMP LOOP
LOOP5:
JB P0.5,LOOP6
MOV A,R1
ADD A,#10
MOVC A,@A+DPTR
MOV T0H,A
INC DPTR
MOV A,R1
ADD A,#10
MOVC A,@A+DPTR
MOV T0L,A
LJMP LOOP
LOOP6:
JB P0.6,LOOP7
MOV A,R1
ADD A,#12
MOVC A,@A+DPTR
MOV T0H,A
INC DPTR
MOV A,R1
ADD A,#12
MOVC A,@A+DPTR
MOV T0L,A
LJMP LOOP
LOOP7:
CLR TR0
LJMP LOOP
;-----------------------------
T0ISR:
CLR TR0
MOV TH0,T0H
MOV TL0,T0L
SETB TR0
CPL P3.0
RETI
;-----------------------------
FREQ:
DB 0F2H,03DH;低音1
DB 0F3H,0BDH;低音2
DB 0F5H,014H;低音3
DB 0F5H,0B1H;低音4
DB 0F6H,0D0H;低音5
DB 0F7H,0D1H;低音6
DB 0F8H,0B5H;低音7
DB 0F9H,01EH;中音1
DB 0F9H,0DEH;中音2
DB 0FAH,08AH;中音3
DB 0FAH,0D8H;中音4
DB 0FBH,068H;中音5
DB 0FBH,0E8H;中音6
DB 0FCH,05AH;中音7
DB 0FCH,08FH;高音1
DB 0FCH,0EFH;高音2
DB 0FDH,045H;高音3
DB 0FDH,06CH;高音4
DB 0FDH,0B4H;高音5
DB 0FDH,0F4H;高音6
DB 0FEH,029H;高音7
;-----------------------------
END追问: 能不能不用汇编语言呢,我还没学过,看不懂,可不可以用c语言呢?谢谢
00分享举报
-
c51单片机学习笔记-无源蜂鸣器实验
2022-01-07 14:16:24目的:让蜂鸣器发出声音,一段时间后再关闭 方法:让P2.5管脚输出一定频率的脉冲信号(高低电平)控制无源蜂鸣器。 编译软件:keil5 过程: (1)首先将 51 单片机的头文件包含进来, 然后使用 sbit 关键字来...目的:让蜂鸣器发出声音,一段时间后再关闭
方法:让P2.5管脚输出一定频率的脉冲信号(高低电平)控制无源蜂鸣器。
编译软件:keil5
过程:
(1)首先将 51 单片机的头文件包含进来, 然后使用 sbit 关键字来定义 P2.5 管脚,定义好后即可使用 BEEP 来替代 P2.5 口的操作。
sbit BEEP=P2^5;
(2)主函数直接进入 while 循环,在循环内再次套用了一 个 while 循环,只不过这里并非死循环,而是通过变量 i 值来决定何时退出,i 值初始化为 2000,即该循环会执行 2000 次,此循环内不断对 BEEP 取反,然后延时一定时间,即P2.5 间隔一定时间输出高低电平,这样就会产生脉冲信号控制蜂鸣器发出声音,当 i 值递减到 0 时则退出 while 循环,然后将 i 值清零,且将 BEEP 输出 0。
void main() { u16 i=2000; while(1) { while(i--) { BEEP=!BEEP; delay_10us(100); } i=0; BEEP=0; } }
(3)编译整体代码无误得到hex.文件
(4)通过CH340驱动烧录hex.文件到单片机开发板
(5)通过排线连接P25与J7端口观察实验现象
c51单片机学习笔记-无源蜂鸣器实验
(6)补:若修改变量 i 的值可以改变蜂鸣器发声时间。 若要改变音调可以修改延时时间,但要注意频率不能太大或者太小。若要改变音量,可以修改 BEEP 输出高电平时间
BEEP=!BEEP; delay_10us(100); BEEP=0; delay_10us(10); BEEP=1; delay_10us(190);
(7)实验现象
c51单片机学习笔记-无源蜂鸣器实验(调整音量和时间)
-
51单片机蜂鸣器代码
2019-04-12 20:11:3351单片机蜂鸣器代码 用于最简单的51单片机基础知识 -
单片机C51-蜂鸣器1 带开关控制 音调控制 定时控制
2012-03-18 06:27:08单片机C51学习 单片机C51-蜂鸣器1 带开关控制 音调控制 定时控制 -
单片机C51-蜂鸣器1 带开关控制 音调控制
2012-03-18 06:25:57单片机C51学习 单片机C51-蜂鸣器1 带开关控制 音调控制 -
C语言控制51单片机蜂鸣器播放音乐代码.rar
2019-07-09 16:38:10C语言控制51单片机蜂鸣器播放音乐,另附单片机演奏音乐时音调和节拍的确定方法。压缩包内有两个使用51单片机播放音乐的实验程序源代码,供初学者参考。 -
C51 蜂鸣器编程
2021-01-29 16:26:34改变单片机引脚输出波形的频率,就可以调整控制蜂鸣器音调,产生各种不同音色、音调的声音。 改变输出电平的高低电平占空比(改变高电平比上整个周期的时间),则可以控制蜂鸣器的声音大小 三、代码实现 -
51单片机--蜂鸣器
2022-03-13 16:07:23#include "reg52.h" typedef unsigned char u8; typedef unsigned int u16; sbit BEEP=P2^5;... //i值越大(也就是循环次数越多),蜂鸣器响的时间越久,不然可能声音滴一下就没了 while(1) { while. -
蜂鸣器播放音乐-小星星亮晶晶.rar
2020-03-06 09:28:03资源是51单片机使用蜂鸣器来播放音乐的实验例程,通过PWM信号来控制蜂鸣器,改变PWM的频率,可以改变蜂鸣器的发声音调,从而可以播放音乐。 -
【学习心得】蜂鸣器播放音乐
2021-01-06 12:04:15我了解到,蜂鸣器可以根据频率改变发出声音的音调,具体音符对应频率如下: 编号 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 音符 低1 低2 低3 低4 低5 低6 低7 中1 中2 中3 中4 中5 中6 中7 高... -
51单片机蜂鸣器
2022-01-08 11:52:0951单片机、蜂鸣器 -
Step2:【C51】蜂鸣器发声实验
2021-07-29 20:01:04Step2Step2Step2 :【C51】蜂鸣器发声实验 蜂鸣器简介 ①按驱动方式的不同。可分为有源蜂鸣器和无源蜂鸣器。 有源蜂鸣器内部有振荡电路,能将恒定的直流电转化成一定频率的脉冲信号,从而引起磁场交变,带动振动膜片... -
51单片机点亮LED和使用定时器中断控制蜂鸣器发声
2020-05-05 12:09:47初学51单片机第一个实验一般都是以点亮LED灯开始,以下是使用Proteus仿真软件的实验效果。 实验需要仿真仪器: 示波器、LED、电压表、蜂鸣器、AT89C51 实验电路图: 实验代码: #include <reg52.h&... -
51单片机驱动蜂鸣器发声教程(扫盲)
2019-03-25 14:27:44蜂鸣器发声原理是电流通过电磁线圈,使电磁线圈产生磁场来驱动振动膜发声的,因此需要一定的电流才能驱动它,单片机IO引脚输出的电流较小,单片机输出的TTL电平基本上驱动不了蜂鸣器,因此需要增加一个电流放大的... -
基于51单片机蜂鸣器发声的C语言程序
2021-05-21 03:37:57《基于51单片机蜂鸣器发声的C语言程序》由会员分享,可在线阅读,更多相关《基于51单片机蜂鸣器发声的C语言程序(2页珍藏版)》请在人人文库网上搜索。1、按键发音/* 名称:按键发音说明:按下不同的按键会是SOUNDER... -
C51按键音调
2015-06-29 05:55:33C51单片机 通过定时器产生特定方波,然后按下矩阵键盘使蜂鸣器发出不同音调 -
51单片机(二十七)—— 蜂鸣器播放音乐
2020-03-06 10:19:07蜂鸣器是电路中经常使用的发声器件,我们一般使用蜂鸣器发出“嘀嘀”的声音,用它作为提示音。有没有想过用蜂鸣器还可以播放音乐呢? 本文使用蜂鸣器来播放音乐。为了深入了解此实验的原理,先介绍一下音乐的基础... -
51单片机入入入入入入门小练习之——矩阵键盘&蜂鸣器
2022-02-16 14:56:16对于矩阵键盘,我们通常采用行列扫描的方法实现按键检测。相较于独立按键的一对一按键检测,行列扫描法的意义在于节省更多的引脚,4*4键盘只需4*2=8个信号端口,5*5键盘只需5*2=10个端口。 -
51单片机之蜂鸣器为什么不响
2021-12-16 15:55:58在初学单片机的时候,我们会去玩单片机,玩蜂鸣器。初学者玩蜂鸣器的时候会直接把蜂鸣器接上5V...2、直接接了单片机引脚,单片机引脚的输出能力不足,很难驱动蜂鸣器,一般都是接一个PNP三极管来驱动蜂鸣器。 注:如 -
【STC单片机学习】第十一课:蜂鸣器
2020-11-16 13:27:541.11.3.用定时器控制蜂鸣器音调 1.11.4.蜂鸣器发出滴滴声 1.11.5.让蜂鸣器唱歌1 1.11.6.让蜂鸣器唱歌2 第二部分、章节介绍 1.11.1.蜂鸣器的原理 本节从工作原理、分类上讲解了无源蜂鸣器和有源蜂鸣器2种的... -
51单片机简易MP3程序驱动蜂鸣器播放
2021-09-09 20:15:5051单片机简易MP3程序 蜂鸣器播放 新手入门课程,来一曲《敢问路在何方》 Proteus仿真 AT89C51 简易电路搭建 元件 实例代码 #include <reg52.h> sbit beep = P2^3; unsigned char timer0H, timer0L, time; ... -
C51音乐播放器_蜂鸣器
2013-12-20 16:09:16基于C51的音乐播放器代码,调制蜂鸣器音调和播放速率来实现简单的音乐播放。 -
51单片机播放音乐(一):蜂鸣器
2018-11-20 21:38:52无源蜂鸣器需要自己控制输入变化的信号才能发声,最简单的就是输入方波信号了,通过单片机控制方波的频率就能发出不同音调的声音 这是发出50%占空比方波的代码: int i; while (1) { for (i =... -
4.0 蜂鸣器 _ [AT89C51/2] [从零开始的单片机]
2022-03-22 13:49:08开发板上面是压电式蜂鸣器,是无源蜂鸣器(无振荡电路),因此可以手动改变蜂鸣器的频率产生不同音色、音调,而改变高低电平占比可以改变声音大小。 硬件设计 压电式蜂鸣器需要的电压不可能由单片机的I/O口提供,... -
51单片机自学笔记(五)——蜂鸣器
2020-08-27 22:40:10蜂鸣器 -
单片机——蜂鸣器(生日快乐歌)
2019-02-04 09:46:22改变单片机引脚输出波形的频率,就可以调整控制蜂鸣器音调,产生各种不同音色、音调的声音。 改变输出电平的高低电平占空比,(占空比是指一个周期内高电平所占的时间)则可以控制蜂鸣器的声音大小。 ...