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; } } }
举报
您需要 登录 才可以下载或查看,没有账号?注册
本版积分规则 发表回复 回帖并转播 回帖后跳转到最后一页
时间类勋章
人才类勋章
等级类勋章
发帖类勋章
1
27
扫码关注 21ic 官方微信
扫码关注嵌入式微处理器
扫码关注电源系统设计
扫码关注21ic项目外包
扫码浏览21ic手机版
本站介绍 | 申请友情链接 | 欢迎投稿 | 隐私声明 | 广告业务 | 网站地图 | 联系我们 | 诚聘英才
京公网安备 11010802024343号