求一个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;
   }
}

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
10条回答
gyd0317
1楼-- · 2020-02-06 11:51
你这个应该是官方例程吧,结合硬件修改阈值,官方好像还有一个touch相关的工具
shhludb
2楼-- · 2020-02-06 13:36
这玩意布线很有讲究,尽量细点,我用了罗姆专用芯片效果也不好
tony001
3楼-- · 2020-02-06 17:27
看个别人用PIC做的,效果超好啊,
sup888
4楼-- · 2020-02-06 17:52
既然硬件一样,把他们的芯片吹下来,换你们的芯片和程序,看看是不是PCB方面的原因
tony001
5楼-- · 2020-02-06 18:44
 精彩回答 2  元偷偷看……
a312835782
6楼-- · 2020-02-06 23:52
pic有个mtouch。  效果蛮好的。   

触摸布线没那么讲究一样可以用。

一周热门 更多>