触摸按键方案——解放定时器:
当第一次接触触摸按键的时候觉得还是蛮神奇的。
后来做过一次项目在这上面稍微有点灵感,于是结合原子大哥的程序修改了一下源程序。
主要有以下两个方面的提高:
①:解放了定时器,理论上给我一个电阻,随便一个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
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
一周热门 更多>