?? 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 + -