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

2024-12-03 17:09:19
推荐回答(4个)
回答1:

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);
}
}
}

回答2:

void sp()
{
uchar p;
for(p=0;p<2000;p++)
{speak=1;
speak=0;}
}
不能调节发声频率, 不知道是有源还是无源蜂鸣器,我估计这声音不会好听,而且响不响还两说
关于跑马灯只亮到两盏 好像不是程序问题

回答3:

void sp()
{
uchar p;
for(p=0;p<2000;p++)
{speak=1;
speak=0;}
}
p 超出了范围了 不能大于255
这个函数不能实现调节蜂鸣器的 频率

回答4:

P2=_cror_(P2,1);
这个只是把1送到P2去吧,并没有循环。。
for(p=0;p<2000;p++)
{speak=1;
speak=0;}
主要还是看你是什么蜂鸣器是有源的还是无源的