按键一控制正向流水灯(按一下动一下) 按键二控制反向流水灯(按一下动一下) 按键三控制流水灯的数量(1-3个)
参考GPT和自己的思路:好的,这个问题可以用C语言的代码来实现。以下是一个简单的示例:
#include <stdio.h>
#include <wiringPi.h>
#define LED_COUNT_MAX 3 // 最大灯的数量
int main()
{
int led_count = 1; // 初始灯的数量
int led_index = 0; // 当前轮到哪个灯
int direction = 1; // 灯的流动方向,1表示正向,-1表示反向
int button_pin_1 = 1; // 按钮1的引脚号
int button_pin_2 = 2; // 按钮2的引脚号
int button_pin_3 = 3; // 按钮3的引脚号
int led_pins[] = {4, 5, 6}; // 灯的引脚号列表
wiringPiSetup(); // 初始化wiringPi库
// 设置按钮引脚为输入模式,并开启上拉电阻
pinMode(button_pin_1, INPUT);
pullUpDnControl(button_pin_1, PUD_UP);
pinMode(button_pin_2, INPUT);
pullUpDnControl(button_pin_2, PUD_UP);
pinMode(button_pin_3, INPUT);
pullUpDnControl(button_pin_3, PUD_UP);
// 设置灯的引脚为输出模式
for (int i = 0; i < LED_COUNT_MAX; i++) {
pinMode(led_pins[i], OUTPUT);
}
while (1) {
// 检测按钮1的状态,如果按下则切换正向流水灯和关闭所有灯
if (digitalRead(button_pin_1) == LOW) {
if (direction == 1) {
digitalWrite(led_pins[led_index], LOW);
led_index = (led_index + 1) % led_count;
digitalWrite(led_pins[led_index], HIGH);
} else {
digitalWrite(led_pins[led_index], LOW);
led_index = (led_index - 1 + led_count) % led_count;
digitalWrite(led_pins[led_index], HIGH);
}
delay(100);
}
// 检测按钮2的状态,如果按下则切换反向流水灯和关闭所有灯
if (digitalRead(button_pin_2) == LOW) {
direction = -direction;
digitalWrite(led_pins[led_index], LOW);
led_index = (led_index + direction + led_count) % led_count;
digitalWrite(led_pins[led_index], HIGH);
delay(100);
}
// 检测按钮3的状态,如果按下则切换灯的数量
if (digitalRead(button_pin_3) == LOW) {
led_count = (led_count % LED_COUNT_MAX) + 1;
for (int i = led_count; i < LED_COUNT_MAX; i++) {
digitalWrite(led_pins[i], LOW); // 关闭多余的灯
}
delay(100);
}
}
return 0;
}
这个代码使用了wiringPi库来控制GPIO引脚。实现的功能包括按键一控制正向流水灯,按键二控制反向流水灯,按键三控制灯的数量。你可以根据自己的需要修改引脚号、流水灯的速度等参数。
#include "INTRINS.H" //数学函数
extern unsigned char _crol_ (unsigned char, unsigned char);//左移一位
extern unsigned char _cror_ (unsigned char, unsigned char);//右移一位
特殊之处:比如a = 0x01; a = _cror_(a,1); 他到a = 0x80 之后直接变成 a = 0x01;