?? ps2key.c
字號:
#include <reg52.h>
/*
----------------------------------------------------------------------------------------------
函數名:KeyBoard_Init(void)
功能: 鍵盤初始化程序
輸入:
調用:
返回:
說明:
----------------------------------------------------------------------------------------------
*/
void KeyBoard_Init(void)
{
IT1=1;
EX1=1;
EA=1;
}
/*
-----------------------------------------------------------------------------------------------
函數名:Keyboard_out(void) interrupt 2
功能: 鍵盤中斷程序,讀取按鍵值
輸入:
調用:
返回:
說明: 程序要求完全在中斷程序中執(zhí)行,所以不能用于需要實時要求的場合;
-----------------------------------------------------------------------------------------------
*/
/*
void Keyboard_out(void) interrupt 2
{
unsigned char i=0;
unsigned char j=0;
unsigned char key=0;
EX1=0;
do{
do{
while(Key_CLK);
key>>=1;
if(Key_Data)key|=0x80;
i++;
while(!Key_CLK);
}
while(i<9);
i=0;
while(Key_CLK);
while(!Key_CLK);
while(Key_CLK);
while(!Key_CLK);
while(!Key_Data);
key_value[j]=key;
j++;
}
while(j>2);
BF=1;
EX1=1;
}
*/
code unsigned char ASSIC2_1[61][2]=
{
0X15,'q',
0x16,'1',
0x1a,'z',
0x1b,'s',
0x1c,'a',
0x1d,'w',
0x1e,'2',
0x21,'c',
0x22,'x',
0x23,'d',
0x24,'e',
0x25,'4',
0x26,'3',
0x29,' ',
0x2a,'v',
0x2b,'f',
0x2c,'t',
0x2d,'r',
0x2e,'5',
0x31,'n',
0x32,'b',
0x33,'h',
0x34,'g',
0x35,'y',
0x36,'6',
0x3a,'m',
0x3b,'j',
0x3c,'u',
0x3d,'7',
0x3e,'8',
0x41,',',
0x42,'k',
0x43,'i',
0x44,'o',
0x45,'0',
0x46,'9',
0x49,'.',
0x4a,'/',
0x4b,'l',
0x4c,':',
0x4d,'p',
0x4e,'-',
0x52,'\'',
0x54,'[',
0x55,'=',
0x5b,']',
0x5d,'\\',
0x69,'1',
0x6b,'4',
0x6c,'7',
0x70,'0',
0x71,'.',
0x72,'2',
0x73,'5',
0x74,'6',
0x75,'8',
0x79,'+',
0x7a,'3',
0x7b,'-',
0x7c,'*',
0x7d,'9'
};
code unsigned char ASSIC2_2[61][2]=
{
0X15,'Q',
0x16,'1',
0x1a,'Z',
0x1b,'S',
0x1c,'A',
0x1d,'W',
0x1e,'2',
0x21,'C',
0x22,'X',
0x23,'D',
0x24,'E',
0x25,'4',
0x26,'3',
0x29,' ',
0x2a,'V',
0x2b,'F',
0x2c,'T',
0x2d,'R',
0x2e,'5',
0x31,'N',
0x32,'B',
0x33,'H',
0x34,'G',
0x35,'Y',
0x36,'6',
0x3a,'M',
0x3b,'J',
0x3c,'U',
0x3d,'7',
0x3e,'8',
0x41,',',
0x42,'K',
0x43,'I',
0x44,'O',
0x45,'0',
0x46,'9',
0x49,'.',
0x4a,'/',
0x4b,'l',
0x4c,':',
0x4d,'P',
0x4e,'-',
0x52,'\'',
0x54,'[',
0x55,'=',
0x5b,']',
0x5d,'\\',
0x69,'1',
0x6b,'4',
0x6c,'7',
0x70,'0',
0x71,'.',
0x72,'2',
0x73,'5',
0x74,'6',
0x75,'8',
0x79,'+',
0x7a,'3',
0x7b,'-',
0x7c,'*',
0x7d,'9'
};
/*
----------------------------------------------------------------------------------------------
函數名:Decode(unsigned char index)
功能: 按鍵查表函數
輸入:
index:
按鍵索引;
調用:
返回:
assic2:
標準ASSIC2碼輸出;
說明:
本程序采用了2分法來實行查找,先將PS/2的通碼進行排序,
然后作成一張標準表,最后進行查表。
----------------------------------------------------------------------------------------------
*/
unsigned char Decode(unsigned char index)
{
unsigned char assic2=0; //返回值
unsigned char comp0=0; //地址0.1.2
unsigned char comp1=0;
unsigned char comp2=61;
if((index>0x7d)|(index<0x15))return assic2=' ';
if(index==ASSIC2_1[comp0][0]){
return (assic2=ASSIC2_1[comp0][1]); //判別是否為低地址的值
}
if(index==ASSIC2_1[comp2][0]){
return (assic2=ASSIC2_1[comp2][1]); //判別是否為高地址的值
}
do{
comp1=(comp2+comp0)/2; //2分
if(index==ASSIC2_1[comp1][0]){
return (assic2=ASSIC2_1[comp1][1]); //相等判別
}
else if(index>ASSIC2_1[comp1][0]){ //高,將當前值送低
comp0=comp1;
}
else comp2=comp1; //低
if(comp0==comp2)return assic2=' '; //無
if((comp2-comp0)==1){
if(index==ASSIC2_1[comp2][0]){
return(assic2=ASSIC2_1[comp2][1]);
}
comp1=comp2;
}
}
while(1);
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -