|
//短按+/-,長按連續(xù)+/-示例,按鍵和LED端口按你的實際電路定義。變量num按實際需要設(shè)限。宏定義延時計數(shù)按實際需要修改。
#include <REG51.H>
#define uint unsigned int //宏定義數(shù)據(jù)類型uint
#define uchar unsigned char //宏定義數(shù)據(jù)類型uchar
#define key_S 1000 //宏定義短按(約20ms)
#define key_L 30000 //宏定義長按(約2/3s)
#define key_M 20000 //宏定義長按(約1/3s)
sbit key1=P3^6; //加鍵
sbit key2=P3^7; //減鍵
uchar num=1;
void keyscan() //按鍵掃描
{
static uint count1=0,count2=0;//計數(shù)變量
if(!key1)
{
count1++;
if(count1>=key_L) //長按
{
if(num<255)
num++;
count1=key_M;
}
}
else //按鍵抬起
{
if(count1>key_S && count1<key_L)//短按
{
if(num<255)
num++;
}
count1=0; //count清0
}
if(!key2)
{
count2++;
if(count2>=key_L) //長按
{
if(num>0)
num--;
count2=key_M;
}
}
else //按鍵抬起
{
if(count2>key_S && count2<key_L)//短按
{
if(num>0)
num--;
}
count2=0; //count清0
}
}
void main()
{
while(1)
{
keyscan(); //按鍵掃描
P1=~num; //LED顯示低電平顯示
}
}
|
|