#include<reg52.h>
//将有符变量变成无符变量
#define uint unsigned int
#define uchar unsigned char
/*************************************************************
//Function:delay some time
//Auther:wangfei
//Time:2012.11.12
//Return:void
**************************************************************/
void delay(uchar temp) //1MS延时
{
uint i;
for(i=0;i<120;i++)
{
temp--;
}
}
/*************************************************************
//Function:Get the key's valaue
//Auther:wangfei
//Time:2012.11.12
//Return:uint
**************************************************************/
uint keyscan()//键盘扫描
{
uchar tempx; //tempx用于存储列扫描的键值
uchar tempy;//tempy 用于存储行扫描的键值
P2=0XF0; //读取P2口的原始值
tempx=P2&0XF0; //当有按键按下时存下按键的行键值
if(tempx!=0xf0)//是否有按键按下?
{
delay(10);//消抖
if(tempx!=0xf0) //确认有按键俺下
{
tempx=P2&0XF0;//存储列扫描的键值
P2=tempx|0x0f;//输出P2的键值
tempy=P2&0X0F; //存储行扫描的键值
return (tempx+tempy);//输出P2口的键值
}
}
return 0xff; //否则输出全“1”。
}
/*************************************************************
//Function:main
//Auther:wangfei
//Time:2012.11.12
//Return:void
**************************************************************/
void main()
{
uint KEY;
KEY=keyscan();//键盘扫描函数
switch(KEY)
{ /*由LED灯显示按键按下的键值*/
case 0x77:P1=0X00;break;
case 0Xee:P1=0X01;break;
case 0Xed:P1=0X02;break;
case 0Xeb:P1=0X03;break;
case 0Xe7:P1=0X04;break;
case 0Xde:P1=0X05;break;
case 0Xdd:P1=0X06;break;
case 0Xdb:P1=0X07;break;
case 0Xd7:P1=0X08;break;
case 0Xbe:P1=0X09;break;
case 0Xbd:P1=0X0A;break;
case 0Xbb:P1=0X0B;break;
case 0Xb7:P1=0X0C;break;
case 0X7e:P1=0X0D;break;
case 0X7d:P1=0X0E;break;
case 0X7b:P1=0X0F;break;
default: P1=0X10;
}
}