我们很多的案例实际上就是用来检测我们的单片机上的零件等是否能正常使用,我们已经测试了很多的二极管,数码管等,对于我们的发生装置还没有一定的了解,故我们现在学习一下蜂鸣器和可变调的蜂鸣器
蜂鸣器
实验现象
蜂鸣器初始状态是没有发声;
按下按键1,则蜂鸣器开始发声
再次按下按键1,蜂鸣器停止发声
工作原理
电路原理图:
无源蜂鸣器只需改变Beep端口的电平,产生一个周期性的方波即可使蜂鸣器发生声音,不同的频率发出的声音不同。
- ULN2003是一个功放,用于放大电流。
- 电阻R14和电容C21是用来保护电路的。
若人为将Beep端口的电平一直置为高电平,在没有保护电路的情况下,容易烧毁电路,但即使有保护电路也应该注意不要将Beep端口长时间置于高电平,这对器件也是有一定损害的
蜂鸣器分为有源蜂鸣器和无源蜂鸣器,这里的源特指振荡源
理想的振荡源为一定频率的方波
有源蜂鸣器 | 无源蜂鸣器 |
---|---|
直接加电就可以响起 | 需要我们给提供振荡源 |
价格便宜,可以通过控制其振动频率来改变发出的声音 | 使用简单 |
音乐的播放 | 不需要编写“乐谱” |
本实验板使用的无源蜂鸣器是电磁式蜂鸣器,电磁式蜂鸣器由振荡器、电磁线圈、磁铁、振动膜片及外壳等组成。
接通电源后,接收到的音频信号电流通过电磁线圈,使电磁线圈产生磁场。
振动膜片在电磁线圈和磁铁的相互作用下,周期性地振动发声
代码解析
流程设计图如下:
全局定义
sbit sbtBeep = P3 ^ 4; //蜂鸣器引脚
bit btBeepFlag; //控制蜂鸣器开关的标志位
总体代码比较简单,延时,初始化函以及按键消抖数我们已经可以按照以前的进行改写,现在只需判断按键是否按下,按下之后一直色号顶开关标志位为有效或无效即可
可变调的蜂鸣器
实验现象
数码管上显示的每个数字代表着不同的音调
通过按键KEY1可以修改数字的值(0-9)
通过KEY2让蜂鸣器发声或者不发声
工作原理
其原理与蜂鸣器相似,可变掉主要就是一种综合性质的实现,用上我们的许多前面学过的东西,也算是一种复习了
关键在于如何修改输入蜂鸣器方波的频率?
输入蜂鸣器的方波是通过定时器来产生的。
定时器中断的频率决定了输入蜂鸣器的方波的频率,
而定时器中断的频率是通过重装值决定的。
因此只需要修改定时器自动重装的重装值,就能向蜂鸣器输入不同频率的方波。
代码解析
主要代码为这部分
if( sbtKey1 == 0 )
{
if( sbtKey1_state == 0 ) //判断按键是否按下
{
DelayMs( 10 ); //延时消抖
if( sbtKey1 == 0 )
{
uiToneNum++; //声调改变
if( uiToneNum == 10 )
uiToneNum = 0;
TH0 = 0xF4 - uiToneNum;
//减小重装值,从而减少振动(中断)频率
sbtKey1_state = 1; //设置按键1为已按下
}
}
}
else
sbtKey1_state = 0;
由上可知道其如何改变重装值,从而得到其不同的音调