STM32点亮LED灯(按键轮询法)

 

  本篇文章介绍的用按键的方式点亮LED灯;开发板采用的是STM32F103C8T6;原理图如下:

 通过原理图我们可以知道STM32F103C8T6有两个按键,两个LED灯;现在我们通过编程来控制LED的状态。我们按下KEY1,LED1亮,再次按下,翻转LED1的状态,灭掉,按下KEY2,LED2亮,再次按下,翻转LED2的状态,灭掉。

开发方式为HAL库开发;使用STM32CubeMx:

PB8,PB9默认设置高电平;生成代码进入Keil5;我们只需要创建一个函数:

#define KEY_ON 0
#define KEY_OFF 1


uint8_t key_scan(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin)        //按键轮询函数
{

 if(HAL_GPIO_ReadPin(GPIOx,  GPIO_Pin)==GPIO_PIN_RESET){     //调用HAL_GPIO_ReadPin 这个函数读取管脚状态并判断,如果按下返回KEY_ON
  /*按键按下*/
 while(HAL_GPIO_ReadPin(GPIOx,  GPIO_Pin)==GPIO_PIN_RESET);  
 return KEY_ON;
 }else{
 /*按键松开*/
	 return KEY_OFF;
      }

}

 我们在main函数里的while(1)循环里面调用这个函数

 while (1)
  {
    /* USER CODE END WHILE */
//HAL_GPIO_WritePin(GPIOB, GPIO_PIN_8|GPIO_PIN_9, GPIO_PIN_RESET);
if(key_scan(GPIOA,  GPIO_PIN_0)==KEY_ON)        //  //调用按键轮询函数,如果按键KEY1按下,翻转LED1的状态
/* USER CODE BEGIN 3 */
  HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_8);

  if(key_scan(GPIOA,  GPIO_PIN_1)==KEY_ON)     //调用按键轮询函数,如果按键KE2按下,翻转LED2的状态
/* USER CODE BEGIN 3 */
  HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_9 );

  
}

最后我们就可以通过按键的方式控制LED的状态了

...全文
502 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

1,365

社区成员

发帖
与我相关
我的任务
社区描述
柳职院电子信息工程学院同学们的学习园地
社区管理员
  • c_university_1974
  • qq_39231145
  • zhuisir
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

各位加入社区的同学,请完善社区信息,把社区昵称改为【班级-姓名】,社区签名改为【班级-学号-姓名】的格式

如【社区昵称】20计应1班  张某某(班级用简称)

     【社区签名】2020级计算机应用技术1班 20201234567 张某某 (班级用全称)

试试用AI创作助手写篇文章吧