查看: 1366|回复: 0
打印 上一主题 下一主题

PIC16F690做电容式触摸按键,转载

[复制链接]
跳转到指定楼层
沙发
发表于 2015-3-26 16:24:21 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
前几天在一个PIC论坛看到一篇关于PIC触摸按键的帖子,过来搜索了一下,本站还没有PIC触摸按键的帖子,所以转载过来了

-----------以下为转载内容--------------

设计参考了应用笔记AN1101-1104;

使用串口通信来读取振荡频率,通过读取没有按下和按下按键的不同频率来确定阀值。

程序运行中也可读取每个按键通道的没有触摸时的1/16平均值,通道的扫描时间为10ms循环。



配置字是,__CONFIG (0x3BC4);

#include<pic.h>
#define uchar unsigned char
#define uint unsigned int
uchar COMP1[]={0x94,0x95,0x96,0x97};//按键通道切换
uchar COMP2[]={0xa0,0xa1,0xa2,0xa3};//按键通道切换
uint average[]={0,0,0,0};//按键振荡计数平均值
uint trip[]={400,400,250,320};//按键振荡计数阀值
uchar ltmr1,htmr1;//计时器1的高8位和低8位暂存
uint raw;//16位传感器当前振荡计数值
uchar index=0; //按键标号
uchar keya,keyb,keyc,keyd; //按键状态
//-----------------------------
uchar usdata=0;//串口发送数据端口号
uchar rbuff; //接收缓存
uchar a1,a2,a3,a4,a5;
void init();//初始化配置
void usart();//串口通信
void touchkey();//按键判断
void main()
{
init();//初始化配置
while(1)
{
  usart();//串口通信
   touchkey();//按键判断
}
}
void interrupt intcon()
{
if((T0IF)&&(T0IE))
{
   T0IF=0;
   //进入中断时,10ms读取tmr1的计数值
   htmr1=TMR1H; //读取计数器高8位        
   ltmr1=TMR1L;//读取计数器低8位
   raw=raw|htmr1;
   raw=(raw<<8)|ltmr1;
   // 按钮判断并置位按钮状态
   if(raw<((long)average[index]-(long)trip[index]))
   {
    switch(index)
    {
     case 0:  keya=1; break;
     case 1:  keyb=1; break;
     case 2:  keyc=1; break;
     case 3:  keyd=1; break;
     default:   break;
    }
   }
   // 按钮判断并置位按钮状态滞后量选200
   else if(raw>((long)average[index]-(long)trip[index]+150))
   {
    switch(index)
    {
     case 0:  keya=0; break;
     case 1:  keyb=0; break;
     case 2:  keyc=0; break;
     case 3:  keyd=0; break;
     default:   break;
    }
    //求平均值
    average[index]=average[index]+((long)raw-(long)average[index])/16;
  }
   //按键通道切换每10ms切换
   index=(++index)&0x03;
   CM1CON0=COMP1[index];
   CM2CON0=COMP2[index];  
   //清零寄存器为扫描下一通道准备
   raw=0;
   ltmr1=0;
   htmr1=0;
   TMR0=100;
   TMR1H=0;
   TMR1L=0;
}
if((TMR1IF)&&(TMR1IE))
{
   TMR1IF=0;
   TMR1H=0;
   TMR1L=0;   
}

if((RCIE)&&(RCIF))
{
   rbuff=RCREG;//读取接收缓存的数据
   if(OERR==1)
   {

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 加入因仑

本版积分规则

快速回复 返回顶部 返回列表