用keil,51单片机,已知P1口接8只LED灯,高电平(逻辑1)点亮。从中间向两侧的流水
时间: 2024-05-15 12:19:46 浏览: 9
代码如下:
```c
#include <reg51.h>
#define LED_COUNT 8 // 定义LED数量
#define DELAY_TIME 200 // 定义延时时间
void delay(unsigned int ms) // 延时函数
{
unsigned int i, j;
for (i = 0; i < ms; i++)
{
for (j = 0; j < 120; j++)
{
}
}
}
void main()
{
unsigned char i, j, k;
unsigned char led[LED_COUNT] = {0xfe, 0xfc, 0xf8, 0xf0, 0xe0, 0xc0, 0x80, 0x00}; // 定义LED流水灯的数组
while (1)
{
for (i = 0; i < LED_COUNT; i++) // 从左往右流水灯
{
P1 = led[i];
delay(DELAY_TIME);
}
for (j = LED_COUNT - 2; j > 0; j--) // 从右往左流水灯
{
P1 = led[j];
delay(DELAY_TIME);
}
for (k = 0; k < LED_COUNT; k++) // 从中间往两侧流水灯
{
P1 = led[k] | led[LED_COUNT - k - 1];
delay(DELAY_TIME);
}
}
}
```
注:本代码使用了循环数组的概念,通过改变数组元素的顺序来实现不同的流水灯效果。具体来说,定义了一个名为`led`的数组,其中存储了不同流水灯效果对应的8位二进制数,例如`0xfe`表示最左边的LED灯亮,`0xfc`表示最左边的两个LED灯亮,以此类推。在循环中,通过改变`led`数组的下标来控制流水灯的效果。