[菜农助学交流] [2012助学第一期]南信大瑜的学习笔记ps2键盘转USB键盘

[复制链接]
 楼主| 南信大瑜 发表于 2012-5-16 15:57 | 显示全部楼层 |阅读模式
1.功能说明:
    基于助学板,实现了PS2键盘转USB键盘的功能,即助学板读取PS2键盘的码值,发送给电脑,从而实现PS2USB的功能。
    在电脑上打开记事本,按小键盘上的数字键,就可以在电脑上输入相应的数字。
2.程序说明。

  1. void PS2_Init(void)  //PS2初始化程序
  2. {

  3. DrvGPIO_Open(E_GPB, 13, E_IO_INPUT); //把PS2 DATA设为输入
  4. /* Configure general GPIO interrupt */
  5. DrvGPIO_Open(E_GPB,14,E_IO_INPUT); //把PS2 CLK设为输入

  6. /* Configure external interrupt */
  7. DrvGPIO_EnableEINT0(E_IO_FALLING, E_MODE_EDGE, EINT0Callback);//使能PS2 CLK中断
  8. }


  9. void EINT0Callback(void)    //PS2中断处理函数,在这里对PS2进行解码
  10. {
  11. static unsigned char tempdata=0;
  12. static unsigned char Key_Up;

  13. if(BIT_Count==0)
  14. {
  15.            tempdata=0;
  16. }
  17. BIT_Count++;
  18. if(BIT_Count>1&&BIT_Count<10)
  19. {
  20.            tempdata>>=1;
  21.            if(DrvGPIO_GetBit(E_GPB, 13))
  22.            {
  23.                     tempdata|=0x80;
  24.            }
  25. }
  26. else if(BIT_Count==11)
  27. {
  28.            PS2_Data=tempdata;
  29.            //printf("PS2_Data=%d\r\n",PS2_Data);
  30.            BIT_Count=0;
  31.            if(PS2_Data==0xf0)
  32.            {
  33.                     Key_Up=1;
  34.            }
  35.            else
  36.            {
  37.                     if(Key_Up==1)
  38.                     {
  39.                              PS2_Data_Valid=0;
  40.                              Key_Up=0;
  41.                     }
  42.                     else
  43.                     {
  44.                              PS2_Data_Valid=1;
  45.                     }
  46.            }
  47.            
  48.            
  49. }
  50. }



  51. void HID_GetInReport(uint8_t *buf)
  52. {
  53.     int32_t i;
  54.     uint32_t key = 0xF;
  55. //buf[2] = 0x59;
  56. if(PS2_Data_Valid==1)
  57. {
  58.   PS2_Data_Valid=0;
  59.   switch(PS2_Data)  //由于PS2键盘的码值 和USB键盘的码值不一样,所以要做一下转换,这里只实现了0-9,10个数字键的转换
  60.   {
  61.    case 0x70: //0
  62.      buf[2]= 0x62; break;
  63.    case 0x69: //1
  64.      buf[2]= 0x59; break;
  65.    case 0x72: //2
  66.      buf[2]= 0x5a; break;
  67.    case 0x7a: //3
  68.      buf[2]= 0x5b; break;
  69.    case 0x6b: //4
  70.      buf[2]= 0x5c; break;
  71.    case 0x73: //5
  72.      buf[2]= 0x5d; break;
  73.    case 0x74: //6
  74.      buf[2]= 0x5e; break;
  75.    case 0x6c: //7
  76.      buf[2]= 0x5f; break;
  77.    case 0x75: //8
  78.      buf[2]= 0x60; break;
  79.    case 0x7d: //9
  80.      buf[2]= 0x61; break;
  81.    default: buf[2]=0;
  82.      break;
  83.   }
  84. }
  85. else
  86. {
  87.   for (i=0;i<8;i++)
  88.   {
  89.     buf[i] = 0;
  90.   }
  91.   
  92. }
  93. }

  94.          

















































 楼主| 南信大瑜 发表于 2012-5-16 15:59 | 显示全部楼层

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
kyzb001 发表于 2012-5-18 09:05 | 显示全部楼层
:victory:
tao0127 发表于 2012-9-21 17:52 | 显示全部楼层
顶一下!下载来学习
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

27

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部