C语言编程实现题,要求通过按键控制LED灯状态的效果:当按键长按(按下时间大于2秒)时,蓝色LED灯每隔200毫秒亮灭切换一次,循环五次;当按键短按(按下时间小于1秒)时,蓝色LED灯每隔100毫秒亮灭切换一次。
时间: 2024-04-08 13:28:44 浏览: 85
以下是一个C语言的示例代码,可以实现您的按键控制LED灯状态的效果:
```c
#include <stdio.h>
#include <stdlib.h>
#include <wiringPi.h>
#define BUTTON_PIN 2
#define LED_PIN 13
int main(void) {
int buttonState = HIGH;
int lastButtonState = HIGH;
unsigned long buttonPressTime = 0;
int ledState = LOW;
if (wiringPiSetup() == -1) {
fprintf(stderr, "Failed to initialize wiringPi.\n");
return 1;
}
pinMode(BUTTON_PIN, INPUT);
pinMode(LED_PIN, OUTPUT);
while (1) {
buttonState = digitalRead(BUTTON_PIN);
if (buttonState != lastButtonState) {
if (buttonState == LOW) {
buttonPressTime = millis();
} else {
if (millis() - buttonPressTime > 2000) {
longPressAction();
} else {
shortPressAction();
}
}
delay(50); // 防止按键抖动
}
lastButtonState = buttonState;
}
return 0;
}
void longPressAction() {
int i;
for (i = 0; i < 5; i++) {
digitalWrite(LED_PIN, HIGH);
delay(200);
digitalWrite(LED_PIN, LOW);
delay(200);
}
}
void shortPressAction() {
unsigned long currentTime = millis();
while (digitalRead(BUTTON_PIN) == HIGH && (millis() - currentTime) < 1000) {
ledState = !ledState;
digitalWrite(LED_PIN, ledState);
delay(100);
}
}
```
这个示例使用了wiringPi库来控制GPIO引脚的输入和输出。在编译和运行代码之前,请确保已在系统中安装了wiringPi库。
示例代码中使用`digitalRead()`函数读取按键状态,使用`digitalWrite()`函数控制LED灯的亮灭状态,以及`millis()`函数获取当前时间。
在`main()`函数中,通过比较当前按键状态`buttonState`和上一次按键状态`lastButtonState`,可以检测到按键的按下和释放动作。在按键释放时,通过判断按下时间`buttonPressTime`的长短,分别调用`longPressAction()`和`shortPressAction()`函数来控制LED灯的亮灭状态。
`longPressAction()`函数会循环执行5次,每次将蓝色LED灯亮灭切换,每次亮灭持续200毫秒。
`shortPressAction()`函数会在按键短按时执行,持续时间小于1秒。它会不断地切换LED灯的亮灭状态,每次亮灭持续100毫秒,直到按键释放或时间超过1秒。
请注意,这只是一个简单的示例,实际应用中可能需要根据具体硬件和需求进行适当的修改和调整。
阅读全文