单片机 蜂鸣器加流水灯问题

我做一个蜂鸣器加流水灯的试验运行没问题但是延时如果调大蜂鸣器响声就不正常了这是怎么个情况#include<reg51.h>#include<intrins.h>#defi... 我做一个蜂鸣器加流水灯的试验 运行没问题 但是延时如果调大 蜂鸣器响声就不正常了 这是怎么个情况
#include<reg51.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit teep = P1^2; // P1.2口控制蜂鸣器
Delay(uint);
main ()
{
uchar temp,a,b;
while(1)
{
temp = 0xfe;
P0 = temp;
for(a=0;a<7;a++)
{
temp = _crol_(temp,1); //左移1位
teep = 0;
P0 = temp;
Delay(260);
teep = 1; //蜂鸣器停
}
for(b=0;b<7;b++)
{
temp = _cror_(temp,1); //右移1位
teep = 0; //蜂鸣器响
P0 = temp;
Delay(260);
teep = 1; //蜂鸣器停
}
}
}
Delay(uint z) //延时程序
{
uint i,j;
for(i=100;i>0;i--)
for(j=z;j>0;j--);
}
求大神指点 谢谢了
展开
 我来答
百度网友2117fb9
2013-07-09 · 超过36用户采纳过TA的回答
知道小有建树答主
回答量:98
采纳率:0%
帮助的人:74.2万
展开全部
具体不知道蜂鸣器响声如何不正常。

但程序上时序有点不恰当。
temp = _cror_(temp,1); //右移1位
teep = 0; //蜂鸣器响
P0 = temp;
Delay(260);
teep = 1; //蜂鸣器停

蜂鸣器停再过2~3个机器周期后 响,2~3个机器周期顶多就1ms,
人耳能区分开来?这个确定是正常??
建议在 teep = 1; //蜂鸣器停
后面加一点点延迟,比如Delay(60);
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
宿兴电子
2024-11-28 广告
作为深圳市宿兴电子有限公司的工作人员,我无法对附近的蜂鸣器进行推荐。不过,您可以考虑以下因素来选择适合自己的蜂鸣器:1. 功能:选择适用于您需要的蜂鸣器,例如,用于提示、报警或装饰等不同场合。2. 声音:根据您的需要选择不同声音类型的蜂鸣器... 点击进入详情页
本回答由宿兴电子提供
zhxiufan
2013-07-09 · 知道合伙人软件行家
zhxiufan
知道合伙人软件行家
采纳数:14923 获赞数:38385
国家科技进步奖

向TA提问 私信TA
展开全部
//延时程序有些问题,调整一下顺序
Delay(uint z) //延时程序
{
uint i,j;
for(j=z;j>0;j--)
for(i=100;i>0;i--);
}
//另外,蜂鸣器有两种,一种是随频率而发声变化(speaker),一种是固定声音的,你选后一种就可以了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
做而论道
高能答主

推荐于2017-10-04 · 把复杂的事情简单说给你听
知道大有可为答主
回答量:3万
采纳率:80%
帮助的人:1.2亿
展开全部
#include<reg51.h>
#include<intrins.h>

#define uchar unsigned char
#define uint unsigned int

sbit teep = P1^2; // P1.2口控制蜂鸣器

Delay(uint);
main ()
{
uchar temp, a, b;
temp = 0xfe;
P0 = temp;
while(1) {
for(a = 0; a < 7; a++) {
temp = _crol_(temp, 1); //左移1位
P0 = temp;
Delay(260);
}
for(b = 0; b < 7; b++) {
temp = _cror_(temp, 1); //右移1位
P0 = temp;
Delay(260);
}
}
}

Delay(uint z) //含有发音功能的延时程序
{
uint i, j;
for(j = z; j > 0; j--) {
teep = 0; for(i = 100; i > 0; i--);
teep = 1; for(i = 100; i > 0; i--);
}
}

试试看。
更多追问追答
追问
能解释下那个延时程序吗 怎么就能出声了? 谢谢
追答
无源蜂鸣器,需要反复的通、断,才能发音。

Delay(uint z) //含有发音功能的延时程序
{
uint i, j;
for(j = z; j > 0; j--) {
teep = 0; for(i = 100; i > 0; i--);--零,延时
teep = 1; for(i = 100; i > 0; i--);--壹,延时
}---------------循环多少次,这就发音了。
}

如果需要,还可以编写一个不发音的延时程序:

Delay_2 (uint z) //不发音的延时程序

{
uint i, j;
for(j = z; j > 0; j--) {
teep = 1; for(i = 100; i > 0; i--);--壹,延时
teep = 1; for(i = 100; i > 0; i--);--壹,延时
}
}

用在不同的场合。
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
树儿是魔法师
2013-07-09
知道答主
回答量:28
采纳率:0%
帮助的人:14万
展开全部
这蜂鸣器的响声本来看的就是开关之间的时间,间隔时间不动,响声也不同啊,这不是很正常嘛
追问
是说蜂鸣器随着延时的曾加或者减小声音也会变得不同吗
追答
是啊,蜂鸣器不就是这么用的嘛,主要不就是看间隔时间嘛,间隔不同,频率就不同,书上有讲的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式