本人新手,使用郭天祥老師的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
謝謝,等回復。
|