标题: 基于51单片机自制触摸屏 [打印本页]

作者: sindeer    时间: 2012-5-31 17:21
标题: 基于51单片机自制触摸屏

实际上用单片机实现电平式触摸的原理是简单的,因为手指触摸即有电平的变化,读出电平状态就可以处理按键了。与之相比,看上去更高级一些的电容式触摸技术就没有这么简单了,所谓的“更高级”并不是因为它的技术实现复杂,还是指在应用上显得更文雅。电容式触摸技术可以让手指不接触到金属导线,给用户的感觉是更安全的。因为谁也不能保证裸露在外的金属片会不会带有上千伏的电压。电容式触摸技术的另一个优势是在产品设计方面。对于我们电子爱好者来说,找到一款适合自己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