|
給你一個短按加減1,長按連加減的示例程序參考。按鍵端口按你的實際電路更改。
#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; //count1清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; //count2清0
}
}
void main()
{
while(1)
{
keyscan(); //按鍵掃描
P1=~num; //LED顯示,低電平亮
}
} |
|