实际上用单片机实现电平式触摸的原理是简单的,因为手指触摸即有电平的变化,读出电平状态就可以处理按键了。与之相比,看上去更高级一些的电容式触摸技术就没有这么简单了,所谓的“更高级”并不是因为它的技术实现复杂,还是指在应用上显得更文雅。电容式触摸技术可以让手指不接触到金属导线,给用户的感觉是更安全的。因为谁也不能保证裸露在外的金属片会不会带有上千伏的电压。电容式触摸技术的另一个优势是在产品设计方面。对于我们电子爱好者来说,找到一款适合自己DIY作品的外壳是很困难的,有的外壳制作高手可以在很短的时间内制作出精致又专业的外壳,可是并不是每个人都有这样的本领。为露出微动开关而在外壳上钻孔是再平常不过的了,可是钻了孔就很难美观了,我也一时为这个问题困惑。幸好有电容式触摸技术,可以把我们的触摸片设计在塑料外壳的内部(外壳不能是金属的,不然电容触摸就没有效果了),外壳的表面只要贴一张标签,写明这是触摸按键,具有什么功能就可以了。
(详细内容:http://www.cndzz.com/diagram/3942_3943/96220.html)
防误判部分源程序
/******************************************************************************
函数名:触摸按键处理函数
调 用:? = Read_R ();
参 数:无
返回值:bit 1表示有感应物,0表示没有感应物
结 果:
备 注:需要根据实现应用调协灵敏度和其他参数
/*****************************************************************************/
bit Read_R (void){
unsigned char R,ii,m=0,i,j,k;
bit aa;
for(ii=0;ii<3;ii++){ //循环检查防干扰
j=0;k=0;
for(i=0;i<10;i++){ //一次采集数据的数量
DELAY_MS (3); //3毫秒延时
R = Read (0); //ADC读取数据
if(R < 0x2F){ //此参数可调整感应灵敏度值在0x01到0x2F
k++; //波谷计数加1
}
if(R == 0xFF){ //ADC读数的最大值必须等于0xFF
j++; //波峰计数加1
}
}
if(k>1 && j>1){ //触摸波形的数量积加m的值
m++;
}else{
m=0; //如果波形条件不符合则m=0
}
}
if(m>2){ //根据m的数值判断是否有感应物体
aa =1;
}else{
aa=0;
}
return(aa); //将aa作为返回值
}
/*****************************************************************************/
欢迎光临 (http://www.51hei.com/bbs/) | Powered by Discuz! X3.1 |