📄 keyscan.c
字号:
#include<reg52.h>
#include<absacc.h>
#define uchar unsigned char
#define uint unsigned int
#define TRUE 1
#define FALSE 0
#define UP 0x0d;
#define DOWN 0x0e;
#define CANCEL 0x0a;
#define ENTER 0x0b;
#define F1 0x0c;
#define F4 0x0f
bit key_flag;
//uchar code KeyValue[16]={0x11,0x21,0x41,0x81,
// 0x12,0x22,0x42,0x82,
// 0x14,0x24,0x44,0x84,
// 0x18,0x28,0x48,0x88};
void deley_10ms(void);
uchar keyscan(void);
void main(void)
{
uchar key_value=0;
uchar key=0xff;
key_flag=0;
key_value = keyscan();
do{
if (key_flag)
{
switch(key_value)
{
case 0x11:
key=1;
break;
case 0x21:
key=2;
break;
case 0x41:
key=3;
break;
case 0x81:
key=4;
break;
case 0x12:
key=5;
break;
case 0x22:
key=6;
break;
case 0x42:
key=7;
break;
case 0x82:
key=8;
break;
case 0x14:
key=CANCEL; //取消健
break;
case 0x24:
key=9;
break;
case 0x44:
key=0;
break;
case 0x84:
key=ENTER; //确认
break;
case 0x18:
key=F1;
break;
case 0x28:
key=UP;
break;
case 0x48:
key=DOWN;
break;
case 0x88:
key=F4;
break;
default:
break;
}
key_flag=0;
}
}while(TRUE);
P1=key;
}
/********扫描按键函数**********/
uchar keyscan(void)
{
uchar readkey,rereadkey;
uchar x_temp,y_temp;
key_flag=0;
x_temp=(P1=0x0f)&0x0f;
if(x_temp==0x0f)return(0xff);
y_temp=(P1=0xf0)&0xf0;
readkey=x_temp|y_temp;
deley_10ms();
x_temp=(P1=0x0f)&0x0f;
if(x_temp==0x0f)return(0xff);
y_temp=(P1=0xf0)&0xf0;
rereadkey=x_temp|y_temp;
if(readkey==rereadkey)
{
key_flag=1;
return(readkey);
}
}
/***********延时函数*************/
void deley_10ms(void)
{
uchar j,i=10;
while(i--)
{
for(j=1;j<=120;j++);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -