#include <REGX51.H>
#include <intrins.h>
//獨立鍵盤.無按鍵動作時其返回值num_key=0,否則返回按鍵號num_key
extern unsigned char keyboard_self()
{
unsigned char num_key=0;//按鍵號
unsigned char temp=0;//用于讀取P2線上按鍵值
static unsigned char temp_code=0;//保存按鍵值
static unsigned char num_check=0;//低電平有效次數
static unsigned char key_flag=0;//按鍵有效標識
temp=P2&0xF0;//讀取P2線數據
if(temp!=0xF0)//低電平判斷
{
num_check++;
if(num_check==10)//連續10次(10ms)低電平有效,則認為按鍵有效
{
key_flag=1;//使能按鍵有效標識
temp_code=temp;//保存按鍵值
}
}
else//松手時判斷
{
num_check=0;
if(key_flag==1)//按鍵有效
{
key_flag=0;
switch(temp_code)//讀取按鍵號
{
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();
}
}