HAL库STM32CuBe实现按键扫描芯片STM32F407

芯片STM32F407ZGT6

注意:这芯片的按键不是矩阵按键

分类:

  • 按结构原理分:

    • 触点式开关按键
    • 无触点开关按键
  • 接入方式

    • 独立式按键
    • 矩阵式键盘

————————————————————————————————————————————

矩阵式键盘识别方法(行扫描法)

24e5e8073e45da56768638850c7a8e1d.png

五向按键,这种按键的按键检测方法比较简单,配置起来也很简单。配置相应的引脚即可。(注意:大部分五向按键直接按下是复位键,这里就是)

abffb134a8244daba12b022ea293571a.png

 SYS:

034fce4a67ed4a66bb914cdb4c6f5876.png

 RCC:

8ec9e1f0ecff4bf0a648ab3cade131d2.png

 按键在芯片的位置:

08ff5b8894e943759e7b887184a4da12.png

 GPIO:

2902726328d5444487490c5849d2bbab.png

我这芯片PF6到PF9都是按键引脚,PE3、PE4、PG9分别是三个LED,PG7时蜂鸣器。(嫌吵可以不用蜂鸣器)

dc12a26c42874eeab116d7e97d3159a7.png

剩下的都是老样子了,然后直接生成代码,之前不懂得可以看看这篇,我们直接进入代码。https://blog.csdn.net/weixin_53000184/article/details/124246194?spm=1001.2014.3001.5502

 我们想要写个按键扫描的函数,如下:0b06bf191d004c399ea502bff00253f0.png

void Scan_Keys() {
	if(HAL_GPIO_ReadPin(GPIOF,GPIO_PIN_9)==GPIO_PIN_RESET) {
		HAL_Delay(30);
		if(HAL_GPIO_ReadPin(GPIOF,GPIO_PIN_9)==GPIO_PIN_RESET) {
			HAL_GPIO_TogglePin(GPIOE,GPIO_PIN_3);
			while(HAL_GPIO_ReadPin(GPIOF,GPIO_PIN_9)==GPIO_PIN_RESET);
		}
	}
	if(HAL_GPIO_ReadPin(GPIOF,GPIO_PIN_8)==GPIO_PIN_RESET) {
		HAL_Delay(30);
		if(HAL_GPIO_ReadPin(GPIOF,GPIO_PIN_8)==GPIO_PIN_RESET) {
			HAL_GPIO_TogglePin(GPIOE,GPIO_PIN_4);
			while(HAL_GPIO_ReadPin(GPIOF,GPIO_PIN_8)==GPIO_PIN_RESET);
		}
	}
	if(HAL_GPIO_ReadPin(GPIOF,GPIO_PIN_6)==GPIO_PIN_RESET) {
		HAL_Delay(30);
		if(HAL_GPIO_ReadPin(GPIOF,GPIO_PIN_6)==GPIO_PIN_RESET) {
			HAL_GPIO_TogglePin(GPIOG,GPIO_PIN_7);
			while(HAL_GPIO_ReadPin(GPIOF,GPIO_PIN_6)==GPIO_PIN_RESET);
		}
	}
	if(HAL_GPIO_ReadPin(GPIOF,GPIO_PIN_7)==GPIO_PIN_RESET) {
		HAL_Delay(30);
		if(HAL_GPIO_ReadPin(GPIOF,GPIO_PIN_7)==GPIO_PIN_RESET) {
			HAL_GPIO_TogglePin(GPIOG,GPIO_PIN_9);
			while(HAL_GPIO_ReadPin(GPIOF,GPIO_PIN_7)==GPIO_PIN_RESET);
		}
	}
}

 里面四个其实一样的,我就拿一个来讲解。其他的都差不多。

if(HAL_GPIO_ReadPin(GPIOF,GPIO_PIN_9)==GPIO_PIN_RESET) {     //这个检测按键是否按下
		HAL_Delay(30);   //这个时延时函数,里面参数以ms为单位,直接调用即可,延时、消抖
		if(HAL_GPIO_ReadPin(GPIOF,GPIO_PIN_9)==GPIO_PIN_RESET) { //检测按键按下
			HAL_GPIO_TogglePin(GPIOE,GPIO_PIN_3);    //反转PE3的电平,之前是低电平就变高电平
			while(HAL_GPIO_ReadPin(GPIOF,GPIO_PIN_9)==GPIO_PIN_RESET);
                    //上面这行是检测按键是否长按
		}
	}

 编写好按键扫描函数就差不多了。然后再main函数里调用就可以了,当然,按键扫描函数的内容也可以直接放主函数里直接使用。

74b022a83d9b4353bc11bc507ed0456f.png

 效果就不展示了,就是按下按键相应的LED(蜂鸣器)就会亮(响)。

STM32F407ZG按键控制LED、蜂鸣器-C文档类资源-CSDN下载 

  • 4
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不会创建对象

谢谢考官。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值