📄 kb.c
字号:
#define _key_
#include "general.h"
uchar key_bak;
uchar key_temp;
uchar key_cnt; //counter
uchar key_value;
bit key_ok;
static uchar code code_key[16]={0x11,0x12,0x14,0x18,
0x21,0x22,0x24,0x28,
0x41,0x42,0x44,0x48,
0x81,0x82,0x84,0x88};
/* -- 1 -- 2 -- 3 -- enter --
-- 4 -- 5 -- 6 --
-- 7 -- 8 -- 9 --
-- 0 --
/******************************************
查键值表,特征键值转为顺序键值
******************************************/
uchar get_key(uchar c)
{
uchar i=0;
while(code_key[i]!= c)
i++;
return i;//0x00~0x0f
}
/**************************************************************
名称:kbscan
描述:键盘扫描
输入:无
输出:键值key
其他:P0.4~7扫描0输出,P0.0~3输入0进来
**************************************************************/
void kbscan(void)
{
uchar sccode,recode; //扫描码,接收码
P0=0x0f; //扫0000
if((P0&0x0f)!=0x0f) //有键按下
{
sccode=0xef;
while((sccode&0x01)!=0)
{
P0=sccode; //扫1110
if((P0&0x0f)!=0x0f) //扫描到
{
recode=(P0&0x0f)|0xf0;//输出键值,特征位为0
//
key_temp=((~sccode)+(~recode));//扫描+输出 行+列 返回特征字节->顺序键码
//C1:10-01,02,04,08 11,12,14,18
//C2:20-01,02,04,08 21,22,24,28
//C3:40-01,02,04,08 41,42,44,48
//C4:80-01,02,04,08 81,82,84,88
}
else
sccode=(sccode<<1)|0x10; //0左移1位,末位补1
}
if (key_temp == key_bak){ key_cnt++;}
else{key_cnt=0;key_bak=key_temp;}
}
else{
if (key_cnt){
key_ok=1;
key_value=get_key(key_temp); //键解码
}
key_cnt=0;
}
}
//对外接口函数
unsigned char getkey(void) //返回按键码
{
key_ok=0; //结束
return(key_value);
}
bit testkey(void) //检查有无按键
{
kbscan(); //键扫描
return(key_ok);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -