1.功能说明:
基于助学板,实现了PS2键盘转USB键盘的功能,即助学板读取PS2键盘的码值,发送给电脑,从而实现PS2转USB的功能。
在电脑上打开记事本,按小键盘上的数字键,就可以在电脑上输入相应的数字。
2.程序说明。
void PS2_Init(void) //PS2初始化程序
{
DrvGPIO_Open(E_GPB, 13, E_IO_INPUT); //把PS2 DATA设为输入
/* Configure general GPIO interrupt */
DrvGPIO_Open(E_GPB,14,E_IO_INPUT); //把PS2 CLK设为输入
/* Configure external interrupt */
DrvGPIO_EnableEINT0(E_IO_FALLING, E_MODE_EDGE, EINT0Callback);//使能PS2 CLK中断
}
void EINT0Callback(void) //PS2中断处理函数,在这里对PS2进行解码
{
static unsigned char tempdata=0;
static unsigned char Key_Up;
if(BIT_Count==0)
{
tempdata=0;
}
BIT_Count++;
if(BIT_Count>1&&BIT_Count<10)
{
tempdata>>=1;
if(DrvGPIO_GetBit(E_GPB, 13))
{
tempdata|=0x80;
}
}
else if(BIT_Count==11)
{
PS2_Data=tempdata;
//printf("PS2_Data=%d\r\n",PS2_Data);
BIT_Count=0;
if(PS2_Data==0xf0)
{
Key_Up=1;
}
else
{
if(Key_Up==1)
{
PS2_Data_Valid=0;
Key_Up=0;
}
else
{
PS2_Data_Valid=1;
}
}
}
}
void HID_GetInReport(uint8_t *buf)
{
int32_t i;
uint32_t key = 0xF;
//buf[2] = 0x59;
if(PS2_Data_Valid==1)
{
PS2_Data_Valid=0;
switch(PS2_Data) //由于PS2键盘的码值 和USB键盘的码值不一样,所以要做一下转换,这里只实现了0-9,10个数字键的转换
{
case 0x70: //0
buf[2]= 0x62; break;
case 0x69: //1
buf[2]= 0x59; break;
case 0x72: //2
buf[2]= 0x5a; break;
case 0x7a: //3
buf[2]= 0x5b; break;
case 0x6b: //4
buf[2]= 0x5c; break;
case 0x73: //5
buf[2]= 0x5d; break;
case 0x74: //6
buf[2]= 0x5e; break;
case 0x6c: //7
buf[2]= 0x5f; break;
case 0x75: //8
buf[2]= 0x60; break;
case 0x7d: //9
buf[2]= 0x61; break;
default: buf[2]=0;
break;
}
}
else
{
for (i=0;i<8;i++)
{
buf[i] = 0;
}
}
}
|