找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 5279|回复: 25
收起左侧

蜂鸣器的问题

  [复制链接]
ID:134753 发表于 2016-8-2 16:29 | 显示全部楼层 |阅读模式
#include<reg52.h>
sbit beep=P0^0;
void delay(void)
{
        unsigned char a,b;
        for(a=0;a<200;a++)
        for(b=0;b<200;b++);

}
void main()
{
       
        beep=1;
        delay();
        beep=0;
        delay();
}

这是我写的程序,可是蜂鸣器出来是微弱的哒哒声,而且过一会儿就没了。
#include <reg52.h>
sbit Beep =  P0^0 ;
void delay(unsigned int i)
{
    char j;
    for(i; i > 0; i--)
        for(j = 200; j > 0; j--);
}
void main()
{
         Beep= 1;
         delay(1);
         Beep= 0;
         delay(1);       
}


这是教材里面的程序,请问这俩程序的差异在哪儿?为什么我的就不行呢?
回复

使用道具 举报

ID:87568 发表于 2016-8-2 17:27 | 显示全部楼层
楼主自己写的程序延时为200x200=40000 教材提供的延时为1x200=200 很明显楼主的延时太长了,改小就行了吧!

评分

参与人数 1黑币 +60 收起 理由
admin + 60 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:134753 发表于 2016-8-2 17:49 | 显示全部楼层
helloccz 发表于 2016-8-2 17:27
楼主自己写的程序延时为200x200=40000 教材提供的延时为1x200=200 很明显楼主的延时太长了,改小就行了吧!

#include<reg52.h>
sbit beep=P0^0;
void delay(void)
{
        unsigned char a,b;
        for(a=0;a<2;a++)
        for(b=0;b<2;b++);

}
void main()
{
       
        beep=1;
        delay();
        beep=0;
        delay();
}

你看这个时间够短了吧,但是蜂鸣器出来的声音还是断断续续的
回复

使用道具 举报

ID:111634 发表于 2016-8-2 21:17 | 显示全部楼层
keil编译调试中,在寄存器窗口看一下两个延时程序的延时时间,就明白了。
回复

使用道具 举报

ID:135835 发表于 2016-8-2 23:00 | 显示全部楼层
楼主用的蜂鸣器是无源的吧
回复

使用道具 举报

ID:39386 发表于 2016-8-3 07:55 | 显示全部楼层
第一,要看这个是蜂鸣器是的有源还是无源的。无源的话,一般是以3-5K之间的开关频率驱动。
回复

使用道具 举报

ID:135860 发表于 2016-8-3 11:24 | 显示全部楼层
P0加上啦电阻没有?
回复

使用道具 举报

ID:135860 发表于 2016-8-3 11:25 | 显示全部楼层
P0口加上啦电阻没有?
回复

使用道具 举报

ID:134753 发表于 2016-8-3 11:43 | 显示全部楼层
huangfuxi2002 发表于 2016-8-3 07:55
第一,要看这个是蜂鸣器是的有源还是无源的。无源的话,一般是以3-5K之间的开关频率驱动。

无源的,怎么设置3-5K的开关频率驱动啊??
回复

使用道具 举报

ID:134753 发表于 2016-8-3 11:44 | 显示全部楼层
鹅鹅鹅111 发表于 2016-8-3 11:25
P0口加上啦电阻没有?

没有。。。
回复

使用道具 举报

ID:134753 发表于 2016-8-3 11:44 | 显示全部楼层
鹅鹅鹅111 发表于 2016-8-3 11:24
P0加上啦电阻没有?

开发板里没有给啊
回复

使用道具 举报

ID:134753 发表于 2016-8-3 11:45 | 显示全部楼层
uaeng 发表于 2016-8-2 23:00
楼主用的蜂鸣器是无源的吧

是无源的
回复

使用道具 举报

ID:134753 发表于 2016-8-3 11:45 | 显示全部楼层
zl2168 发表于 2016-8-2 21:17
keil编译调试中,在寄存器窗口看一下两个延时程序的延时时间,就明白了。

怎么查看呀,请指教。
回复

使用道具 举报

ID:134753 发表于 2016-8-3 11:50 | 显示全部楼层

不不,刚看了一下,有源的
回复

使用道具 举报

ID:134753 发表于 2016-8-3 11:50 | 显示全部楼层
HOUGE 发表于 2016-8-3 11:43
无源的,怎么设置3-5K的开关频率驱动啊??

是有源的
回复

使用道具 举报

ID:134753 发表于 2016-8-3 11:50 | 显示全部楼层
huangfuxi2002 发表于 2016-8-3 07:55
第一,要看这个是蜂鸣器是的有源还是无源的。无源的话,一般是以3-5K之间的开关频率驱动。

有源的应该是多少的?
回复

使用道具 举报

ID:111634 发表于 2016-8-3 20:29 | 显示全部楼层
本帖最后由 zl2168 于 2016-8-3 20:31 编辑
HOUGE 发表于 2016-8-3 11:45
怎么查看呀,请指教。

系统特殊寄存器组“Sys”中有一项“sec”和“states”,可查看程序执行时间和运行周期数。例如,执行到延时子程序时,记录进入该子程序的sec值,然后按过程单步键,快速执行该子程序完毕,再读取sec值,两者之差,即为该子程序执行时间。也可根据周期数states与图1-8中设置的晶振频率计算程序运行时间。
2.jpg





以上摘自张志良编著
80C51单片机仿真设计实例教程——基于Keil CProteus》清华大学出版社ISBN 978-7-302-41682-1




书中电路和程序设计有详细说明,程序语句条条有注解。欢迎咨询,zzlls@126.com




回复

使用道具 举报

ID:134753 发表于 2016-8-3 20:55 | 显示全部楼层
zl2168 发表于 2016-8-3 20:29
系统特殊寄存器组“Sys”中有一项“sec”和“states”,可查看程序执行时间和运行周期数。例如,执行到延 ...

非常感谢。
回复

使用道具 举报

ID:135939 发表于 2016-8-4 08:36 | 显示全部楼层
加油加油加油
回复

使用道具 举报

ID:136154 发表于 2016-8-6 16:12 | 显示全部楼层
要控制好发声的频率
回复

使用道具 举报

ID:136575 发表于 2016-8-20 08:19 | 显示全部楼层
延时太久了
回复

使用道具 举报

ID:137219 发表于 2016-8-20 22:45 | 显示全部楼层
延时的问题。

建议改成这样:

void delay (unsigned int t)
{
int x;
for(;t>0;t--)
for(x=0;x>113;x--)
}
回复

使用道具 举报

ID:135104 发表于 2016-8-21 12:55 来自手机 | 显示全部楼层
为什么设置字符型变量占用空间,另一方面可能是鄂蜂鸣器敏感,直接输入电平就行啊
回复

使用道具 举报

ID:137239 发表于 2016-8-21 13:08 | 显示全部楼层
我认为你的延时函数的时间有点长,导致脉冲的频率不够
回复

使用道具 举报

ID:137261 发表于 2016-8-21 22:03 | 显示全部楼层
建议把延时函数改小一点,顺便将蜂鸣器程序写入while(1)死循环最好。void main(){while(1){Beep=1;delay();Beep=0;delay();}}
回复

使用道具 举报

ID:70330 发表于 2016-10-29 10:36 | 显示全部楼层
无缘蜂鸣器需要方波驱动,有源蜂鸣器直接高电平或低电平就能驱动,有源蜂鸣器如果接方波驱动,声音就是时断时续的,无缘蜂鸣器方波驱动才是一直响
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表