用数组的方法写一个流水灯程序
时间: 2023-09-14 19:07:11 浏览: 588
好的,以下是使用数组的方法写的一个流水灯程序:
```c
#include <reg51.h>
void main()
{
unsigned char led[16] = {0xFE, 0xFD, 0xFB, 0xF7, 0xEF, 0xDF, 0xBF, 0x7F, 0xFE, 0xFD, 0xFB, 0xF7, 0xEF, 0xDF, 0xBF, 0x7F};
// 16个LED灯对应的二进制数值
unsigned int i, j;
while (1)
{
for (i = 0; i < 16; i++)
{
P1 = led[i]; // 控制16个LED灯循环亮起
for (j = 0; j < 50000; j++);
}
}
}
```
上述程序中,我们使用了一个长度为16的数组 `led`,存储了16个LED灯对应的二进制数值。然后在程序中循环遍历这个数组,依次控制16个LED灯循环亮起。程序中的延时时间可以根据需要进行调整。
实际运行效果与前面的程序是相同的,只是把每个LED灯的二进制数值存储到了数组中,方便程序的编写和维护。
相关问题
用C语言写一个流水灯程序
好的,下面是一个简单的流水灯程序:
```c
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
int main() {
int i, j;
// 设置流水灯的数量
int num = 8;
// 设置流水灯的循环次数
int count = 10;
// 定义流水灯数组
int lights[num];
// 初始化流水灯数组
for (i = 0; i < num; i++) {
lights[i] = 0;
}
// 循环count次
for (i = 0; i < count; i++) {
// 打印当前流水灯状态
for (j = 0; j < num; j++) {
if (lights[j] == 0) {
printf(".");
} else {
printf("*");
}
}
printf("\n");
// 移动流水灯
for (j = num - 1; j > 0; j--) {
lights[j] = lights[j - 1];
}
lights[0] = 1;
// 等待一段时间
usleep(500000);
}
return 0;
}
```
这个程序使用了一个整型数组来存储流水灯的状态,然后循环打印流水灯的状态,移动流水灯,并且等待一段时间。你可以在程序中修改流水灯的数量和循环次数来实现不同的效果。
给我52单片机里按键1控制P0接口一个数组里面的8个流水灯的代码,要求为按一次为启动8个流水灯顺时针循环亮,摁键2为停止亮灯,摁键3为加速,摁键4为减速
好的,下面是一个简单的 8052 单片机控制按键控制 P0 接口 8 个流水灯的程序示例:
```
#include <reg52.h> // 引入 8052 单片机头文件
sbit KEY1 = P3^0; // 定义 P3.0 为 KEY1
sbit KEY2 = P3^1; // 定义 P3.1 为 KEY2
sbit KEY3 = P3^2; // 定义 P3.2 为 KEY3
sbit KEY4 = P3^3; // 定义 P3.3 为 KEY4
unsigned char speed = 50; // 初始速度为 50ms,可以根据需要修改
unsigned char ledArray[8] = {1, 2, 4, 8, 16, 32, 64, 128}; // 定义流水灯亮灯顺序
void Delay(unsigned int t) // 延时函数
{
unsigned int i, j;
for (i = 0; i < t; i++)
{
for (j = 0; j < 125; j++);
}
}
void ShowLed() // 显示流水灯
{
unsigned char i;
for (i = 0; i < 8; i++)
{
P0 = ledArray[i]; // 依次点亮流水灯
Delay(speed); // 延时
}
}
void main()
{
unsigned char i = 0;
while (1) // 无限循环
{
if (KEY1 == 0) // 摁键1按下
{
while (KEY1 == 0); // 等待摁键1释放
for (i = 0; i < 8; i++) // 重置流水灯数组
{
ledArray[i] = 1 << i;
}
i = 0; // 重置计数器
ShowLed(); // 显示流水灯
}
else if (KEY2 == 0) // 摁键2按下
{
while (KEY2 == 0); // 等待摁键2释放
P0 = 0; // 熄灭所有灯
i = 0; // 重置计数器
}
else if (KEY3 == 0) // 摁键3按下
{
while (KEY3 == 0); // 等待摁键3释放
if (speed > 10) // 速度调节上限为 10ms
{
speed -= 10; // 速度加快
}
}
else if (KEY4 == 0) // 摁键4按下
{
while (KEY4 == 0); // 等待摁键4释放
if (speed < 100) // 速度调节下限为 100ms
{
speed += 10; // 速度减慢
}
}
else // 没有按键按下
{
P0 = 0; // 熄灭所有灯
i++; // 计数器加 1
if (i >= 8) // 计数器达到上限,重置为 0
{
i = 0;
}
ledArray[i] = 255; // 将当前灯亮起来
ShowLed(); // 显示流水灯
}
}
}
```
这个程序使用了 8052 单片机的 P0 口控制 8 个 LED 灯,使用 P3 口的 4 个按键控制流水灯的启停和速度调节。在程序中使用了一个简单的延时函数 `Delay()` 来控制灯的亮灭时间。需要注意的是,这个程序是一个无限循环,会一直运行下去,如果需要停止程序,需要手动断电或者使用单片机的复位按钮。
阅读全文