求一个PIC的触摸例程,要求商用,谢谢!

2020-02-06 09:55发布

本帖最后由 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;
   }
}

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。