C51单片机流水灯蜂鸣器程序

程序编译正确可是流水灯只能亮到第二个就停止了另外再帮我看看我定义的voidsp()能实现调节蜂鸣器发声频率的功能吗?#include<reg51.h>#include<i... 程序编译正确 可是流水灯只能亮到第二个就停止了 另外再帮我看看我定义的void sp()能实现调节蜂鸣器发声频率的功能吗?

#include<reg51.h>
#include<intrins.h>
#define uchar unsigned char
#define unit unsigned int
sbit speak=P1^5;
void Delay_ms(unit t)
{
uchar i;
for(t;t>0;t--)
for(i=0;i<120;i++);
}
void sp()
{
uchar p;
for(p=0;p<2000;p++)
{speak=1;
speak=0;}
}
void main(void)
{
P2=0xfe;
Delay_ms(500);
while(1)
{
uchar j,k;
for(j=0;j<7;j++)
{
P2=_crol_(P2,1);
sp();
Delay_ms(500);
}
for(k=0;k<7;k++)
{
P2=_cror_(P2,1);
sp();
Delay_ms(500);
}
}
}
展开
 我来答
long05931
2013-11-08
知道答主
回答量:0
采纳率:0%
帮助的人:0
展开全部
void sp()
{
uchar p;
for(p=0;p<2000;p++)
{speak=1;
speak=0;}
}
不能调节发声频率, 不知道是有源还是无源蜂鸣器,我估计这声音不会好听,而且响不响还两说
关于跑马灯只亮到两盏 好像不是程序问题
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
Arthurzss
2013-11-08
知道答主
回答量:0
采纳率:0%
帮助的人:0
展开全部
P2是端口啊,所以P2=_crol_(P2,1);这句中等号左边的P2表示的读取P2端口,这时的值取决于外围电路,而不是原来的赋值。所以需要一个变量来解决这个问题。

由你的代码看,是直流蜂鸣器,它的声音频率是无法改变的。而你也只是要改变鸣叫和不鸣叫的间隔频率(只是纠正一下名词),但这个程序不行。修改如下:
void sp()
{
speak=1;
Delay_ms(5);
speak=0;

Delay_ms(5);
}
void main(void)
{
uchar j,k,a;
a=0xfe;
P2=0xfe;
Delay_ms(500);
while(1)
{
for(j=0;j<7;j++)
{
a=_crol_(a,1);
P2=a;
sp();
Delay_ms(500);
}
for(k=0;k<7;k++)
{
a=_cror_(a,1);
P2=a;
sp();
Delay_ms(500);
}
}
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
lyt18782
2013-11-08
知道答主
回答量:0
采纳率:0%
帮助的人:0
展开全部
P2=_cror_(P2,1);
这个只是把1送到P2去吧,并没有循环。。
for(p=0;p<2000;p++)
{speak=1;
speak=0;}
主要还是看你是什么蜂鸣器是有源的还是无源的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
?>

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式