现在正在做一个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--)
{
}
}
} |