//按键分时检测程序
//
//功能:短按--显示2;长时间按--显示1;
//说明:测试通过
//作者:朱世民
#include "reg51.h"
#define uchar unsigned char
#define uint unsigned int
uchar code duan[]={0x28, 0x7E, 0xA2, 0x62, 0x74,
0x61, 0x21, 0x7A, 0x20, 0x60,0xff};
sbit k1=P3^2; //长短时间按键
sbit k2=P3^3; //复位键
sbit led1=P1^1; // 按下指示灯
sbit led2=P1^2; // 长按输出指示
sbit led3=P1^3; // 短按输出指示
uint n,i;
void delay(uchar tt)
{uchar j;
while(tt--)
for(j=220;j>0;j--);
}
void disp()
{P0=duan[i];
P2=0x7f;
delay(10);
P2=255;
}
void key()
{if(!k1)
{disp();
if(!k1)
{while(!k1) //按键延时(n计数)
{disp();led1=0; n++;if(n>55)break; } //若>55跳出,防止数据溢出
if(n>50){P1=255;led2=0;i=1;} //若仍然按下(长按)
else {P1=255;led3=0;i=2;} //若已松开(短按)
while(!k1) disp(); //等待松开,防止连续运行按键程序
}
}
}
//======
void main()
{i=0;
while(1)
{k1=1;
n=0;
if(!k2)P1=255;//将P1端口复位
disp();
key();
}
}