按键长短按的判断:按下按键开始计时,松手后停止计时,将时间作差得到按键持续时间。设定阈值,大于阈值则为长按,小于则为短按
#include <REGX52.H>
#define KEY4_DOWN 0
#define KEY4_UP 1
sbit K4=P3^3;
int Key_Timestatic,Press_Time,Start_Time,End_Time,Key_Flag=0,T0Count,Length;
int Key_State();
void main()
{
Timer0Init(); //定时器初始化
while(1)
{
Length=Key_State();
if(Length<=20&&Length!=0)
{
//执行小于阈值的操作
}
else if(Length>20)
{
//执行大于阈值的操作
}
}
}
int Key_State(void) //按键长短按判断程序
{
if(K4==KEY4_DOWN && Key_Flag==1) //如果K4按下
{
Key_Flag=0;
Start_Time=T0Count; //将总时间赋予start_time
}
else if(K4==KEY4_UP && Key_Flag==0)
{
Key_Flag=1;
End_Time=T0Count; //将总时间赋予end_time
Press_Time=End_Time-Start_Time; //将start_time与end_time作差得到按键按下时间
T0Count=0; //得到一次按键按下时间后将总时间归零等待下次按下按键
}
return Press_Time; //将按键按下时间作为返回值
}
void Timer0Init(void)
{
TMOD &= 0xF0; //设置定时器模式
TMOD |= 0x01; //设置定时器模式
TL1 = 0x66; //设置定时初始值
TH1 = 0xFC; //设置定时初始值
TF0 = 0; //清除TF0标志
TR0 = 1; //定时器0开始计时
ET0=1;
EA=1;
PT0=0;
}
void Timer0_Routine() interrupt 1
{
TL1 = 0x66; //设置定时初始值
TH1 = 0xFC; //设置定时初始值
T0Count++; //计算总时间
}
笔者初学单片机,还未入门,此博客仅为笔者学习笔记,仅供参考,如有不足与错误,欢迎指教