什么地方不对,为什么下进去之后没反应
时间:10-02
整理:3721RD
点击:
#include<reg52.h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义
#define KeyPort P1
unsigned char KeyScan(void);//键盘扫描
unsigned char KeyPro(void);
/*------------------------------------------------
主函数
------------------------------------------------*/
unsigned char KeyScan(void) //键盘扫描函数,使用行列逐级扫描法
{
unsigned char Val;
led=0xff;
KeyPort=0xf0;//高四位置高,低四位拉低
if(KeyPort!=0xf0)//表示有按键按下
{
DelayMs(10); //去抖
if(KeyPort!=0xf0)
{ //表示有按键按下
KeyPort=0xfe; //检测第一行
if(KeyPort!=0xfe)
{
Val=KeyPort&0xf0;
Val+=0x0e;
while(KeyPort!=0xfe);
DelayMs(10); //去抖
return Val;
}
KeyPort=0xfd; //检测第二行
if(KeyPort!=0xfd)
{
Val=KeyPort&0xf0;
Val+=0x0d;
while(KeyPort!=0xfd);
DelayMs(10); //去抖
while(KeyPort!=0xfd);
return Val;
}
KeyPort=0xfb; //检测第三行
if(KeyPort!=0xfb)
{
Val=KeyPort&0xf0;
Val+=0x0b;
while(KeyPort!=0xfb);
DelayMs(10); //去抖
while(KeyPort!=0xfb);
return Val;
}
KeyPort=0xf7; //检测第四行
if(KeyPort!=0xf7)
{
Val=KeyPort&0xf0;
Val+=0x07;
while(KeyPort!=0xf7);
DelayMs(10); //去抖
while(KeyPort!=0xf7);
return Val;
}
}
}
return 0xff;
}
/*------------------------------------------------
按键值处理函数,返回扫键值
------------------------------------------------*/
unsigned char KeyPro(void)
{
switch(KeyScan())
{
case 0x7e:P0=0xfe;break;//0 按下相应的键显示相对应的码值
case 0x7d:P0=0xfd;break;//1
case 0x7b:P0=0xfc;break;//2
case 0x77:P0=0xf7;break;//3
case 0xbe:P0=0xef;break;//4
case 0xbd:P0=0xdf;break;//5
case 0xbb:P0=0xcf;break;//6
case 0xb7:P0=0x7f;break;//7
case 0xde:P0=0xfe;break;//8
case 0xdd:P0=0xfd;break;//9
case 0xdb:P0=0xfc;break;//a
case 0xd7:P0=0xf7;break;//b
case 0xee:P0=0xef;break;//c
case 0xed:P0=0xdf;break;//d
case 0xeb:P0=0xcf;break;//e
case 0xe7:P0=0xf7;break;//f
default:return led=0x00;break;
}
}
void main ( )