本帖最后由 tony001 于 2017-7-27 18:02 编辑
之前做一个触摸方案用的专用触摸IC,太贵了,现在用PIC16F1936来做4键触摸,,但实在效果不太理想啊,
看了别人做的四键效果相当不错的,我们硬件一样,肯定的说,我的软件做的不如别人好啊,
#include"head.h"
void Cap_ISR(void)
{
static int trip[6]={136,134,136,144,128,152},raw=0;
static char AvgIndex=0,Index=1;
static char DIM_Index[6]={1,2,3,0,5,4};
if((Cap_bit==1)&&(TMR0IF==0))
{
TMR1ON=0;raw=TMR1H<<8|TMR1L;KEY_Avg[Index]=raw;
if(raw<(Cap_Avg[Index]-trip[Index]))//如果当前通道的频率值小于当前通道平均值减去差值,表示有按键按下
{
switch(Index)
{
case 0: {Key_data=Key_data|1;break;}
case 1: {Key_data=Key_data|2;break;}
case 2: {Key_data=Key_data|4;break;}
case 3: {Key_data=Key_data|8;break;}
case 4: {Key_data=Key_data|16;break;}
case 5: {Key_data=Key_data|32;break;}
case 6: {Key_data=Key_data|64;break;}
case 7: {Key_data=Key_data|128;break;}
case 8: {Key_data=Key_data|256;break;}
case 9: {Key_data=Key_data|512;break;}
case 10:{Key_data=Key_data|1024;break;}
case 11:{Key_data=Key_data|2048;break;}
}
}
else if(raw>(Cap_Avg[Index]-trip[Index]+64))
{
switch(Index)
{
case 0: {Key_data=Key_data&4094;break;}//-1
case 1: {Key_data=Key_data&4093;break;}//-2
case 2: {Key_data=Key_data&4091;break;}//-4
case 3: {Key_data=Key_data&4087;break;}//-8
case 4: {Key_data=Key_data&4079;break;}//-16
case 5: {Key_data=Key_data&4063;break;}//-32
case 6: {Key_data=Key_data&4031;break;}//-64
case 7: {Key_data=Key_data&3967;break;}//-128
case 8: {Key_data=Key_data&3839;break;}//-256
case 9: {Key_data=Key_data&3583;break;}//-512
case 10:{Key_data=Key_data&3071;break;}//-1024
case 11:{Key_data=Key_data&2047;break;}//-2048
}
if(AvgIndex<2)AvgIndex ++;else AvgIndex=0;
if(AvgIndex==2)
{
if(raw>=Cap_Avg[Index]) Cap_Avg[Index]+=((raw-Cap_Avg[Index])>>4);
else Cap_Avg[Index]-=((Cap_Avg[Index]-raw)>>4);
}
}
if(Index<5) Index++; else Index=0; CPSCON1=DIM_Index[Index];//切换通
TMR1H=0;TMR1L=0;TMR1ON=1;
}
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
一周热门 更多>