STM32 鼠标测试程序:显示坐标、按钮状态及错误计数
这段代码是一个鼠标测试程序,主要功能为:
- 初始化延时函数、串口、LED、LCD,并在LCD上显示一些信息。
- 检查鼠标是否在位,如果不在位则在LCD上显示'Mouse Error'。
- 在LCD上显示鼠标的ID号和状态信息。
- 处理鼠标数据,并在LCD上显示鼠标的坐标和按钮状态信息。
- 如果鼠标数据传输出错,则在LCD上显示错误计数。
- 循环执行以上功能。
代码分析:
//显示鼠标的坐标值
//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_Status、PS2_DATA_BUF、MouseX、MOUSE_ID 等变量需要根据具体的硬件环境进行定义。
总结:
这段代码展示了如何使用 STM32 处理鼠标数据,并通过 LCD 显示相关信息。读者可以参考这段代码,学习如何使用 STM32 开发鼠标应用。
其他:
- 这段代码使用了 C 语言编写。
- 这段代码需要使用 STM32 的开发板以及相应的开发环境。
- 这段代码仅供参考,具体使用需要根据实际情况进行修改。
原文地址: http://www.cveoy.top/t/topic/mGn1 著作权归作者所有。请勿转载和采集!