K2按键控制led灯,第一次全亮第二遍流水灯,第三次按全灭,循环往复ARMcortexm9
时间: 2023-07-02 12:18:19 浏览: 133
按键控制LED灯的亮灭.C
5星 · 资源好评率100%
感谢您提供了更具体的硬件平台信息。ARM Cortex-M9 处理器是较为高端的嵌入式处理器,具有较为强大的性能和丰富的外设资源。下面是基于您的需求,针对 Cortex-M9 处理器的代码实现:
```c
#include "stm32f4xx.h"
#include "delay.h"
int main()
{
GPIO_InitTypeDef GPIO_InitStruct;
// 启用 GPIOA 时钟
RCC->AHB1ENR |= RCC_AHB1ENR_GPIOAEN;
// 配置 PA0 为输入模式,下拉输入
GPIO_InitStruct.Pin = GPIO_PIN_0;
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
GPIO_InitStruct.Pull = GPIO_PULLDOWN;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
// 配置 PA1-PA4 为输出模式
GPIO_InitStruct.Pin = GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_3 | GPIO_PIN_4;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
while(1)
{
// 判断按键是否按下
if(HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_0) == GPIO_PIN_RESET)
{
// 第一次按下,全亮
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_3 | GPIO_PIN_4, GPIO_PIN_SET);
delay_ms(1000); // 延时 1s
}
else
{
// 第二次按下,流水灯
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_1, GPIO_PIN_SET);
delay_ms(1000); // 延时 1s
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_2, GPIO_PIN_SET);
delay_ms(1000); // 延时 1s
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_3, GPIO_PIN_SET);
delay_ms(1000); // 延时 1s
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4, GPIO_PIN_SET);
delay_ms(1000); // 延时 1s
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_3 | GPIO_PIN_4, GPIO_PIN_RESET);
}
// 第三次按下,全灭
if(HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_0) == GPIO_PIN_RESET)
{
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_3 | GPIO_PIN_4, GPIO_PIN_RESET);
delay_ms(1000); // 延时 1s
}
}
}
```
这份代码实现使用了 HAL 库,对于 Cortex-M9 处理器来说是比较常用的库之一。需要注意的是,延时函数库需要您自己实现,这里提供一个简单的实现例子:
```c
void delay_us(uint32_t n)
{
uint32_t i;
for(i = 0; i < n; i++)
{
__NOP();
}
}
void delay_ms(uint32_t n)
{
uint32_t i;
for(i = 0; i < n; i++)
{
delay_us(1000);
}
}
```
希望这些信息对您有所帮助,如果您有其他问题可以继续向我提问。
阅读全文