八个按键航标灯的c语言
时间: 2023-06-17 07:05:34 浏览: 156
这是一个八个按键航标灯的C语言程序示例:
```c
#include <stdio.h>
#include <stdlib.h>
#include <wiringPi.h>
#define LED_PIN_1 0 // 第一个LED灯的引脚
#define LED_PIN_2 1 // 第二个LED灯的引脚
#define LED_PIN_3 2 // 第三个LED灯的引脚
#define LED_PIN_4 3 // 第四个LED灯的引脚
#define LED_PIN_5 4 // 第五个LED灯的引脚
#define LED_PIN_6 5 // 第六个LED灯的引脚
#define LED_PIN_7 6 // 第七个LED灯的引脚
#define LED_PIN_8 7 // 第八个LED灯的引脚
#define BUTTON_PIN_1 8 // 第一个按键的引脚
#define BUTTON_PIN_2 9 // 第二个按键的引脚
#define BUTTON_PIN_3 10 // 第三个按键的引脚
#define BUTTON_PIN_4 11 // 第四个按键的引脚
#define BUTTON_PIN_5 12 // 第五个按键的引脚
#define BUTTON_PIN_6 13 // 第六个按键的引脚
#define BUTTON_PIN_7 14 // 第七个按键的引脚
#define BUTTON_PIN_8 15 // 第八个按键的引脚
int main(void)
{
wiringPiSetup(); // 初始化wiringPi库
pinMode(LED_PIN_1, OUTPUT); // 设置LED引脚为输出模式
pinMode(LED_PIN_2, OUTPUT);
pinMode(LED_PIN_3, OUTPUT);
pinMode(LED_PIN_4, OUTPUT);
pinMode(LED_PIN_5, OUTPUT);
pinMode(LED_PIN_6, OUTPUT);
pinMode(LED_PIN_7, OUTPUT);
pinMode(LED_PIN_8, OUTPUT);
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);
pinMode(BUTTON_PIN_4, INPUT);
pullUpDnControl(BUTTON_PIN_4, PUD_UP);
pinMode(BUTTON_PIN_5, INPUT);
pullUpDnControl(BUTTON_PIN_5, PUD_UP);
pinMode(BUTTON_PIN_6, INPUT);
pullUpDnControl(BUTTON_PIN_6, PUD_UP);
pinMode(BUTTON_PIN_7, INPUT);
pullUpDnControl(BUTTON_PIN_7, PUD_UP);
pinMode(BUTTON_PIN_8, INPUT);
pullUpDnControl(BUTTON_PIN_8, PUD_UP);
int ledStatus[8] = {0, 0, 0, 0, 0, 0, 0, 0}; // 初始化LED灯状态为关闭
while(1) // 循环监听按键
{
if(digitalRead(BUTTON_PIN_1) == LOW) // 如果第一个按键被按下
{
ledStatus[0] = !ledStatus[0]; // 取反LED状态
digitalWrite(LED_PIN_1, ledStatus[0]); // 更新LED状态
delay(100); // 延时去抖动
}
if(digitalRead(BUTTON_PIN_2) == LOW)
{
ledStatus[1] = !ledStatus[1];
digitalWrite(LED_PIN_2, ledStatus[1]);
delay(100);
}
if(digitalRead(BUTTON_PIN_3) == LOW)
{
ledStatus[2] = !ledStatus[2];
digitalWrite(LED_PIN_3, ledStatus[2]);
delay(100);
}
if(digitalRead(BUTTON_PIN_4) == LOW)
{
ledStatus[3] = !ledStatus[3];
digitalWrite(LED_PIN_4, ledStatus[3]);
delay(100);
}
if(digitalRead(BUTTON_PIN_5) == LOW)
{
ledStatus[4] = !ledStatus[4];
digitalWrite(LED_PIN_5, ledStatus[4]);
delay(100);
}
if(digitalRead(BUTTON_PIN_6) == LOW)
{
ledStatus[5] = !ledStatus[5];
digitalWrite(LED_PIN_6, ledStatus[5]);
delay(100);
}
if(digitalRead(BUTTON_PIN_7) == LOW)
{
ledStatus[6] = !ledStatus[6];
digitalWrite(LED_PIN_7, ledStatus[6]);
delay(100);
}
if(digitalRead(BUTTON_PIN_8) == LOW)
{
ledStatus[7] = !ledStatus[7];
digitalWrite(LED_PIN_8, ledStatus[7]);
delay(100);
}
}
return 0;
}
```
此程序使用了wiringPi库来控制GPIO引脚。在程序中,我们定义了8个LED灯的引脚和8个按键的引脚。程序进入循环后,不断监听按键的状态,如果有按键被按下,则取反相应的LED灯状态,然后更新LED灯状态。程序中使用了一个延时函数来去抖动,避免按键在按下和松开的瞬间产生多次触发。
阅读全文