|
在做單片機(jī)按鍵程序的時(shí)候,靈敏度和效率難以取舍,各位大俠們,有沒(méi)有更好的方法呢?
#include <REGX51.H>
#include <intrins.h>
//獨(dú)立鍵盤.無(wú)按鍵動(dòng)作時(shí)其返回值num_key=0,否則返回按鍵號(hào)num_key
extern unsigned char keyboard_self()
{
unsigned char num_key=0;//按鍵號(hào)
unsigned char temp=0;//用于讀取P2線上按鍵值
static unsigned char temp_code=0;//保存按鍵值
static unsigned char num_check=0;//低電平有效次數(shù)
static unsigned char key_flag=0;//按鍵有效標(biāo)識(shí)
temp=P2&0xF0;//讀取P2線數(shù)據(jù)
if(temp!=0xF0)//低電平判斷
{
num_check++;
if(num_check==10)//連續(xù)10次(10ms)低電平有效,則認(rèn)為按鍵有效
{
key_flag=1;//使能按鍵有效標(biāo)識(shí)
temp_code=temp;//保存按鍵值
}
}
else//松手時(shí)判斷
{
num_check=0;
if(key_flag==1)//按鍵有效
{
key_flag=0;
switch(temp_code)//讀取按鍵號(hào)
{
case 0xE0: num_key=1; P1=0xf0;
break;
case 0xD0: num_key=2; P1=0x0f;
break;
case 0xB0: num_key=3; P1=0xaa;
break;
case 0x70: num_key=4; P1=0xff;
break;
}
}
}
return(num_key);
}
void main()
{
while(1)
{
keyboard_self();
}
}
|
|