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

📄 ps2keybroad.c

📁 基于51的LCD+PS2程序
💻 C
字号:
#include"PS2.H"

sbit Key_Data = P0^0;//定义Keyboard数据端口引脚
sbit Key_CLK  = P3^2;	//中断端口,时钟线


static unsigned char KeyV=0X00; //键值
static unsigned char BF = 0; //标识是否有字符被收到
static unsigned char IntNum = 0; //中断次数计数

unsigned char PS2count=0;
bit dx=0;          //大小写标志 dx==1时大写状态
bit KeyInFlag=0;
unsigned char X,Y;

void Decode( void );
/*********************************************************** 
函数名称: 
函数功能: 
入口参数: 
出口参数: 
备 注: 
***********************************************************/
void Keyboard_out() interrupt 0//键盘中断处理 键值存储在 KeyV 中
{	
	
		
  		if ((IntNum>0) && (IntNum <9))
		{			
			KeyV = KeyV >> 1; 		  //因键盘数据是低>>高,结合上一句所以右移一位
			if (Key_Data==1)  		  //当键盘数据线为1时   
		 		{KeyV = KeyV | 0x80;} //存储一位
		}
  		IntNum++;  				  //中断次数加一(中断一次接收一位数据)

  		if (IntNum>33) 			  //中断33次后数据发送完毕,舍弃了通码和断码
		{   
			IntNum = 0; 
			BF = 1;  		  		  //标识有字符输入完了
			EA = 0; 
		}

}
/*********************************************************** 
函数名称: 
函数功能: 
入口参数: 
出口参数: 
备 注: 
***********************************************************/
void Decode( void ) //键值处理
{
	unsigned char KeyBoradInData = 200;
	unsigned char CharNumber;
	unsigned char CharBuffer[64];

	unsigned char TempCyc;
//  unsigned char k;
	
    if(BF==1)	//接收完一个有效数据时	
	{ 	
		TempCyc = KeyV;
	 	BF = 0;  //准备下一次接收
		if(dx)
		{
			switch ( TempCyc ) //键值与显示字符的对应关系
	  		{   
			case 0x8a: KeyBoradInData = '0'; break; //0
			case 0x15: KeyBoradInData = '0'; break; //0
			case 0x59: KeyBoradInData = '1'; break; //1
			case 0x2c: KeyBoradInData = '1'; break; //1
			case 0x3c: KeyBoradInData = '2'; break; //2
			case 0x4c: KeyBoradInData = '3'; break; //3
			case 0x99: KeyBoradInData = '3'; break; //3
			case 0x4a: KeyBoradInData = '4'; break; //4
			case 0x95: KeyBoradInData = '4'; break; //4
			case 0xb9: KeyBoradInData = '5'; break; //5
			case 0x5c: KeyBoradInData = '5'; break; //5
			case 0x6c: KeyBoradInData = '6'; break; //6
			case 0xd9: KeyBoradInData = '6'; break; //6
			case 0x7a: KeyBoradInData = '7'; break; //7
			case 0xf5: KeyBoradInData = '7'; break; //7
			case 0x7c: KeyBoradInData = '8'; break; //8
			case 0xf9: KeyBoradInData = '8'; break; //8
			case 0x8c: KeyBoradInData = '9'; break; //9
			case 0x19: KeyBoradInData = '9'; break; //9
			case 0x38: KeyBoradInData = 'A'; break; //a
			case 0x71: KeyBoradInData = 'A'; break; //a
			case 0x64: KeyBoradInData = 'B'; break; //b
			case 0xc9: KeyBoradInData = 'B'; break; //b
			case 0x43: KeyBoradInData = 'C'; break; //c
			case 0x85: KeyBoradInData = 'C'; break; //c
			case 0x47: KeyBoradInData = 'D'; break; //d
			case 0x8d: KeyBoradInData = 'D'; break; //d
			case 0x48: KeyBoradInData = 'E'; break; //e
			case 0x91: KeyBoradInData = 'E'; break; //e
			case 0x57: KeyBoradInData = 'F'; break; //f
			case 0xad: KeyBoradInData = 'F'; break; //f
			case 0x68: KeyBoradInData = 'G'; break; //g
			case 0xd1: KeyBoradInData = 'G'; break; //g
			case 0x67: KeyBoradInData = 'H'; break; //h
			case 0xcd: KeyBoradInData = 'H'; break; //h
			case 0x87: KeyBoradInData = 'I'; break; //i
			case 0x0d: KeyBoradInData = 'I'; break; //i
			case 0x77: KeyBoradInData = 'J'; break; //j
			case 0xed: KeyBoradInData = 'J'; break; //j
			case 0x84: KeyBoradInData = 'K'; break; //k
			case 0x09: KeyBoradInData = 'K'; break; //k
			case 0x97: KeyBoradInData = 'L'; break; //l
			case 0x2d: KeyBoradInData = 'L'; break; //l
			case 0x74: KeyBoradInData = 'M'; break; //m
			case 0xe9: KeyBoradInData = 'M'; break; //m
			case 0x63: KeyBoradInData = 'N'; break; //n
			case 0xc5: KeyBoradInData = 'N'; break; //n
			case 0x88: KeyBoradInData = 'O'; break; //o
			case 0x11: KeyBoradInData = 'O'; break; //o
			case 0x9b: KeyBoradInData = 'P'; break; //p
			case 0x35: KeyBoradInData = 'P'; break; //p 
			case 0x2b: KeyBoradInData = 'Q'; break; //q
			case 0x55: KeyBoradInData = 'Q'; break; //q
			case 0x5b: KeyBoradInData = 'R'; break; //r
			case 0xb5: KeyBoradInData = 'R'; break; //r
			case 0x36: KeyBoradInData = 'S'; break; //s
			case 0x58: KeyBoradInData = 'T'; break; //t
			case 0xb1: KeyBoradInData = 'T'; break; //t
			case 0x78: KeyBoradInData = 'U'; break; //u
			case 0xf1: KeyBoradInData = 'U'; break; //u
			case 0x54: KeyBoradInData = 'V'; break; //v
			case 0xa9: KeyBoradInData = 'V'; break; //v
			case 0x3A: KeyBoradInData = 'W'; break; //w
			case 0x44: KeyBoradInData = 'X'; break; //x
			case 0xd5: KeyBoradInData = 'Y'; break; //y
			case 0x6b: KeyBoradInData = 'Y'; break; //y
			case 0x34: KeyBoradInData = 'Z'; break; //z
			case 0x69: KeyBoradInData = 'Z'; break; //z
			case 0x98: KeyBoradInData = ';'; break; //;
			case 0x31: KeyBoradInData = ';'; break; //;
			case 0xAA: KeyBoradInData = '='; break; //=
			case 0xF2: KeyBoradInData = '+'; break; //+
			case 0x53: KeyBoradInData = ' '; break; //空格键			
			case 0xb4: KeyBoradInData=100; break; //回车键
			case 0x1b: dx=!dx; break; //大小写控制键Caps lock
			case 0xcc: KeyBoradInData=102; break; //Back键
//			case 0xB0: KeyBoradInData=101; break;  //大小写控制键Caps lock
			}
		}
		else
		{
	 		switch ( TempCyc ) //键值与显示字符的对应关系
	  		{   
			case 0x8a: KeyBoradInData = '0'; break; //0
			case 0x15: KeyBoradInData = '0'; break; //0
			case 0x59: KeyBoradInData = '1'; break; //1
			case 0x2c: KeyBoradInData = '1'; break; //1
			case 0x3c: KeyBoradInData = '2'; break; //2
			case 0x4c: KeyBoradInData = '3'; break; //3
			case 0x99: KeyBoradInData = '3'; break; //3
			case 0x4a: KeyBoradInData = '4'; break; //4
			case 0x95: KeyBoradInData = '4'; break; //4
			case 0xb9: KeyBoradInData = '5'; break; //5
			case 0x5c: KeyBoradInData = '5'; break; //5
			case 0x6c: KeyBoradInData = '6'; break; //6
			case 0xd9: KeyBoradInData = '6'; break; //6
			case 0x7a: KeyBoradInData = '7'; break; //7
			case 0xf5: KeyBoradInData = '7'; break; //7
			case 0x7c: KeyBoradInData = '8'; break; //8
			case 0xf9: KeyBoradInData = '8'; break; //8
			case 0x8c: KeyBoradInData = '9'; break; //9
			case 0x19: KeyBoradInData = '9'; break; //9
			case 0x38: KeyBoradInData = 'a'; break; //a
			case 0x71: KeyBoradInData = 'a'; break; //a
			case 0x64: KeyBoradInData = 'b'; break; //b
			case 0xc9: KeyBoradInData = 'b'; break; //b
			case 0x43: KeyBoradInData = 'c'; break; //c
			case 0x85: KeyBoradInData = 'c'; break; //c
			case 0x47: KeyBoradInData = 'd'; break; //d
			case 0x8d: KeyBoradInData = 'd'; break; //d
			case 0x48: KeyBoradInData = 'e'; break; //e
			case 0x91: KeyBoradInData = 'e'; break; //e
			case 0x57: KeyBoradInData = 'f'; break; //f
			case 0xad: KeyBoradInData = 'f'; break; //f
			case 0x68: KeyBoradInData = 'g'; break; //g
			case 0xd1: KeyBoradInData = 'g'; break; //g
			case 0x67: KeyBoradInData = 'h'; break; //h
			case 0xcd: KeyBoradInData = 'h'; break; //h
			case 0x87: KeyBoradInData = 'i'; break; //i
			case 0x0d: KeyBoradInData = 'i'; break; //i
			case 0x77: KeyBoradInData = 'j'; break; //j
			case 0xed: KeyBoradInData = 'j'; break; //j
			case 0x84: KeyBoradInData = 'k'; break; //k
			case 0x09: KeyBoradInData = 'k'; break; //k
			case 0x97: KeyBoradInData = 'l'; break; //l
			case 0x2d: KeyBoradInData = 'l'; break; //l
			case 0x74: KeyBoradInData = 'm'; break; //m
			case 0xe9: KeyBoradInData = 'm'; break; //m
			case 0x63: KeyBoradInData = 'n'; break; //n
			case 0xc5: KeyBoradInData = 'n'; break; //n
			case 0x88: KeyBoradInData = 'o'; break; //o
			case 0x11: KeyBoradInData = 'o'; break; //o
			case 0x9b: KeyBoradInData = 'p'; break; //p
			case 0x35: KeyBoradInData = 'p'; break; //p 
			case 0x2b: KeyBoradInData = 'q'; break; //q
			case 0x55: KeyBoradInData = 'q'; break; //q
			case 0x5b: KeyBoradInData = 'r'; break; //r
			case 0xb5: KeyBoradInData = 'r'; break; //r
			case 0x36: KeyBoradInData = 's'; break; //s
			case 0x58: KeyBoradInData = 't'; break; //t
			case 0xb1: KeyBoradInData = 't'; break; //t
			case 0x78: KeyBoradInData = 'u'; break; //u
			case 0xf1: KeyBoradInData = 'u'; break; //u
			case 0x54: KeyBoradInData = 'v'; break; //v
			case 0xa9: KeyBoradInData = 'u'; break; //v
			case 0x3A: KeyBoradInData = 'w'; break; //w
			case 0x44: KeyBoradInData = 'x'; break; //x
			case 0xd5: KeyBoradInData = 'y'; break; //y
			case 0x6b: KeyBoradInData = 'y'; break; //y
			case 0x34: KeyBoradInData = 'z'; break; //z
			case 0x69: KeyBoradInData = 'z'; break; //z
			case 0x98: KeyBoradInData = ';'; break; //;
			case 0x31: KeyBoradInData = ';'; break; //;
			case 0xAA: KeyBoradInData = '='; break; //=
			case 0xF2: KeyBoradInData = '+'; break; //+
			case 0x53: KeyBoradInData = ' '; break; //空格键			
			case 0xb4: KeyBoradInData=100; break; //回车键
			case 0x1b: dx=!dx; break; //大小写控制键Caps lock
			case 0xcc: KeyBoradInData=102; break; //Back键
//			case 0xB0: KeyBoradInData=101; break;  //大小写控制键Caps lock
     		} 
		}


		if(KeyBoradInData==102)
			{
			CharNumber=CharNumber-1;
			CharBuffer[CharNumber] =' ';
			DisString(&CharBuffer[0],CharNumber+1);
			}
		else
			{
			CharBuffer[CharNumber] = KeyBoradInData;
			CharNumber++;
			DisString(&CharBuffer[0],CharNumber);
			}
	
	
	Dis2bitNumber(7,3,TempCyc);
	Dis2bitNumber(6,3,CharNumber);
	EA = 1; 
	
	}	
		  
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -