|
本人新手,使用郭天祥老師的51單片機(jī)學(xué)習(xí)版,GTX TX-1C。想用單片機(jī)讀取ps/2鼠標(biāo)的移動(dòng)信息,但是讀的數(shù)據(jù)是錯(cuò)誤的。
哪位老師能幫忙看一下錯(cuò)在哪里?謝謝。
代碼如下:
主程序:
- /**
- * 單片機(jī)接PS2口鼠標(biāo),獲取鼠標(biāo)移動(dòng)數(shù)據(jù)和單擊事件
- * 并在LCD1602上顯示
- */
- #include <reg52.h>
- #include <MOUSE.H>
- #include <LCD1602_4.H>
- #include <DELAY52.H>
- #include <SHUMA.H>
- sbit beep=P2^3; // 單擊出現(xiàn)時(shí)發(fā)出聲響
- sbit test=P3^0;
- void init();
- void Mouse_start();
- /**
- * 主程序循環(huán)檢測(cè)鼠標(biāo)位置和按鍵
- * 并將相關(guān)信息寫(xiě)入到LCD1602中
- */
- void main(){
- uchar i=0;
- init();
- Mouse_start();
- // 初始化數(shù)據(jù)指針和接收緩沖區(qū)
- 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){
- // 顯示鼠標(biāo)當(dāng)前位置
- 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);
- // 顯示按鍵狀態(tài)
- if(mouse_data[0]&0x01){ // 點(diǎn)下左鍵
- //beep=0;
- LCD1602_write_string(1,0,"left");
- }else if(mouse_data[0]&0x02){ // 點(diǎn)下右鍵
- //beep=0;
- LCD1602_write_string(1,0,"right");
- }else if(mouse_data[0]&0x04){ // 點(diǎn)下中鍵
- //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(); // 初始化數(shù)碼管
- LCD1602_init(); // 初始化液晶1602
- Mouse_init(); // 初始化鼠標(biāo)
- COM_init(); // 串口初始化
- }
- /**
- * 設(shè)置鼠標(biāo)進(jìn)入流模式
- */
- void Mouse_start(){
-
- LCD1602_write_string(1,0,"start mouse....");
- host_to_mouse(0xf4); // 設(shè)置鼠標(biāo)使能,開(kāi)始工作
- EX1=0;
- delayxms(5000);
- EX1=1;
- }
復(fù)制代碼
與鼠標(biāo)有關(guān)的頭文件MOUSE.H
謝謝,等回復(fù)。
|
|