原创 匠人的寒假作业——改进后的STM32鼠标程序

2009-2-1 22:28 3422 9 9 分类: MCU/ 嵌入式
匠人的寒假作业——改进后的STM32鼠标程序

//--------------------------------------------------------
// 项目:鼠标程序
// 模块:主程序
// 说明:
// 设计:程序匠人(版权所有,引用者请保留原作者姓名)
//--------------------------------------------------------
/*
版本说明:

V01        2009-2-1 22:11:47    
    在原DEMO程序上改进如下:
    1.4个方向键,原来是单击有效,每次击键,鼠标移动一次.现在改为连击有效,当方向键连续按下时,鼠标持续移动
    2.鼠标每次移动的步长,原来固定30点.现在改为由电位器调节,步长范围=ADC采样结果的高4位+1(1~16)
    3.原来只支持"上\下\左\右"4个方向,现在支持"正上\正下\正左\正右\左上\右上\左下\右下"8个方向
    4.KEY2改为鼠标左键
    5.KEY3改为鼠标右键
    6.KEY4(方向键中间键)改为鼠标中键
    7.LCD显示内容改为:"CXJR"
    8.按键原来是用中断检测,改为在主程序中查询.
*/
//--------------------------------------------------------

//略。。。。。


//--------------------------------------------------------
//主函数
//--------------------------------------------------------
int main(void)
{

//略。。。。。

  while(1)
  {
    write_string("CXJR");  
      Mouse_Send();
}
}

//--------------------------------------------------------
//鼠标报告描述符发送
//--------------------------------------------------------
void Mouse_Send(void)
{
  u8 Mouse_Buffer[4] = {0, 0, 0, 0};
  s8 X = 0, Y = 0;

  
  //========方向键处理(步长=ADC采样结果的高4位+1(1~16))
  if (!GPIO_ReadInputDataBit(GPIOD, JOY_RIGHT))
  {
      X += (ADC_ConvertedValue/256+1);        
  }
  if (!GPIO_ReadInputDataBit(GPIOD, JOY_LEFT))
  {
      X -= (ADC_ConvertedValue/256+1);        
  }
  if (!GPIO_ReadInputDataBit(GPIOD, JOY_UP))
  {
      Y -= (ADC_ConvertedValue/256+1);        
    }
  if (!GPIO_ReadInputDataBit(GPIOD, JOY_DOWN))
    {
      Y += (ADC_ConvertedValue/256+1);        
    }
  Mouse_Buffer[1] = X;                                                                                  // prepare buffer to send
  Mouse_Buffer[2] = Y;

    //========按键处理
  if (!GPIO_ReadInputDataBit(GPIOD, MOUSE_LEFT))
     {
          Mouse_Buffer[0] = 0X01;
     }
  if (!GPIO_ReadInputDataBit(GPIOD, MOUSE_RIGHT))
     {
           Mouse_Buffer[0] = 0X02;
     }
  if (!GPIO_ReadInputDataBit(GPIOD, JOY_SEL))
     {
           Mouse_Buffer[0] = 0X04;
     }

    //========
  UserToPMABufferCopy(Mouse_Buffer, GetEPTxAddr(ENDP1), 4);          //copy mouse position info in ENDP1 Tx Packet Memory Area
  SetEPTxValid(ENDP1);                                                                                     // enable endpoint for transmission
}
//略。。。。。
PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
9
关闭 站长推荐上一条 /3 下一条