⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ps2key.c

📁 基于MS51系列单片机的PS2接口程序
💻 C
字号:
 #include <reg52.h>
/*
----------------------------------------------------------------------------------------------
函数名:KeyBoard_Init(void)
功能:	键盘初始化程序
输入:
调用:
返回:
说明:	

----------------------------------------------------------------------------------------------
*/
void KeyBoard_Init(void)
{
	
	IT1=1;
	EX1=1;
	EA=1;
}

/*
-----------------------------------------------------------------------------------------------
函数名:Keyboard_out(void) interrupt 2
功能:	键盘中断程序,读取按键值
输入:
调用:
返回:
说明: 程序要求完全在中断程序中执行,所以不能用于需要实时要求的场合;

-----------------------------------------------------------------------------------------------
*/
/*
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 + -