readpckey.c

来自「最简单的20键PS/2键值读取程序」· C语言 代码 · 共 45 行

C
45
字号
#include <reg52.h>

union
{	uint w;
	struct{uchar h,l;}hl;
}key;
uint keytmp;
void InitEXInt()
{	PX0=1;//Highest interrupt
	EX0=1;//enable INT0
	EX1=1;//enable INT1
	IT0=1;//edge
	EA=1;
}


				    		// 0   1		2	 3	 	4     5    6   7    8    9   clear Enter f1   f2   f3   f4   f5    f6   .  esc ,
uchar code KeyCost[]={0xe,0x96,0x4e,0x5e,0xd6,0xce,0x2e,0x36,0xae,0xbe,0x66, 0x5a,0xa0,0x60,0x20,0x30,0xc0,0xd0,0x8e,0x6e};
uchar KeyPressedTime;//每20Ms中断减一
uchar keyval()	
{	uchar i;
	if(KeyPressedTime>0) return 0xf0;// 键盘按下未松开则返回
	EX0=0;
	key.w=keytmp;
	EX0=1;
	WMCON|=0xe3;//Clear WatchDog;
	if((key.hl.h&0xfc)!=0xf8) return 0xf0;
	key.w>>=2;
	for(i=0;i<20;i++)
		if(KeyCost[i]==key.hl.l) break;
	keytmp=0;
	if(key.hl.l==0xc1) i=9;
	if(i>20) return 0xf0;
	return i;
}

void PcKey() interrupt 0 // using 1
{	if(!INT0)
	{	keytmp<<=1;
		if(P1_0) keytmp|=1;
		KeyPressedTime=40;
	}
}

⌨️ 快捷键说明

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