用单片机AT89C51编程①、使得8个LED从两侧向中间依次点亮;②、然后使其从中间向两侧依次点亮③、最后8个LED同时闪烁5次; ④、无限循坏1,2,3步; ⑤、时间间隔为500ms;
时间: 2023-12-28 19:54:53 浏览: 35
以下是AT89C51的代码:
```
#include <reg51.h>
void delay(unsigned int time) //延时函数,用于控制时间间隔
{
unsigned int i,j;
for(i=0;i<time;i++)
for(j=0;j<1275;j++);
}
void main()
{
unsigned char i,j,k;
while(1)
{
//第一步:8个LED从两侧向中间依次点亮
for(i=0,j=7;i<4;i++,j--)
{
P1 = 1<<i | 1<<j;
delay(500);
}
//第二步:8个LED从中间向两侧依次点亮
for(i=3,j=4;i>=0;i--,j++)
{
P1 = 1<<i | 1<<j;
delay(500);
}
//第三步:8个LED同时闪烁5次
for(k=0;k<5;k++)
{
P1 = 0xFF;
delay(500);
P1 = 0x00;
delay(500);
}
}
}
```
代码解释:
首先定义了一个延时函数`delay()`,用于控制LED之间的时间间隔。然后在`main()`函数中,使用三个循环分别实现了三个步骤:
第一步:8个LED从两侧向中间依次点亮。使用两个计数器`i`和`j`,分别从两侧向中间递增和递减,每次点亮一个LED,并延时500ms。
第二步:8个LED从中间向两侧依次点亮。同样使用两个计数器`i`和`j`,不过这次是从中间向两侧递减和递增,每次点亮一个LED,并延时500ms。
第三步:8个LED同时闪烁5次。使用计数器`k`,循环5次,每次将所有LED点亮并延时500ms,然后再将所有LED熄灭并延时500ms。
最后,在`while(1)`中无限循环1、2、3步。时间间隔为500ms,由`delay()`函数控制。