无源蜂鸣器c语言编程,无源蜂鸣器题目

1.初学者的坑

上一讲的代码单片机一上电无源蜂鸣器就不停鸣叫比较吵,那么我们有没有办法让它规定响多久就可以停止不叫了呢。首先我们知道要想让无源蜂鸣器持续响,那么P1.6就要以一定的时间间隔(也可叫一定频率)不停的高低电平切换。

复习了前两讲的内容之后,我们动手自己写一个让无源蜂鸣器响一小段时间然后又不响一段时间,接着又响一小段时间的循环。这就类似于点亮一盏灯一段时间,熄灭一盏灯一段时间的循环。

这时初学者开始得意自己学过LED闪烁,于是就自己给自己出了道题目,让蜂鸣器响一下之后,保持不响的状态1秒钟,之后又响一下,又保持1秒不响这样循环下去,于是他们在while(1)里面这样写

0a55a3605430cf53948dc85527e027e2.png

代码下进去发现蜂鸣器没响,只是听到隔1秒就“咔”的声音。初学者犯这样的错误是因为还没认真思考过代码控制IO端口输出的状态。

2.图解

我们上一讲代码的while(1)里波形的实现是这样的

f176086f1e7b33df5fca8c23aa80a285.png

而本讲上图的代码中的while(1)里却是这样的波形

5f7a9c4baca82c60484c10ad62073a35.png

这样就达不到人家无源蜂鸣器驱动的条件了,初学者犯这样的错误是因为还没能很细致的去一条条代码分析,我们要做到看一条代码记住此时的IO端口输出的状态,然后再分析下一条代码,这样才能系统的去了解程序和硬件执行的关系。

3.题目分析

上一讲无源蜂鸣器能发声是因为在死循环里这些方波持续的时间无限长,所以无源蜂鸣器就会一直响。那我们要让它响一段时间,就让这个方波持续着这段时间;然后把IO端口电平固定住不发生改变,无源蜂鸣器没有脉冲信号所以就不响了。这时我们再延时1秒,在这一秒里无源蜂鸣器不会响,过了这一秒之后再让IO端口持续输出一段方波时间,这时就可以再次弄响无源蜂鸣器,就这样死循环下去也就达到自己想的那个题目的要求了。

5e3c720714c68bb5d8a008bf0a341edc.png

4.代码#include 

sbit BEEP = P1^6;

void delay_ms(unsigned int x)

{

unsigned int i,j;

if(x==1000)

{

for(i=0;i<19601;i++)//延时1s

{

for(j=5;j>0;j--);

}

}

else while(x--)for(j=115;j>0;j--);

}

void main()

{

unsigned int i,time;

while(1)

{

for(time=0;time<800;time++)//800决定鸣叫的时长

{

BEEP=!BEEP;

for(i=0;i<30;i++);//这里改为30延时长一点把鸣叫音调调低一些

}

delay_ms(1000);//延时1s

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值