📄 keyboard.h
字号:
/*******************************************************************************
PC键盘驱动程序
*******************************************************************************/
//定义I/O端口
//KB_CLK接INT1
sbit KB_DAT = P1^5;
//定义全局变量
bit KB_HitFlag = 0; //按键标志
bit KB_UpFlag = 0; //抬起标志
unsigned char KB_Buf; //键盘缓冲区
//外部中断INT1服务程序
void INT1_ISR() interrupt 2
{
static unsigned char cnt = 0;
static unsigned char k;
if ( cnt == 0 ) //起始位
{
}
else if ( cnt <= 8 ) //数据位
{
k >>= 1;
if ( KB_DAT ) k |= 0x80;
}
else //校验位和停止位
{
}
cnt++;
if ( cnt >= 11 ) //一帧数据接收完毕
{
cnt = 0;
if ( k == 0xF0 ) //抬起标志
{
KB_UpFlag = 1;
}
else
{
if ( KB_UpFlag )
{
KB_UpFlag = 0;
}
else
{
KB_Buf = k;
KB_HitFlag = 1;
}
}
}
}
bit CapsLock_Flag = 0;
//读取键值
unsigned char GetKey()
{
unsigned char k;
for (;;)
{
if ( KB_HitFlag )
{
k = KB_Buf;
KB_HitFlag = 0;
break;
}
}
switch (k)
{
case 0x1C: k = 'A'; break;
case 0x32: k = 'B'; break;
case 0x21: k = 'C'; break;
case 0x23: k = 'D'; break;
case 0x24: k = 'E'; break;
case 0x2B: k = 'F'; break;
case 0x34: k = 'G'; break;
case 0x33: k = 'H'; break;
case 0x43: k = 'I'; break;
case 0x3B: k = 'J'; break;
case 0x42: k = 'K'; break;
case 0x4B: k = 'L'; break;
case 0x3A: k = 'M'; break;
case 0x31: k = 'N'; break;
case 0x44: k = 'O'; break;
case 0x4D: k = 'P'; break;
case 0x15: k = 'Q'; break;
case 0x2D: k = 'R'; break;
case 0x1B: k = 'S'; break;
case 0x2C: k = 'T'; break;
case 0x3C: k = 'U'; break;
case 0x2A: k = 'V'; break;
case 0x1D: k = 'W'; break;
case 0x22: k = 'X'; break;
case 0x35: k = 'Y'; break;
case 0x1A: k = 'Z'; break;
case 0x45: k = '0'; break;
case 0x16: k = '1'; break;
case 0x1E: k = '2'; break;
case 0x26: k = '3'; break;
case 0x25: k = '4'; break;
case 0x2E: k = '5'; break;
case 0x36: k = '6'; break;
case 0x3D: k = '7'; break;
case 0x3E: k = '8'; break;
case 0x46: k = '9'; break;
case 0x0E: k = '`'; break;
case 0x4E: k = '-'; break;
case 0x55: k = '='; break;
case 0x5D: k = '\\'; break;
case 0x66: k = '\b'; break; //BackSpace
case 0x29: k = ' '; break; //空格
case 0x58: //CapsLock
k = '\0';
CapsLock_Flag = !CapsLock_Flag;
return k;
case 0x5A: k = '\n'; break; //Enter
case 0x76: k = 0x27; break; //ESC
case 0x54: k = '['; break;
case 0x5B: k = ']'; break;
case 0x4C: k = ';'; break;
case 0x52: k = '\''; break;
case 0x41: k = ','; break;
case 0x49: k = '.'; break;
case 0x4A: k = '/'; break;
default: k = '\0'; break;
}
if ( CapsLock_Flag )
{
if ( (k >= 'A') && (k <= 'Z') )
{
k += ('a'-'A');
}
}
return k;
}
//键盘初始化
void KB_Init()
{
//配置INT1中断
PX1 = 1; //高级中断优先级
IT1 = 1; //下降沿触发中断
EX1 = 1; //使能INT1中断
EA = 1; //使能总中断
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -