📄 key_scan.h
字号:
/***************************************
功能:4*4键盘程序
文件名:KEY_scan.h
硬件:AT89S52
编译人:肖强
编译:Keil-2008-12-9
****************************************/
#ifndef uchar
#define uchar unsigned char
#endif
#ifndef __KEY_scan__
#define __KEY_scan__
void KEY_delay(void);
uchar KEY_scan(void);
uchar GET_key_data(void);
uchar KEY_scan(void)
{
uchar key,KEY_data;;
// while(1)
key=GET_key_data();
if(key==0x11){KEY_data=1;} //第1个键按下显示“1”
else if(key==0x21){KEY_data=2;} //第2个键按下显示2
else if(key==0x41){KEY_data=3;} //第3个键按下显示3
else if(key==0x81){KEY_data=12;} //第4个键按下显示?
else if(key==0x12){KEY_data=4;} // 4
else if(key==0x22){KEY_data=5;} // 5
else if(key==0x42){KEY_data=6;} // 6
else if(key==0x82){KEY_data=13;} // @
else if(key==0x14){KEY_data=7;} // 7
else if(key==0x24){KEY_data=8;} // 8
else if(key==0x44){KEY_data=9;} // 9
else if(key==0x84){KEY_data=10;} // enter
else if(key==0x18){KEY_data=14;} // *
else if(key==0x28){KEY_data=0;} // 0
else if(key==0x48){KEY_data=15;} // #
else if(key==0x88){KEY_data=11;} // ESC
else KEY_data=20;
return KEY_data;
}
uchar GET_key_data(void)
{
uchar h,l;//定义行号和列号
P1=0xf0;
if((P1&0xf0)!=0xf0)
{
KEY_delay(); //消除抖动
if((P1&0xf0)!=0xf0) //有键按下
{
h=0xfe; //开始扫描键盘 (行扫描)
while((h&0x10)!=0)
{
P1=h;
h=(P1&0x0f)|0xf0; //得到行号
if((P1&0xf0)!=0xf0)
{
l=(P1&0xf0)|0x0f;//得到列号
P1=h;
while((P1&h)!=h){} //等待按键弹起
return((~h)+(~l)); //有键按下时返回键盘码
}
else
h=(h<<1)|0x01; //改变行扫描位置
}
}
}
return(0); //无键盘按下时返回0
}
void KEY_delay(void) //延时
{
uchar i;
for(i=200;i>0;i--);
}
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -