本人新手,使用郭天祥老师的51单片机学习版,GTX TX-1C。想用单片机读取ps/2鼠标的移动信息,但是读的数据是错误的。
哪位老师能帮忙看一下错在哪里?谢谢。
代码如下:
主程序:
- /**
- * 单片机接PS2口鼠标,获取鼠标移动数据和单击事件
- * 并在LCD1602上显示
- */
- #include <reg52.h>
- #include <MOUSE.H>
- #include <LCD1602_4.H>
- #include <DELAY52.H>
- #include <SHUMA.H>
- sbit beep=P2^3; // 单击出现时发出声响
- sbit test=P3^0;
- void init();
- void Mouse_start();
- /**
- * 主程序循环检测鼠标位置和按键
- * 并将相关信息写入到LCD1602中
- */
- void main(){
- uchar i=0;
- init();
- Mouse_start();
- // 初始化数据指针和接收缓冲区
- mouse_pBuffer=0;
- mouse_pData=0;
- for(i=0;i<4;i++)
- mouse_data[i]=0x74;
- for(i=0;i<11;i++)
- mouse_buffer[i]=0;
- while(1){
- // 显示鼠标当前位置
- CLEARSCREEN;
- LCD1602_write_string(0,0,"x:");
- LCD1602_write_int(0,2,move_x);
- LCD1602_write_string(0,8,"y:");
- LCD1602_write_int(0,10,move_y);
- // 显示按键状态
- if(mouse_data[0]&0x01){ // 点下左键
- //beep=0;
- LCD1602_write_string(1,0,"left");
- }else if(mouse_data[0]&0x02){ // 点下右键
- //beep=0;
- LCD1602_write_string(1,0,"right");
- }else if(mouse_data[0]&0x04){ // 点下中键
- //beep=0;
- LCD1602_write_string(1,0,"middle");
- }else {
- beep=1;
- LCD1602_write_string(1,0,"nothing");
- }
-
- delayxms(50);
- }
-
- }
- /**
- * 初始化各元器件
- */
- void init(){
- LED_init(); // 初始化LED
- SHUMA_init(); // 初始化数码管
- LCD1602_init(); // 初始化液晶1602
- Mouse_init(); // 初始化鼠标
- COM_init(); // 串口初始化
- }
- /**
- * 设置鼠标进入流模式
- */
- void Mouse_start(){
-
- LCD1602_write_string(1,0,"start mouse....");
- host_to_mouse(0xf4); // 设置鼠标使能,开始工作
- EX1=0;
- delayxms(5000);
- EX1=1;
- }
复制代码
与鼠标有关的头文件MOUSE.H
谢谢,等回复。
|