单片机流水灯问题

题目是:8个发光管由上至下间隔1s流动,其中每个管亮500ms,灭500ms,亮时蜂鸣器响,灭时关闭蜂鸣器,一直重复下去。#include#includeunsigned char D1;void delay(unsigned int);sbit beep=P2^3;void main(){ D1=0xfe;P1=D1;while(1) {beep=0;delay(620);D1=_crol_(D1,1);P1=D1;beep=1;delay(620);} }void delay(unsigned int z){unsigned int x,y;for(x=z;x>0;x--) for(y=200;y>0;y--);}我的这个程序不能实现灭500ms,设置的晶振频率是11.0592MHZ,麻烦大家帮我改一下,万分的感激啊!!!
#include<reg52.h>
#include<intrins.h>
unsigned char D1;
void delay(unsigned int);
sbit beep=P2^3;
void main()
{
D1=0xfe;
P1=D1;
while(1)
{
beep=0;
delay(620);
D1=_crol_(D1,1);
P1=D1;
beep=1;
delay(620);
}
}
void delay(unsigned int z)
{
unsigned int x,y;
for(x=z;x>0;x--)
for(y=200;y>0;y--);
}
为了看清楚点重发了一下。

第1个回答  2013-09-05
#include<reg52.h>
void delay(unsigned int);
sbit beep=P2^3;

void main(){
    uchar reg=0x00;
    while(1){
        P1=0xff-(1<<reg);
        beep=0;
        delay(500);
        P1=0xff;
        beep=1;
        delay(500);
        reg=(reg==7)?(reg+1):0;
    }      
}

void delay(unsigned int z){
    unsigned int x,y;
    for(x=z;x>0;x--)
        for(y=200;y>0;y--);
}

追问

我学的语句还没有那么难,我学了while、for语句,能帮忙用简单的这些语句帮我改吗?我也学学您的这种方法,感谢啊!

追答

不学习新的方法,用你的方法,我也不会。

本回答被提问者采纳
第2个回答  2013-09-06
#include<reg52.h>
#include<intrins.h>
unsigned char D1;
void delay(unsigned int);
sbit beep=P2^3;
void main()
{
D1=0xfe;
P1=D1;
while(1)
{
beep=0;
delay(500);
D1=_crol_(D1,1);
P1=D1;
beep=1;
delay(500);
}
}
void delay(unsigned int z)
{
unsigned int x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
第3个回答  2013-09-05
嗯!你说的是你想要确切点的500ms延时还是什么!!
我看了你的可以说实现闪烁的功能追问

大概的500ms就行,就是实现不了灭500ms,我改了半天了,还是改不对!

追答

你的led和那个IO口相连的啊!
这个程序不可能实现不了!
beep = 1;就是把led熄灭了啊!

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网