这段代码是一个鼠标测试程序,主要功能为:

  1. 初始化延时函数、串口、LED、LCD,并在LCD上显示一些信息。
  2. 检查鼠标是否在位,如果不在位则在LCD上显示'Mouse Error'。
  3. 在LCD上显示鼠标的ID号和状态信息。
  4. 处理鼠标数据,并在LCD上显示鼠标的坐标和按钮状态信息。
  5. 如果鼠标数据传输出错,则在LCD上显示错误计数。
  6. 循环执行以上功能。

代码分析:

//显示鼠标的坐标值
//x,y:在 LCD 上显示的坐标位置
//pos:坐标值
void Mouse_Show_Pos(u16 x,u16 y,short pos)
{
  if(pos<0)
  {
    LCD_ShowChar(x,y,'-',16,0); //显示负号
    pos=-pos; //转为正数
  }else LCD_ShowChar(x,y,' ',16,0);//去掉负号
  LCD_ShowNum(x+8,y,pos,5,16); //显示值 
}

int main(void)
{
  u8 t;
  u8 errcnt=0;
  delay_init(); //延时函数初始化
  NVIC_Configuration();
  uart_init(9600); //串口初始化为 9600
  LED_Init(); //初始化与 LED 连接的硬件接口
  LCD_Init(); //初始化 LCD 
  POINT_COLOR=RED;//设置字体为红色
  LCD_ShowString(60,50,200,16,16,'Mini STM32');
  LCD_ShowString(60,70,200,16,16,'Mouse TEST');
  LCD_ShowString(60,90,200,16,16,'ATOM@ALIENTEK');
  LCD_ShowString(60,110,200,16,16,'2014/3/12'); 
  while(Init_Mouse()) //检查鼠标是否在位.
  {
    LCD_ShowString(60,130,200,16,16,'Mouse Error'); delay_ms(400);
    LCD_Fill(60,130,239,130+16,WHITE); delay_ms(100);
  }
  LCD_ShowString(60,130,200,16,16,'Mouse OK');
  LCD_ShowString(60,150,200,16,16,'Mouse ID:');
  LCD_ShowNum(132,150,MOUSE_ID,3,16);//填充模式
  POINT_COLOR=BLUE;
  LCD_ShowString(30,170,200,16,16,'BUF[0]:');
  LCD_ShowString(30,186,200,16,16,'BUF[1]:');
  LCD_ShowString(30,202,200,16,16,'BUF[2]:'); 
  if(MOUSE_ID==3)LCD_ShowString(30,218,200,16,16,'BUF[3]:');
  LCD_ShowString(90+30,170,200,16,16,'X POS:');
  LCD_ShowString(90+30,186,200,16,16,'Y POS:');
  LCD_ShowString(90+30,202,200,16,16,'Z POS:'); 
  if(MOUSE_ID==3)LCD_ShowString(90+30,218,200,16,16,'BUTTON:'); 
  t=0;
  while(1)
  {
    if(PS2_Status&0x80)//得到了一次数据
    {
      LCD_ShowNum(56+30,170,PS2_DATA_BUF[0],3,16);//填充模式
      LCD_ShowNum(56+30,186,PS2_DATA_BUF[1],3,16);//填充模式
      LCD_ShowNum(56+30,202,PS2_DATA_BUF[2],3,16);//填充模式
      if(MOUSE_ID==3)LCD_ShowNum(56+30,218,PS2_DATA_BUF[3],3,16); 
      Mouse_Data_Pro(); //处理数据
      Mouse_Show_Pos(146+30,170,MouseX.x_pos); //X 坐标
      Mouse_Show_Pos(146+30,186,MouseX.y_pos); //Y 坐标
      if(MOUSE_ID==3)Mouse_Show_Pos(146+30,202,MouseX.z_pos); //滚轮位置
       if(MouseX.bt_mask&0x01)LCD_ShowString(146+30,218,200,16,16,'LEFT'); 
      else LCD_ShowString(146+30,218,200,16,16,' '); 
       if(MouseX.bt_mask&0x02)LCD_ShowString(146+30,234,200,16,16,'RIGHT'); 
      else LCD_ShowString(146+30,234,200,16,16,' '); 
       if(MouseX.bt_mask&0x04)
      LCD_ShowString(146+30,250,200,16,16,'MIDDLE'); 
      else LCD_ShowString(146+30,250,200,16,16,' '); 
      PS2_Status=MOUSE;
      PS2_En_Data_Report(); //使能数据报告
    }else if(PS2_Status&0x40)
    {
      errcnt++;
      PS2_Status=MOUSE;
      LCD_ShowNum(86+30,234,errcnt,3,16);//填充模式
    }
    t++; delay_ms(1);
    if(t==200) { t=0; LED0=!LED0;}
  }
}

代码说明:

  • Mouse_Show_Pos 函数用于在LCD上显示鼠标的坐标值。
  • main 函数是程序的入口,首先进行初始化,然后进入循环,不断检查鼠标数据,并显示相关信息。
  • PS2_Status 寄存器中 0x80 位为1时,表示得到了一次鼠标数据。程序将从 PS2_DATA_BUF 数组中读取数据,并进行处理,最后将鼠标的坐标和按钮状态信息显示在LCD上。
  • 如果鼠标数据传输出错,则 PS2_Status 寄存器中 0x40 位为1。程序将增加错误计数,并将其显示在LCD上。

需要注意的是,代码中用到的 PS2_StatusPS2_DATA_BUFMouseXMOUSE_ID 等变量需要根据具体的硬件环境进行定义。

总结:

这段代码展示了如何使用 STM32 处理鼠标数据,并通过 LCD 显示相关信息。读者可以参考这段代码,学习如何使用 STM32 开发鼠标应用。

其他:

  • 这段代码使用了 C 语言编写。
  • 这段代码需要使用 STM32 的开发板以及相应的开发环境。
  • 这段代码仅供参考,具体使用需要根据实际情况进行修改。
STM32 鼠标测试程序:显示坐标、按钮状态及错误计数

原文地址: http://www.cveoy.top/t/topic/mGn1 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录