请你在NYIDE上,用C语言编写一个按键控制两个LED灯独立亮灭的例程
时间: 2024-05-10 13:14:08 浏览: 18
好的,我会为您提供C语言代码。请注意,以下代码是基于STM32F4Discovery开发板和STM32CubeIDE环境编写的,您需要根据自己的硬件平台和开发环境进行适当的修改。
```c
#include "main.h"
#include "stm32f4xx_hal.h"
/* 定义LED灯的GPIO端口和引脚 */
#define LED_GREEN_GPIO_PORT GPIOG
#define LED_GREEN_GPIO_PIN GPIO_PIN_13
#define LED_RED_GPIO_PORT GPIOD
#define LED_RED_GPIO_PIN GPIO_PIN_14
/* 定义按键的GPIO端口和引脚 */
#define BUTTON_GPIO_PORT GPIOA
#define BUTTON_GPIO_PIN GPIO_PIN_0
/* 定义LED灯的初始状态 */
#define LED_GREEN_OFF HAL_GPIO_WritePin(LED_GREEN_GPIO_PORT, LED_GREEN_GPIO_PIN, GPIO_PIN_RESET)
#define LED_GREEN_ON HAL_GPIO_WritePin(LED_GREEN_GPIO_PORT, LED_GREEN_GPIO_PIN, GPIO_PIN_SET)
#define LED_RED_OFF HAL_GPIO_WritePin(LED_RED_GPIO_PORT, LED_RED_GPIO_PIN, GPIO_PIN_RESET)
#define LED_RED_ON HAL_GPIO_WritePin(LED_RED_GPIO_PORT, LED_RED_GPIO_PIN, GPIO_PIN_SET)
/* 定义按键的状态 */
#define BUTTON_PRESSED (HAL_GPIO_ReadPin(BUTTON_GPIO_PORT, BUTTON_GPIO_PIN) == GPIO_PIN_RESET)
/* 程序入口 */
int main(void)
{
HAL_Init();
/* 初始化LED灯的GPIO端口 */
__HAL_RCC_GPIOG_CLK_ENABLE();
__HAL_RCC_GPIOD_CLK_ENABLE();
LED_GREEN_OFF;
LED_RED_OFF;
/* 初始化按键的GPIO端口 */
__HAL_RCC_GPIOA_CLK_ENABLE();
/* 进入主循环 */
while (1)
{
/* 检测按键是否被按下 */
if (BUTTON_PRESSED)
{
/* 如果按键被按下,则翻转绿灯的状态 */
HAL_Delay(50); // 延时去抖
if (BUTTON_PRESSED)
{
LED_GREEN_ON;
HAL_Delay(500);
LED_GREEN_OFF;
}
}
else
{
/* 如果按键没有被按下,则翻转红灯的状态 */
LED_RED_ON;
HAL_Delay(500);
LED_RED_OFF;
}
}
}
```
以上代码中,我们使用了STM32的HAL库来控制GPIO口的输入输出状态。程序中定义了两个LED灯和一个按键的GPIO端口和引脚,然后进入主循环。主循环中不断检测按键的状态,如果按键被按下,则翻转绿灯的状态,如果按键没有被按下,则翻转红灯的状态。在延时中加入去抖处理可以避免按键产生的抖动问题。