怎么用一段c代码简单实现按键一控制正向流水灯(按一下动一下) 按键二控制反向流水灯(按一下动一下) 按键三控制流水灯的数量(1-3个)
时间: 2023-05-28 11:06:58 浏览: 743
以下是一段简单实现按键控制流水灯的C语言代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <wiringPi.h>
#define LED_PIN_1 0
#define LED_PIN_2 1
#define LED_PIN_3 2
#define BUTTON_PIN_1 3
#define BUTTON_PIN_2 4
#define BUTTON_PIN_3 5
int main (void)
{
wiringPiSetup();
pinMode(LED_PIN_1, OUTPUT);
pinMode(LED_PIN_2, OUTPUT);
pinMode(LED_PIN_3, OUTPUT);
pinMode(BUTTON_PIN_1, INPUT);
pinMode(BUTTON_PIN_2, INPUT);
pinMode(BUTTON_PIN_3, INPUT);
int ledCount = 1;
int ledDirection = 1;
int ledIndex = 0;
int buttonState1 = 0;
int buttonState2 = 0;
int buttonState3 = 0;
while (1)
{
buttonState1 = digitalRead(BUTTON_PIN_1);
buttonState2 = digitalRead(BUTTON_PIN_2);
buttonState3 = digitalRead(BUTTON_PIN_3);
if (buttonState1 == HIGH)
{
delay(100);
if (buttonState1 == HIGH)
{
ledDirection = 1;
}
}
if (buttonState2 == HIGH)
{
delay(100);
if (buttonState2 == HIGH)
{
ledDirection = -1;
}
}
if (buttonState3 == HIGH)
{
delay(100);
if (buttonState3 == HIGH)
{
ledCount++;
if (ledCount > 3)
{
ledCount = 1;
}
}
}
for (int i = 0; i < ledCount; i++)
{
if (i == ledIndex)
{
digitalWrite(LED_PIN_1, HIGH);
digitalWrite(LED_PIN_2, HIGH);
digitalWrite(LED_PIN_3, HIGH);
}
else
{
digitalWrite(LED_PIN_1, LOW);
digitalWrite(LED_PIN_2, LOW);
digitalWrite(LED_PIN_3, LOW);
}
delay(100);
}
ledIndex += ledDirection;
if (ledIndex < 0)
{
ledIndex = ledCount - 1;
}
if (ledIndex >= ledCount)
{
ledIndex = 0;
}
}
return 0;
}
```
在上面的代码中,我们使用了wiringPi库来控制GPIO口,其中:
- LED_PIN_1、LED_PIN_2和LED_PIN_3分别代表三个LED灯的GPIO口编号;
- BUTTON_PIN_1、BUTTON_PIN_2和BUTTON_PIN_3分别代表三个按键的GPIO口编号;
- ledCount记录当前流水灯的数量,初始值为1;
- ledDirection记录当前流水灯的方向,初始值为1;
- ledIndex记录当前流水灯的位置,初始值为0;
- buttonState1、buttonState2和buttonState3分别记录三个按键的状态,0表示未按下,1表示按下。
在主循环中,我们首先读取三个按键的状态,如果按下某个按键,就根据按键的不同改变ledDirection或ledCount。然后使用for循环依次点亮每个LED灯,同时根据当前的ledIndex和ledDirection计算下一个流水灯的位置。最后等待一段时间后继续循环。
阅读全文