用Keil写一个8路流水灯,两侧各一个LED同时亮起,之后依次向中间聚拢,然后在展开,接着,在8个灯闪三次,为一次循环.
时间: 2023-10-27 16:07:01 浏览: 78
LED.zip_74lc51_74lc51做8个led_89c51点亮灯_流水灯程序_编程8个led轮流
好的,这里提供一个基于STC89C52单片机的实现代码,使用P1口控制8个LED灯。
```c
#include <reg52.h>
#include <intrins.h>
#define uint unsigned int
#define uchar unsigned char
sbit led1=P1^0;
sbit led2=P1^1;
sbit led3=P1^2;
sbit led4=P1^3;
sbit led5=P1^4;
sbit led6=P1^5;
sbit led7=P1^6;
sbit led8=P1^7;
void main()
{
uchar i, j, k;
while(1)
{
//两侧亮起
led1 = led8 = 1;
//向中间聚拢
for(i=0; i<3; i++)
{
for(j=1,k=6; j<=4; j++,k--)
{
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
switch(j)
{
case 1:
led2 = led7 = 1;
break;
case 2:
led3 = led6 = 1;
break;
case 3:
led4 = led5 = 1;
break;
case 4:
led1 = led8 = 0;
break;
}
switch(k)
{
case 6:
led3 = led6 = 0;
break;
case 5:
led2 = led7 = 0;
break;
case 4:
led4 = led5 = 0;
break;
}
}
}
//展开
for(i=0; i<3; i++)
{
for(j=1,k=6; j<=4; j++,k--)
{
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
switch(j)
{
case 1:
led1 = led8 = 1;
break;
case 2:
led2 = led7 = 1;
break;
case 3:
led3 = led6 = 1;
break;
case 4:
led4 = led5 = 1;
break;
}
switch(k)
{
case 6:
led4 = led5 = 0;
break;
case 5:
led3 = led6 = 0;
break;
case 4:
led2 = led7 = 0;
break;
}
}
}
//闪烁三次
for(i=0; i<3; i++)
{
led1 = led2 = led3 = led4 = led5 = led6 = led7 = led8 = 0;
for(j=0; j<50; j++)
{
for(k=0; k<200; k++);
}
led1 = led2 = led3 = led4 = led5 = led6 = led7 = led8 = 1;
for(j=0; j<50; j++)
{
for(k=0; k<200; k++);
}
}
}
}
```
这个代码可以实现你提出的要求,不过要注意在编译前先对代码进行适当的修改,比如定义引脚的名称等。
阅读全文