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

📄 keyboard.h

📁 ps2键盘在c51中的驱动程序
💻 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 + -