📄 ps2keybroad.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 + -