📄 getkey.c
字号:
#include <AT89X51.H>
unsigned char col[4]={0xef,0xdf,0xbf,0x7f};
unsigned char row[4]={0x07,0x0b,0x0d,0x0e};
#define uint unsigned int
#define uchar unsigned char
void delaynms(uint n)
{uchar i;
while(n--)
{for(i=0;i<125;i++);
}
}
unsigned char GetKeyVal()
{
uint i,j,getSta,keyVal;
for(i=0;i<4;i++)
{
P2= col[i];
//delay_us(2);
if(P2!=col[i])
{
getSta=P2&0x0F;
for(j=0;j<4;j++)
if(getSta==row[j])
{
keyVal=j+i*4;
switch (keyVal) //按键校正
{
case 7:
keyVal=5;break;
case 10:
keyVal=6;break;
case 13:
keyVal=7;break;
case 5:
keyVal=8;break;
case 8:
keyVal=9;break;
case 11:
keyVal=10;break;
case 14:
keyVal=11;break;
case 6:
keyVal=12;break;
case 9:
keyVal=13;break;
case 12:
keyVal=14;break;
}
return keyVal;
}
}
}
return 0xFF;
}
//**********************************
void main(void)
{
unsigned char temp;
P2=0xFF;
while (1)
{
temp=GetKeyVal();
if (temp!=0xff)
{if(temp==9)P1_0=~P1_0;
else if(temp==10)P1_1=~P1_1;
else if(temp==11)P1_2=~P1_2;
else if(temp==12)P1_3=~P1_3;
//lcd_putchar(0x30+temp); //0~F
while(GetKeyVal()!=0xff); //等待按键弹起
}
delaynms(10); //消除抖动
};
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -