解放定时器的触摸按键方案

2019-10-16 05:30发布

触摸按键方案——解放定时器
当第一次接触触摸按键的时候觉得还是蛮神奇的。
后来做过一次项目在这上面稍微有点灵感,于是结合原子大哥的程序修改了一下源程序。
主要有以下两个方面的提高:
解放了定时器,理论上给我一个电阻,随便一个IO口我就能做一个触摸按键。
:提高了稳定性,因为经过测试原子大哥的源程序按一次按键有时候其实不止一次。(即使临界触摸下依然稳定)

实现思路:(以STM32F407为例,F1系列只需要微小调整即可) [mw_shl_code=c,true]u16 TPAD_Get_Val1(void) { GPIO_InitTypeDef GPIO_InitStructure; u16 temp=0; GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5; GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN; //浮空输入 GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; GPIO_Init(GPIOA, &GPIO_InitStructure); while(!GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_5))temp++;//▓这一句就完全解放了定时器 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT; //推挽输出 GPIO_Init(GPIOA, &GPIO_InitStructure); GPIO_ResetBits(GPIOA,GPIO_Pin_5); //放电 while(GPIO_ReadOutputDataBit(GPIOA, GPIO_Pin_5)); return temp; }[/mw_shl_code]
提高稳定性方面只是做了微小的改动,就不提了。
使用方法请参考工程。
注意:我只测试了我自己的板子,包括战舰(F1)和探索者(F4)两种,其他板子可能参数需要更改,更改touch pad下的u16 tpad_default_val;即可,其他非上述板子还需要更改TPAD_Scan函数里面的参数,请自行更改,很简单。

此外,本人之前还根据原子大哥的程序在LCD上实现了任意大小字体显示方案,有兴趣的可以看看:http://www.openedv.com/posts/list/40508.htm
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。