STMF4STMF4立创天空星相关学习笔记 button/

#相关声明,本系列学习文档,用于记录学习过程中,解决疑问的过程,参考文档,链接在文章末尾       

        在日常使用中,或者pcb设计中,常用按键类型有 贴片,直插 ,1*4p ,1*2p(也就是2个引脚和4个引脚的意思),可以说按键是最常用的,基本外设之一了。

      #按键为什么要进行消除抖动,如果没有消除抖动会怎么样

                                              

        这是1*4P的按键内部,物理结构,图中C指向弹簧片,当外界按下,弹簧片,就会和B连接,这个时候电平就会变化为GND,在松开这个过程电平,回复正常,由于C的结构是一个弹簧片,当松开的时候内部弹簧片,实际弹簧片是会发生抖动的,断断续续的跟B触碰,而这个过程就是抖动,这个抖动对应在电路上,电路会出现高低电平的波动,如果不进行消抖,那么按键,当重复按下时,会出现失灵等情况(一次按下会被判断为多次),到此,我们理解了,为什么会有抖动,不消除抖动的后果是什么。

         总结:按键出现抖动,是因为内部物理结构,个人认为按键抖动,只会在松开时出现

                                   #如何进行消除抖动

                                                   #相关软件消除抖动

 常见的消除抖动方式,分为 硬件消抖,软件消抖,软件消除抖动:

        软件消除抖动,是通过在程序中,通过延时,在此检测电平,消除抖动,这种方法,如果没有操作系统,延时期间,如果没有中断函数,是不会执行任何任务的,就是在函数函数处,等待延时结束,比较浪费资源,通常延时为5-10ms,相关代码如下所示

uint8_t flag;
flag = 0;
void key_scan(void)
{
	if( RESET == GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_0) )
	{
		delay_ms(20);//延时20ms在此检测防止抖动

		if( flag )
		{
			GPIO_SetBits(GPIOB, GPIO_Pin_2);
			flag = 0;
		}
		else
		{
			GPIO_ResetBits(GPIOB, GPIO_Pin_2);
			flag = 1;
		}

		while(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_0) == SET) // 等待按键松开
		{
		/* 延迟消抖 */
		delay_ms(20);//延时20ms在此检测防止抖动
		
	}	
}

        这种方式相信大家也比较常用,本文着重讲解,一下笔者对硬件电路消抖的,理解

                                                        #相关硬件消除抖动

 硬件消抖:使用电容储能特性,消除电路的抖动,不会使引脚电平出现波动

        电容储能特性,也就是电容是会进行充放电的,利用到这个特性的电路有很多,比如 R C 延时电路  利用电阻与电容的特性,进行延时,具体硬件消抖电路如下图所示。

                       

        前文,提及到,按键抖动只会在松开时出现(个人理解),也就是会将一次过程,当成多次过程判断,这个电路用到了,电容储能特性,通俗易懂的来讲,这个100nf电容,将会充电,放电,像电池一样,当按键松开的时(电平 低  -----> 高),出现抖动,电平高低变换,这个时候,电容进行,放电,放完的时候,基本也就没有抖动了,一般最为常用的,还是软件消抖,硬件消抖,是有成本的。

                                                       #相关扩展 按键矩阵键盘

        为什么会有矩阵键盘这个东西产生?他有什么用处,我们都知道,单片机GPIO的引脚实际上是与芯片相连接的,但是芯片为了追求更小的体积,更多的功能,这就导致了,每个引脚都身兼数职,也就也是有很多的功能,可以进行复用选择,为了节省GPIO引脚资源,有没有一种方法,可以然他一个引脚也控制,多个,按键呢?有的,矩阵键盘就产生了。

                                           

        一般常见的为4*4矩阵键盘。缺点,矩阵键盘没有办法检测,多个按键同时按下,这个跟其程序特点有关。

#相关矩阵键盘实现原理

        矩阵键盘电路图如下图所示,8个IO引脚管理一个4*4的键盘,相关原理:我们在软件上,当给GPIOA1~4进行拉低,GPIOA5~8 4个 IO 引脚进行拉高,当任何一个按键按下时,高电平会瞬间被拉低,通过读取引脚高低电平就知道了,是那一列的按键,被按下,这个时候,将GPIOA1~4拉高 GPIOA5~8拉低,读取是哪一行,这样行和列都有了,就知道具体是那个按键被,按下。

               

           最后希望对你有所帮助!!!个人理解,如有失误,欢迎指出,核实立改

  电容(3)电解电容储能篇_电容储能电路-CSDN博客

【立创·天空星STM32F407VET6】入门手册 - 飞书云文档 (feishu.cn)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值