stm32f103c8t6两个按键点两个灯的代码
时间: 2023-08-24 19:06:02 浏览: 105
以下是使用STM32F103C8T6的两个按键点两个灯的代码。本示例使用PA0和PA1作为输入引脚,PA2和PA3作为输出引脚。
```c
#include "stm32f10x.h"
void GPIO_Configuration(void);
uint8_t Button_Read(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
int main(void)
{
GPIO_Configuration();
while(1)
{
if(Button_Read(GPIOA, GPIO_Pin_0)) //如果PA0按下
{
GPIO_SetBits(GPIOA, GPIO_Pin_2); //点亮PA2
}
else
{
GPIO_ResetBits(GPIOA, GPIO_Pin_2); //关闭PA2
}
if(Button_Read(GPIOA, GPIO_Pin_1)) //如果PA1按下
{
GPIO_SetBits(GPIOA, GPIO_Pin_3); //点亮PA3
}
else
{
GPIO_ResetBits(GPIOA, GPIO_Pin_3); //关闭PA3
}
}
}
void GPIO_Configuration(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2 | GPIO_Pin_3;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
GPIO_Init(GPIOA, &GPIO_InitStructure);
}
uint8_t Button_Read(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)
{
if(GPIO_ReadInputDataBit(GPIOx, GPIO_Pin) == Bit_RESET)
{
for(int i = 0; i < 10000; i++); //延时去抖动
if(GPIO_ReadInputDataBit(GPIOx, GPIO_Pin) == Bit_RESET)
{
return 1;
}
}
return 0;
}
```
在这个代码中,我们首先调用了`GPIO_Configuration()`函数来初始化GPIO引脚。然后我们进入了主循环,该循环检测每个按键是否按下,并相应地控制LED灯。
在`Button_Read()`函数中,我们实现了按键去抖动,并返回按钮是否按下的状态。如果按钮被按下,该函数返回1,否则返回0。
阅读全文