📄 key_query.c
字号:
#include "AT89X52.h"
#include "ES51_II.h"
#include "ES51_II_LIB.h"
//
static unsigned char ReadKey(void)
{
unsigned char keyval;
unsigned char tmp = 0;
KEYPORT |= 0x0f;
if( ((KEYPORT&0x0f) != 0x0f) || ( KEY_INT0 != 1 ) || ( KEY_COUNT != 1 ))
{
KEY_COUNT = 1;
KEY_INT0 = 1;
KEYPORT |= 0x0f; // 对于读端口操作,需要对端口先写1
// 与数码管片选引脚共用P0端口,需要保持数码管片选信号
keyval = KEYPORT&0x0f; // 读取键值,并屏蔽高四位,高四位用于片选数码管
tmp |= KEY_INT0;
tmp <<= 1;
tmp |= KEY_COUNT;
//tmp = ( (tmp|KEY_INT0)<<1) | KEY_COUNT; // 读取键INT0,COUNT
tmp <<= 4;
keyval |= tmp; // 合并键值
return keyval;
}
else
return 0x3f;
}
//
unsigned char GetKeyVal(void)
{
unsigned char i = 200;
unsigned char keyval;
keyval = ReadKey();
while(i--); // 延时,消抖
if( (keyval != 0x3f) && (keyval == ReadKey() ) ) // 判断是否有键按下;判断两次所读键值相等
{
while( keyval == ReadKey() ); // 等待键的释放
return keyval; // 返回键值
}
else
return 0x3f; // 无键按下,返回0xff
}
/*
unsigned char ReadKey(void)
{
unsigned char i = 200;
unsigned char keyval;
keyval = KEYPORT; // 与数码管片选引脚共用P0端口,需要保持数码管片选信号
KEYPORT = keyval | 0x0f; // 对于读端口操作,需要对端口先写1
keyval = KEYPORT&0x0f; // 读取键值,保存
while(i--); // 延时,消抖
if( (keyval != 0x0f) && (keyval == (KEYPORT&0x0f)) )// 判断是否有键按下;再次读取键值,判断是否与前次所读值相等
{
while( keyval == (KEYPORT&0x0f) ); // 等待键的释放
return keyval; // 返回键值
}
else
return 0xff; // 无键按下,返回0xff
}
// 获得键值 KEY1:1; KEY2:2; KEY3:3; KEY4:4;
unsigned char GetKeyVal(void)
{
unsigned char tmp;
//tmp = ReadKey();
switch( ReadKey() )
{
case KEY1VAL:
tmp = 1;
break;
case KEY2VAL:
tmp = 2;
break;
case KEY3VAL:
tmp = 3;
break;
case KEY4VAL:
tmp = 4;
break;
default:
tmp = 0;
break;
}
return tmp;
}
*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -