求52单片机流水灯程序

求52单片机流水灯程序用P1口控制8个LED灯按下开关后会依次点亮,全部点亮后会回到第一盏重新开始亮,每盏灯点亮之间的延时为0.5秒。

//单片机流水灯程序,是学习单片机的最简单的程序。

//流水灯

#include <REG51.h>  //51头文件

#define DY_PORT P1 //设置LED连接的I/O组

#define DY_SPEED  100 //设置每一个明亮级的停留时间(值域:0~65535)

void delay (unsigned int a){ // 1ms延时程序

unsigned int i;

while( --a != 0){

for(i = 0; i < 600; i++);

}      

}

void main(void){

unsigned int i;

unsigned int temp;

while(1){

temp=0x01;

for(i=0;i<8;i++){ //8个流水灯逐个闪动

DY_PORT=~temp;

delay(DY_SPEED);   //调用延时函数

temp<<=1;

}

temp=0x80;

for(i=0;i<8;i++){ //8个流水灯反向逐个闪动

DY_PORT=~temp;

delay(DY_SPEED);   //调用延时函数

temp>>=1;

}

temp=0xFE;

for(i=0;i<8;i++){ //8个流水灯依次全部点亮

DY_PORT=temp;

delay(DY_SPEED);   //调用延时函数

temp<<=1;

}

temp=0x7F;

for(i=0;i<8;i++){ //8个流水灯依次反向全部点亮

DY_PORT=temp;

delay(DY_SPEED);   //调用延时函数

temp>>=1;

}

}

}

温馨提示:答案为网友推荐,仅供参考
第1个回答  2018-12-26
#include<reg51.h>
#define uchar unsigned char
uchar led1,led2,led3,led4;
void delay(uchar a)
{
uchar i,j;
for(i=0;i<a;i++)
for(j=0;j<120;j++);
}
main()
{
uchar num;
unsigned long int led;
while(1)
{
led=0x00000001;
num=0;
while(num<32)
{
led1=(led<<num)>>24;
led2=(led<<num)>>16;
led3=(led<<num)>>8;
led4=led<<num;
P0=led1;
P1=led2;
P2=led3;
P3=led4;
delay(20);
num++;
}
for(num=0;num<5;num++)
{
P0=0x00;
P1=0x00;
P2=0x00;
P3=0x00;
delay(20);
P0=0xff;
P0=0xff;
P0=0xff;
P0=0xff;
delay(20);
}
}
}
第2个回答  2018-12-26
不知道啊可以百度一下,百度什么都知道的吆!
第3个回答  2018-12-26
不知道啊可以百度一下百度君什么都知道的
第4个回答  2018-12-26
随便打几个字