??????? 接下来就开始复习一些其他的接口,首先是现在基本无论哪个板子都会带有的一个外部接口部件就是蜂鸣器,关于蜂鸣器软件整体和GPIO没有什么区别,更重要的是关于蜂鸣器的一些知识的学习。
1. 关于蜂鸣器
??????? 首先蜂鸣器分为压电式蜂鸣器和电磁式蜂鸣器两种,其实一句话就可以说出他们的区别,一个是需要,压电式蜂鸣器发声,是需要一定频率的脉冲信号,什么是脉冲信号,其实简单来说就是频率比较高的方波,而想要电磁式蜂鸣器发声,只需要给一个高低电平就行了。其实自己的板子是什么类型的蜂鸣器,直接看蜂鸣器的芯片手册就好了,会有详细的介绍。蜂鸣器其实还分为有源蜂鸣器和无源蜂鸣器,注意,这里的源不是指电源的意思,而是是否含有振荡电路,有振荡电路的只需要高低电平就好了,而无源的就需要一定的脉冲信号才能发声。
2. 硬件
??????? 首先对于我的51单片机来说,我的是无源蜂鸣器,所以需要高低电平。但是想要直接驱动蜂鸣器是比较难的,一般蜂鸣器的最小的驱动电流都是30mA,而我们51单片机的最大驱动电流可能才20mA,所以需要有一个驱动电路
? ????????????????????????????????
如图所示是我的蜂鸣器的简单的电路图,其中在其中加了一部分三级管的内容,我简单说一下三级管的工作原理,其实就是说假如J7这个引脚假如有一个电流,那么VCC就可以直接给蜂鸣器通电,假如J7没有电流,那么VCC那边就不是导通的了。而其中的R1是为了防止误开蜂鸣器其实这不就是我们编程的思路了么,我们在J7给脉冲(短时间的高低电平),其实不就可以使我的蜂鸣器响起来了么,而且我们可以通过改变高低电平的持续时间来改变声音,其实不就是可以做个简单的钢琴了么,这是后话。
????????
??????? 这就是实际过程当中蜂鸣器和板子的连接,其实ULN2003D就是我们那个硬件电路的封装,就是多个三极管拼成的一个芯片,通过P15到连接到蜂鸣器。
3.软件
#include <reg52.h>
sbit beep = P1^5;
void delay(int n){
while(n--);
}
void main(){
while(1){
beep = ~beep;//状态取反
delay(10);
}
}
??????? 关于软件部分其实也没啥好说的,其实就是一个把蜂鸣器的状态一直取反然后可以使得蜂鸣器发声。
?
?
|