触摸按键问题 之 按着“触摸按键TPAD”,然后按复位键,之后松开,则触摸按键失灵
这两天研究了下触摸按键,看完原子哥的“STM32开发指南”发现这么个问题: 按着“触摸按键TPAD”,然后按复位键,之后松开,则触摸按键会失灵。研究了下原子哥的程序,发现
[mw_shl_code=c,true]u8 TPAD_Init()
{
u16 buf[10];
u16 temp;
u8 j,i;
TIM5_CH2_Cap_Init(TPAD_ARR_MAX_VAL,SystemCoreClock/1000000-1);
for(i=0;i<10;i++)//
{
buf=TPAD_Get_Val();
delay_ms(10);
}
for(i=0;i<9;i++)//
{
for(j=i+1;j<10;j++)
{
if(buf>buf[j])//
{
temp=buf;
buf=buf[j];
buf[j]=temp;
}
}
}
temp=0;
for(i=2;i<8;i++)temp+=buf;
tpad_default_val=temp/6;
printf("tpad_default_val:%d\r\n",tpad_default_val);
if(tpad_default_val>TPAD_ARR_MAX_VAL/2)return 1;
return 0;
}[/mw_shl_code]
TPAD_Init()这个函数中最后一句if(tpad_default_val>TPAD_ARR_MAX_VAL/2)return 1;这里有个小问题:我正常复位时串口打印的值为tpad_default_val:79
按着“触摸按键TPAD”,然后按复位键,之后松开,发现串口打印的值为 tpad_default_val:4107 ,而TPAD_ARR_MAX_VAL/2的值为32767,远大于4170,,所以if(tpad_default_val>TPAD_ARR_MAX_VAL/2)return 1; 这条语句永远都不执行。
为解决这个问题,我将上句该为if(tpad_default_val>TPAD_ARR_MAX_VAL/20)return 1; 并 在主函数里的TPAD初始化处做了如下修改:
我把原来的初始化程序TPAD_Init(); //初始化TPAD修改为while(TPAD_Init()) delay_ms(10);//如果TPAD_Init()返回值为1,则说明触摸按键初始化失败,一直等待到初始化成功为止,否则不会往下继续执行主函数
这里也谢谢原子哥
------------------------完-----------------------完----------------------------
|