单片机学习小组
直播中

小萃米

11年用户 801经验值
私信 关注

怎样通过按键处理led来演示IO输入模式的配置呢

怎样通过按键处理led来演示IO输入模式的配置呢?有哪些配置步骤?

回帖(1)

张秀云

2022-1-27 13:36:08
本节通过按键处理led来演示IO输入模式的配置
1、根据原理图按键找到对应的引脚

2、打开cubemx选择对应的芯片创建工程
3、配置系统时钟,打开外部高速时钟,配置时钟频率为72MHz


4、按键对应的引脚模式配置为输入模式

5、这里还要打开led用来做效果
6、根据原理图可知按键均是低电平触发(高电平触发的引脚这里没有展示,只需要反转后面的配置即可)

7、对于低电平触发的按键我们要将IO口配置为上拉模式(对于高电平触发的按键要配置成下拉模式)

8、生成工程,打开工程,在gpio.c文件里面添加下面的函数


uint8_t KEY_Scan(uint8_t bu_sign)
{
        static uint8_t sign=1;
        if(bu_sign) //支持连按
                sign=1;
        if((sign==1)&&(KEY0==0||KEY1==0||KEY2==0||WK_UP==1))
        {
                HAL_Delay(10);
          sign=0;
                if(KEY0==0||KEY1==0||KEY2==0||WK_UP==1)
                {
                        if(KEY0==0) return 1;
                        else if(KEY1==0) return 2;
                        else if(KEY2==0) return 3;
                        else if(WK_UP==1) return 4;
                }
  }
        else if(KEY0==1||KEY1==1||KEY2==1||WK_UP==0) sign=1;
  return 0;
}


9、在gpio.h文件里面添加图示宏定义以及函数声明


#define KEY0 HAL_GPIO_ReadPin(GPIOE,GPIO_PIN_4)
#define KEY1 HAL_GPIO_ReadPin(GPIOE,GPIO_PIN_3)
#define KEY2 HAL_GPIO_ReadPin(GPIOE,GPIO_PIN_2)
#define WK_UP HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_0)


uint8_t KEY_Scan(uint8_t bu_sign);


10、主函数如图所示

uint8_t key;
key=KEY_Scan(0);
if(key)
switch(key)
{
case 1:HAL_GPIO_WritePin(GPIOB,GPIO_PIN_5,GPIO_PIN_RESET); break;
case 2:HAL_GPIO_WritePin(GPIOE,GPIO_PIN_5,GPIO_PIN_RESET); break;
case3:HAL_GPIO_WritePin(GPIOB,GPIO_PIN_5,GPIO_PIN_SET);HAL_GPIO_WritePin(GPIOE,GPIO_PIN_5,GPIO_PIN_SET); break;
case4:HAL_GPIO_WritePin(GPIOB,GPIO_PIN_5,GPIO_PIN_RESET);HAL_GPIO_WritePin(GPIOE,GPIO_PIN_5,GPIO_PIN_RESET); break;
default:break;
}
11、烧录进单片机即可观察现象啦。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分