打印

关于STC12C5410AD做触摸按键的问题

[复制链接]
5783|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
inrr|  楼主 | 2009-10-5 13:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
现在正在做一个STC12C5410AD做触摸按键的试验(直接用IC的引脚P3.7做按键而不用外接元件,P1做输出显示),程序写好了之后试验发现触摸按键有检测到了,只是手一直放在按键上的话,输出就会反复跳转,现将程序放在下面,请大家帮忙看看怎样修改成不反复跳转.谢谢了!
   //一个用STC单片机做的简单触摸按键的代码
#include <STC12C5410AD.H>
#define uchar unsigned char
#define uint    unsigned int

uchar ErrTime;
void SysInt(void);
void Delayms(uint ms);
void Delayus(uint us);
void GetAd(void);
void KeyProcess(void);
void GetRef(void);
uint temp,Adtemp,Reftemp;
main(void)
{
SysInt();  
while(1)
{
  KeyProcess();
}
}
void GetRef(void)
{
uint i=0,j=0;
temp=0;
P3 =P3&0x80;
Delayms(2);
P3M0 = 0x80;
P3M1 = 0x80; //1000,0000 P3.7先设为开漏。断开内部上拉电阻
if((P3&0x80)!=0)
  {
  //Delayms(5);
     Delayus(2);//延时50us
      i++;
   }  
  Reftemp=i;
}

void GetAd(void)
{
uint i=0,j=0;
temp=0;
P3 =P3&0x80;
Delayms(2);
P3M0 = 0x80;
P3M1 = 0x80; //1000,0000 P3.7先设为开漏。断开内部上拉电阻
if((P3&0x80)!=0)
  {
     Delayus(2);//延时50us
      i++;
   }  
    Adtemp=i;
}
void KeyProcess(void)
{
   GetAd();
   Delayms(3);//延时1ms
  if(Reftemp!=Adtemp)
     {P1 =0x00;
  Delayms(50);}
  else
     {P1 =0xaa;
  Delayms(50); }
}

void SysInt(void)
{
   GetRef();
}
void Delayms(unsigned int n)
{
       unsigned int i,j;
       for(j=n;j>0;j--)
       {
    for(i=762;i>0;i--)
    {
   
   
    }
    }
}
void Delayus(unsigned int n)
{
       unsigned int i,j;
       for(j=n;j>0;j--)
       {
    for(i=55;i>0;i--)
    {
   
   
    }
    }
}

相关帖子

沙发
lsqdesign| | 2009-10-5 17:38 | 只看该作者
欢迎加入产品量产退货俱乐部

使用特权

评论回复
板凳
inrr|  楼主 | 2009-10-6 12:52 | 只看该作者
对于以上的程序又作了修改(取值平均化),但是不是一个样,现把程序贴在下面,请各位帮忙看看.
//一个用STC单片机做的简单触摸按键的代码
#include <STC12C5410AD.H>
#define uchar unsigned char
#define uint    unsigned int

uchar ErrTime;

void SysInt(void);
void Delayms(uint ms);
void Delayus(uint us);
void GetAd(void);
void KeyProcess(void);
void GetRef(void);
void Time(void);
uint temp,Adtemp,Reftemp,Atemp;
main(void)
{
  SysInt();
  while(1)
{
  //P1 =0x0f;
  Delayms(50);
  KeyProcess();
}
}
void GetRef(void)
{
uchar i;
temp=0;
for(i=0;i<10;i++)
{
Time();
temp+=Atemp;
}
temp/=10;
temp-=4;
  Reftemp=temp;

}

void GetAd(void)
{
uchar i;
temp=0;
for(i=0;i<10;i++)
{
Time();
temp+=Atemp;
  }
temp/=10;
temp-=4;
  Adtemp=temp;


}

void Time(void)
{
uint i=0;
P3 =0x80;
//Delayms(1);
P3M0 = 0x80;
P3M1 = 0x80; //1000,0000 P3.7先设为开漏。断开内部上拉电阻
if((P3&0x80)!=0)
  {       
     Delayus(2);//延时50us
      i++;
          //if (i>10) ErrTime=(j++);
   }  
    Atemp=i;
}

void KeyProcess(void)
{
  uint j=0;
   GetAd();
   Delayms(5);//延时1ms
  if(Reftemp!=Adtemp) P1=0xEF;
  else P1=0xAA;
  //if(j!=0) P1=0xEF;
  //else        P1=0xAA;
}

void SysInt(void)
{
  // Delayms(50);//延时1ms
   GetRef();
}

void Delayms(unsigned int n)

{

       unsigned int i,j;

       for(j=n;j>0;j--)

       {
           for(i=762;i>0;i--)
           {
          
          
           }
           }
}

void Delayus(unsigned int n)

{

       unsigned int i,j;

       for(j=n;j>0;j--)

       {
           for(i=55;i>0;i--)
           {
          
          
           }
           }
}

使用特权

评论回复
地板
inrr|  楼主 | 2010-3-1 23:26 | 只看该作者
经过修改,已经可以实现触摸按键的功能了,但是不是很满意.现在把程序贴上来.请大家多发表意见!(直接用IC的引脚P1.0做按键而不用外接元件,P3.0做输出显示),
//一个用STC单片机做的简单触摸按键的代码
#include <STC12C5410AD.H>
#define uchar unsigned char
#define uint    unsigned int

void Delayms(uint ms);
void Delayus(uint us);

uchar x,y;

void Delayms(unsigned int n)
{
       unsigned int i,j;
       for(j=n;j>0;j--)
       {
           for(i=762;i>0;i--)
           {          
           }
           }
}

void Delayus(unsigned int n)
{
       unsigned int i,j;
       for(j=n;j>0;j--)
       {
           for(i=55;i>0;i--)
           {                     
           }
           }
}

void GetAd(void)
{
P1 =P1|0x01;
Delayms(5);
P1M0 = 0x01;
P1M1 = 0x01; //1000,0000 P1.0先设为开漏。断开内部上拉电阻

         while(P1&0x01)
         {
     Delayus(5);//延时5us
         if(P1&0x01)
         {
              x++;
         }       
        }     
}

main(void)
{
  while(1)
{
    GetAd();
   Delayms(5);//延时1ms
  if(x>y)
  {P3=0xfe;x=0;}
  else P3=0xff;
}
}

使用特权

评论回复
5
804431966| | 2014-8-16 10:54 | 只看该作者
请问下各位
sfr P3M1=0XB1;
sfr P3M0=0XB2;
sfr P1M1=0X91;
sfr P1M0=0X92;这几个是什么意思,配置了之后对IO口的影响,急求!!!

使用特权

评论回复
6
创隆电子| | 2014-8-16 11:09 | 只看该作者
详细看STC资料

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

17

帖子

0

粉丝