学习目标:
1.蜂鸣器的原理
2.蜂鸣器代码
3.定时器控制蜂鸣器
4.定时器发出滴滴声
学习内容:
1)蜂器的原理
无源蜂鸣器原理
( 1 ) 早期的蜂鸣器都是无源的
( 2 ) 内部结构和材料
( 3 ) 发声原理
( 4 ) 控制信号, 是高低电平相间的方波
( 5 ) 电路图
( 6 ) 音调如何控制, 音调受震动频率控制, 就等于控制信号的频率。频率越高音调越高,听起来,越刺耳。
( 7 ) 声音的大小由硬件控制的,软件没法控制声音大小
有源蜂鸣器原理
2)蜂鸣器代码
#include<reg51.h> //头文件包含
sbit BUZZER = P0^0;
void delay(void)
{
unsigned char i,j;
for(i=0;i<5;i++)
for(j=0;j<5;j++);
}
void main(void)
{
while(1)
{
BUZZER = 1;
delay();
BUZZER = 0;
delay();
}
}
3)定时器控制蜂鸣器
上节驱动方法
( 1 ) 不容易精准控制时间
( 2 ) CPU 控制蜂鸣器中不能做其他事
定时器控制蜂鸣器响
( 1 ) 10KHz = > 1 / 10000s = > 1000us
一> 高电平+ 低电平一共1000us , 那高电平和低电平的时间都是500us。所以要定的时间就是500us。
( 2 ) 外部晶振12MHz + 12T 设置= > 内部时钟频率1MHz = > 1us= >
TL0 = (65535-500) % 256,TH0 = (65535-500) / 256;
#include<reg51.h> //头文件包含
sbit BUZZER = P0^0;
void timer0_isr(void) interrupt 1
{
TL0 = (65535-500) % 256;
TH0 = (65535-500) / 256;
BUZZER = !BUZZER;
}
void main(void)
{
TMOD = 0x01; //T0使用16bit定时器
TL0 = (65535-500) % 256;
TH0 = (65535-500) / 256;
TR0 = 1; //T0打开开始计数
ET0 = 1; //T0的中断允许
EA = 1; //中断总开关
BUZZER = 1;
while(1);
}
4)定时器发出滴滴声
#include<reg51.h> //头文件包含
sbit BUZZER = P0^0;
unsigned int count;
unsigned char flag;
#define XKHZ 10
#define US (500/XKHZ)
#define N (65535-US)
void timer0_isr(void) interrupt 1
{
TL0 = N % 256;
TH0 = N / 256;
if(count-- == 0)
{
count = 5000;
if(flag == 0)
{
flag = 1;
}
else
{
flag = 0;
BUZZER = !BUZZER;
}
}
else
{
//常规情况不反转时
if(flag == 0)
{
BUZZER = !BUZZER; //4999次声音
}
else
{
}
}
}
void main(void)
{
TMOD = 0x01; //T0使用16bit定时器
TL0 = N % 256;
TH0 = N / 256;
TR0 = 1; //T0打开开始计数
ET0 = 1; //T0的中断允许
EA = 1; //中断总开关
BUZZER = 1;
//设置响和不响的周期时间
count = 5000; //5000*100us = 500ms;
flag = 0;
while(1);
}
学习时间:
提示:这里可以添加计划学习的时间
例如:
- 周一至周五晚上 7 点—晚上9点
- 周六上午 9 点-上午 11 点
- 周日下午 3 点-下午 6 点
学习产出:
提示:这里统计学习计划的总量
例如:
- 技术笔记 2 遍
- CSDN 技术博客 3 篇
- 习的 vlog 视频 1 个