Advertisement

无源蜂鸣器c语言编程,无源蜂鸣器鸣叫

阅读量:

输出方波图解

我们现在要给单片机IO端口输出4khz的方波。

现在我们算出方波的周期:1/(4*1000)s=0.00025s=0.25ms

高电平时间:(0.25/2)ms=0.125ms 低电平时间:(0.25/2)ms=0.125ms

ce92f8a1500087ff5fd790054ece2108.png

2.驱动代码

由于仅编写过最低延时1ms的函数,在本节中使用了一个延时0.125ms的测试用例。本节所使用的单片机IO端口配置为开发板上的P1.6引脚。与LED等有源器件不同的是,无源蜂鸣器的硬件连接相对简单,在实际应用中所使用的代码也相对简洁。安装完成后,在开发板上运行代码后,蜂鸣器一直持续发出声音并带有文字信息:包括必要的调试信息。

sbit BEEP = P1^6;

void main()

{

unsigned int i;

while(1)

{

BEEP=1;

for(i=0;i<14;i++);//延时接近0.125ms,给P1.6保持了0.125ms高电平时间

BEEP=0;

for(int i=0; i < 14; i++);//在低电平状态下持续时间为0.125毫秒,在这种情况下如果我们尝试将这两个for语句中的参数从14改为更大的数值,则鸣叫的音调会变得更低沉。

}

}

3.代码书写新知识

我们现在引入新的代码书写知识“BEEP=!BEEP;”。

NOT Beel表示对当前自身值进行取反操作。例如,在尚未执行"Beel = NOT Beel;"的情况下,请注意当前该变量的值。

当执行到“BEEP =!BEEP;”时,“!BEEP”是等于上一次的状态1变为0。

那现在的这条“BEEP =!BEEP;”就跟“BEEP=0;”是一样的了。

下一次再执行“BEEP =!BEEP;”时同理变为了“BEEP=1;”。

所以该语句实现的是来回变换赋给BEEP的值(0或1)。

这样我们就可以把上面的代码中while(1)部分简写为while(1)

{

BEEP=!BEEP;

for(i=0;i<14;i++);//只需改变一次for语句中的14就可以实现不同音调的鸣叫了

}

也可参考第二章第五讲将代码改为" LED2= ! LED2 "同样可实现LED灯的闪烁效果。

4.单片机IO端口初始电平

当同学们询问时,在程序中未赋值的情况下,这些IO端口最初会被设置为高电平还是低电平?

该款芯片具备总共24个IO端口,在开机状态下均为高电平输出。其中,该芯片的P1、P2、P3三个端口在开机状态下均为高电平输出。然而,在该款芯片中存在一个特殊功能模块:其主控单元中的一个引脚(即 chip’s P0 端口)在未连接任何外部电路的情况下会处于一种不确定状态(可能高可能低)。但因我们在实际应用中对该款芯片的 P0 端口配置了一个上拉电阻器(见《手把手教你学51单片机》中的相关内容),因此,在开发板上的 P0.0 至 P0.7 初始状态也为高电平(建议参考《手把手教你学51单片机》中的相关内容)。

最初启动一盏灯时,在代码中未配置P₀₁、P₀₂等参数内容的情况下,默认状态下相应的指示灯无法显示;只有在程序中将P₀₁设置为低电平时指示灯才会点亮;因此其他指示灯保持关闭的原因是IO端口已默认设置为高电平状态。

在此处,请注意,在程序初始化阶段,所有未被设为低电平的IO端口默认处于高电平输出状态这一规律

全部评论 (0)

还没有任何评论哟~