蜂鸣器是一种一体化的电子讯响设备,主要分为压电式蜂鸣器和电磁式蜂鸣器两种类型,他广泛应用于计算机,
打印机,复印机,报警器,电话机等电子设备中做报警器件。单片机上使用的蜂鸣器一般都是电磁式无源蜂鸣
器。如图:
它由振荡器,电磁线圈,磁场,振动膜片,外壳等组成。接通电源后,振荡器产生的音频信号电流通过电磁线圈,
使电磁线圈产生磁场,振动膜片在电磁线圈和磁铁的共同作用下,周期性的振动发声。
这是蜂鸣器的原理图,PNP型三极管,这个图里是一个典型的开关管,E极接VCC,B极接一个限流电阻,三极管
的B极不能承受大的电流所以加上一个限流电阻,电流从VCC流向E极,如果B极是低电平则导通,电流从E极流过
C极到达蜂鸣器。P3_4与蜂鸣器之间通过跳线连接,所以如果P3_4为低电平就可以驱动蜂鸣器想起来。
#include
sbit p3_4 = P3^4;
void delay(){
int i,j;
for(i = 0; i < 0xff; i++)
for(j = 0; j < 0xff; j++)
;
}
void main(){
int i;
for(i = 0; i < 10; i++){
p3_4 = 0;
delay();
p3_4 = 1;
}
}
声音的产生
声音的产生是一种音频振动的效果,振动的频率高,则为高音;振动的频率低,则为低音;音;一般音响电
路是用正弦波信号驱动喇叭。在数字电路里,则是用数字脉冲信号驱动喇叭从而产生声音。如果声音的频率相同
,人类的耳朵很难区分出哪个脉冲信号产生的声音,哪个正弦波信号产生的声音,P0口无上拉电阻。
在蜂鸣器中,声音是由蜂鸣器的振动产生的。蜂鸣器就像一个电磁铁,电流流过它既可产生磁性,这样蜂鸣
器里发生的膜片将被吸住;电流消时,膜片将被放开。若要产生频率为f的脉冲,则要在T时间内(其中T=1/f),
进行吸放各一次,换言之,产生磁性,消除磁性的时间各为T/2,成为半周期。例如要产生1KHZ的频率,则半周期
为0.5ms,所以P1.0所送出的信号一个周期中,其中0.5ms为高电平,另外0.5ms为低电平。切换速度越快,声音
越高;反之,切换速度越慢,声音越低。除了控制发声的高低外,若还能控制发生的时间长短,这样就会有节奏感
,也就形成 了“音乐”的雏形。DO,RE,MI,FA,SO,LA,SI,DO分别代表某一个频率的声音,我们称之为“音调”
。“节拍”即Beat,简单的说就是打拍子。以生日快乐简谱为例,C3/4代表为C调,C调音节表包括3个音阶(低音
,中音,高音),每个每个音阶为8个音度,其中细 分为12个半音(即DO,DO#,RE,RE#,MI,FA,FA#,SO,SO#,
LA,LA#,SI)。[page]
单片机如何输出频率:
得到600HZ的频率:
#include
sbit p = P3^4;
void main(){
p = 1;
EA = 1;
ET0 = 1;
TMOD = 0x01;
TH0 = (65536-833)/256;
TL0 = (65536-833)%256;
TR0 = 1;
while(1);
}
void time0() interrupt 1{
p = ~p;
TH0 = (65536-833)/256;
TL0 = (65536-833)%256;
}
内循环一次8.3us
void delay8us(unsigned char x){
unsigned char i,j;
for(i = 0; i < x; i++)
for(j = 0; j < 1; j++)
;
}
音符频率及定时器初值对照表:
4*4电子琴程序的实现:
#include
#define uchar unsigned char
#define uint unsigned int
uint DATE,i;
sbit buzz = P3^4;
sbit L0 = P0^0;
sbit L1 = P0^1;
sbit L2 = P0^2;
sbit L3 = P0^3;
sbit H0 = P0^4;
sbit H1 = P0^5;
sbit H2 = P0^6;
sbit H3 = P0^7;
uchar TH0_DATA = 0;
uchar TL0_DATA = 0;
uchar code qin[] = {262,277,293,329,349,392,440,494};
[page]
uint key(){
P0 = 0xfe;
if(H0 == 0)return 13;
if(H1 == 0)return 9;
if(H2 == 0)return 5;
if(H3 == 0)return 1;
P0 = 0xfd;
if(H0 == 0)return 14;
if(H1 == 0)return 10;
if(H2 == 0)return 6;
if(H3 == 0)return 2;
P0 = 0xfb;
if(H0 == 0)return 15;
if(H1 == 0)return 11;
if(H2 == 0)return 7;
if(H3 == 0)return 3;
P0 = 0xf7;
if(H0 == 0)return 16;
if(H1 == 0)return 12;
if(H2 == 0)return 8;
if(H3 == 0)return 4;
return 0;
}
void main(){
EA = 1;
ET0 = 1;
TMOD = 0x01;
TR0 = 0;
while(1){
i = key();
if(i == 0){
TR0 = 0;
buzz = 1;
}
else{
if(i > 8){
DATE = 65536 - (50000/(qin[i-9]*2))*10;
TH0_DATA = DATE >> 8;
TL0_DATA = DATE & 0x00ff;
}
else{
DATE = 65536 - (50000/qin[i-1])*10;
TH0_DATA = DATE >> 8;
TL0_DATA = DATE & 0x00ff;
}
TR0 = 1;
}
}
}
void time0() interrupt 1{
buzz = ~buzz;
TH0 = TH0_DATA;
TL0 = TL0_DATA;
}
由于我使用的板子自带的有源蜂鸣器,所以声音很难听,哈哈。
关键字:51单片机 蜂鸣器 讯响设备
引用地址:51单片机-蜂鸣器
打印机,复印机,报警器,电话机等电子设备中做报警器件。单片机上使用的蜂鸣器一般都是电磁式无源蜂鸣
器。如图:
它由振荡器,电磁线圈,磁场,振动膜片,外壳等组成。接通电源后,振荡器产生的音频信号电流通过电磁线圈,
使电磁线圈产生磁场,振动膜片在电磁线圈和磁铁的共同作用下,周期性的振动发声。
这是蜂鸣器的原理图,PNP型三极管,这个图里是一个典型的开关管,E极接VCC,B极接一个限流电阻,三极管
的B极不能承受大的电流所以加上一个限流电阻,电流从VCC流向E极,如果B极是低电平则导通,电流从E极流过
C极到达蜂鸣器。P3_4与蜂鸣器之间通过跳线连接,所以如果P3_4为低电平就可以驱动蜂鸣器想起来。
#include
sbit p3_4 = P3^4;
void delay(){
int i,j;
for(i = 0; i < 0xff; i++)
for(j = 0; j < 0xff; j++)
;
}
void main(){
int i;
for(i = 0; i < 10; i++){
p3_4 = 0;
delay();
p3_4 = 1;
}
}
声音的产生
声音的产生是一种音频振动的效果,振动的频率高,则为高音;振动的频率低,则为低音;音;一般音响电
路是用正弦波信号驱动喇叭。在数字电路里,则是用数字脉冲信号驱动喇叭从而产生声音。如果声音的频率相同
,人类的耳朵很难区分出哪个脉冲信号产生的声音,哪个正弦波信号产生的声音,P0口无上拉电阻。
在蜂鸣器中,声音是由蜂鸣器的振动产生的。蜂鸣器就像一个电磁铁,电流流过它既可产生磁性,这样蜂鸣
器里发生的膜片将被吸住;电流消时,膜片将被放开。若要产生频率为f的脉冲,则要在T时间内(其中T=1/f),
进行吸放各一次,换言之,产生磁性,消除磁性的时间各为T/2,成为半周期。例如要产生1KHZ的频率,则半周期
为0.5ms,所以P1.0所送出的信号一个周期中,其中0.5ms为高电平,另外0.5ms为低电平。切换速度越快,声音
越高;反之,切换速度越慢,声音越低。除了控制发声的高低外,若还能控制发生的时间长短,这样就会有节奏感
,也就形成 了“音乐”的雏形。DO,RE,MI,FA,SO,LA,SI,DO分别代表某一个频率的声音,我们称之为“音调”
。“节拍”即Beat,简单的说就是打拍子。以生日快乐简谱为例,C3/4代表为C调,C调音节表包括3个音阶(低音
,中音,高音),每个每个音阶为8个音度,其中细 分为12个半音(即DO,DO#,RE,RE#,MI,FA,FA#,SO,SO#,
LA,LA#,SI)。[page]
单片机如何输出频率:
得到600HZ的频率:
#include
sbit p = P3^4;
void main(){
p = 1;
EA = 1;
ET0 = 1;
TMOD = 0x01;
TH0 = (65536-833)/256;
TL0 = (65536-833)%256;
TR0 = 1;
while(1);
}
void time0() interrupt 1{
p = ~p;
TH0 = (65536-833)/256;
TL0 = (65536-833)%256;
}
内循环一次8.3us
void delay8us(unsigned char x){
unsigned char i,j;
for(i = 0; i < x; i++)
for(j = 0; j < 1; j++)
;
}
音符频率及定时器初值对照表:
4*4电子琴程序的实现:
#include
#define uchar unsigned char
#define uint unsigned int
uint DATE,i;
sbit buzz = P3^4;
sbit L0 = P0^0;
sbit L1 = P0^1;
sbit L2 = P0^2;
sbit L3 = P0^3;
sbit H0 = P0^4;
sbit H1 = P0^5;
sbit H2 = P0^6;
sbit H3 = P0^7;
uchar TH0_DATA = 0;
uchar TL0_DATA = 0;
uchar code qin[] = {262,277,293,329,349,392,440,494};
[page]
uint key(){
P0 = 0xfe;
if(H0 == 0)return 13;
if(H1 == 0)return 9;
if(H2 == 0)return 5;
if(H3 == 0)return 1;
P0 = 0xfd;
if(H0 == 0)return 14;
if(H1 == 0)return 10;
if(H2 == 0)return 6;
if(H3 == 0)return 2;
P0 = 0xfb;
if(H0 == 0)return 15;
if(H1 == 0)return 11;
if(H2 == 0)return 7;
if(H3 == 0)return 3;
P0 = 0xf7;
if(H0 == 0)return 16;
if(H1 == 0)return 12;
if(H2 == 0)return 8;
if(H3 == 0)return 4;
return 0;
}
void main(){
EA = 1;
ET0 = 1;
TMOD = 0x01;
TR0 = 0;
while(1){
i = key();
if(i == 0){
TR0 = 0;
buzz = 1;
}
else{
if(i > 8){
DATE = 65536 - (50000/(qin[i-9]*2))*10;
TH0_DATA = DATE >> 8;
TL0_DATA = DATE & 0x00ff;
}
else{
DATE = 65536 - (50000/qin[i-1])*10;
TH0_DATA = DATE >> 8;
TL0_DATA = DATE & 0x00ff;
}
TR0 = 1;
}
}
}
void time0() interrupt 1{
buzz = ~buzz;
TH0 = TH0_DATA;
TL0 = TL0_DATA;
}
由于我使用的板子自带的有源蜂鸣器,所以声音很难听,哈哈。
推荐阅读最新更新时间:2024-03-16 13:57
【51单片机实验】4-单片机定时/计数器的应用
一、实验目的 1.掌握51单片机定时/计数器的应用设计 2.掌握查询方式和中断方式定时的设计和编程 3.熟悉中断应用程序的调试以及软硬件联合调试的方法 二、实验设备 1.微机一台,Keil C集成开发环境 2.DP-51PRO.NET综合实验箱 3.Proteus仿真软件 注:本实验报告采用的单片机为AT89C51,1、2题晶振频率为1MHz,3题晶振为12MHz 三、实验内容 1、51单片机的P1.0接一个发光二极管,定时/计数器T0的方式1产生500ms的定时,在P1.0上输出周期为1s的方波。设单片机的晶振频率为1MHz。(采用查询方式延时实现定时功能) 程序及必要的注释: /*采用查询方
[单片机]
单片机第一步——51单片机
俗话说:“天才第一步,XX纸尿裤。”哈哈!扯远了。不过,我们今天说的,确实可能是绝大多数嵌入式工程师或者电子爱好者接触的第一款单片机——51单片机。 图为51单片机驱动LED点阵的电子制作 51单片机只是爱好者们的一种“爱称”,51单片机指的是所有搭载可执行INTEL 8031指令系统的MCU的单片机。这里,我们需要澄清单片机实际使用方面的一个产品概念,MCS-51单片机是美国INTEL 公司于1980年推出的产品,典型产品有 8031(内部没有 程序存储器 ,实际使用方面已经被市场淘汰)、8051(芯片采用HMOS,功耗是630mW,是89C51的5倍,实际使用方面已经被市场淘汰)和8751等通用产品,一直到现在, M
[单片机]
51单片机控制的数字温度计
总览部分 MCU部分 显示部分 开仿真以后实时显示温度 因为这个程序比较简单,我就直接上代码了,有不明白的请看我以前的文章,谢谢哦! 参考代码如下: #include “reg51.h” char disp ={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40}; char disp_dot ={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef,0xc0}; sbit DQ = P1^3; //定义通信端口 //晶振12MHz void delay_18B20(unsigned int i) {
[单片机]
基于51单片机的无线温湿度控制系统
发射_DHT11程序 //宏定义 #define uchar unsigned char #define uint unsigned int //头函数 #include reg51.h #include intrins.h //无线模块 #include api.h #include nRF24L01P.h #include DHT11.h //LED 管脚定义 sbit TXLED_R=P1^3; sbit RXLED_Y=P1^5; //主机询问命令 uchar CMD ={0xaa,0xbb,0xcc,0xdd}; //主函数 void main() { TXLED_R=0;
[单片机]
51单片机+DHT11温控程序-可设置温度值
基于51单片机的温湿度测量控制程序,使用DHT11数字传感器,用1602液晶屏显示,按键定义如下: sbit key_1=P0^1; //确定按键 sbit key_2=P0^2; //按键加 sbit key_3=P0^3; // 按键减 本程序中用到的头文件 12c5a.h下载: http://www.51hei.com/f/12c5a.rar #include 12c5a.H #include intrins.h unsigned char code num ={ 0123456789 };//显示字符存储 unsigned char code start_char ={ Loading.... }; unsigned c
[单片机]
四种扩展51单片机中断的方法总结
简介:MCS—51系列单片机内部只有两个外部中断源输入端,当外部中断源多于两个时,就必须进行扩展,下面介绍几种简单的扩展方法。 一、采用硬件请求和软件查询的方法: 这种方法是:把各个中断源通过硬件“或非(高有效,如CD4002)”(与,低有效)门引入到单片机外部中断源输入端(INT0或INT1),同时再把外部中断源送到单片机的某个输入输出端口,这样当外部中断时,通过“或非”(与)门引起单片机中断,在中断服务程序中再通过软件查询,进而转相应的中断服务程序。 显然,这种方法的中断优先级取决于软件查询的次序。其硬件连接和软件编程如下: Void zhongduan (void) interrupt 0 using 3 //中
[单片机]
51单片机中使用ucos ii的优缺点
引言 早在20世纪60年代,就已经有人开始研究和开发嵌入式操作系统。但直到最近,它才在国内被越来越多的提及,在通信、电子、自动化等需要实时处理的领域所曰益显现的重要性吸引了人们越来越多的注意力。但是,人们所谈论的往往是一些著名的商业内核,诸如VxWorks、PSOS等。这些商业内核性能优越,但价格昂贵,主要用于16位和32位处理器中,针对国内大部分用户使用的51系列8位单片机,可以选择免费的ucos ii。 ucos ii的特点 1.ucos ii是由Labrosse先生编写的一个开放式内核,最主要的特点就是源码公开。这一点对于用户来说可谓利弊各半,好处在于,一方面它是免费的,另一方面用户可以根据自己的需要对它进行修改。
[单片机]
MCS-51单片机中软时钟设计的优化方法
0 引言 随着微电脑应用的普及,以MCS-51单片机为核心的微机测控系统已随处可见。为满足用户要求,这些系统通常都具有数码显示时钟的功能。由于MCS-51内部包含2个定时计数器,通过采用将其中一个定时计数器用于软时钟设计的方法,可以大大节省硬件开销。本文提出了如何提高软时钟的定时精度,以及在软时钟存在的情况下,如何提高以MCS-51单片机为核心的测控系统的设计质量的方法。 1 MCS-51单片机内部定时计数器概述 MCS-51单片机内部包含2个定时计数器T0和T1,它们都是16位的加法计数器,既可用于定时,也可用于计数,在用于定时的情况下,计数脉冲由内部提供,因此计数速率固定为CPU振荡频率的1/12;在用于计数的情
[单片机]
小广播
热门活动
换一批
更多
设计资源 培训 开发板 精华推荐
最新单片机文章
更多精选电路图
更多热门文章
更多每日新闻
更多往期活动
- 【技术直播】 MPS、Nexperia、泰克专家齐聚,畅谈新能源汽车动力设计注意要点
- 泰克移动多媒体总线系列专题来袭~《HDMI2.0规范测试方案》下载有礼!
- 【免费租用】Xilinx Spartan-6 FPGA 嵌入式套件!
- 【直播】恩智浦Thread/BLE双模技术讲座
- 有奖直播:万物互联 -世健公司携手Microchip专家,共同探讨IoT解决方案
- 安全的革新,全新的验证方式 下载富士通 《频谱验证解决方案 》白皮书 好礼送!
- 有奖话题:聊一聊论坛里帮助过你的网友!
- Digi-Key KOL视频来袭~资深算法工程师畅聊图像处理秘诀
- 2017 EEWORLD爆款直播回放云集,写评论抢楼赢礼!
11月13日历史上的今天
厂商技术中心