久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 5406|回復: 6
打印 上一主題 下一主題
收起左側

51單片機解碼PS2鼠標,用1602顯示哦

[復制鏈接]
跳轉到指定樓層
樓主
可以用51單片機來驅動PS2鼠標,然后通過LCD1602顯示。
PS2鼠標控制實驗.rar (30.33 KB, 下載次數: 74)



部分源碼:
  1. //Download by
  2. #include"delay52.h"
  3. #ifndef MOUSE_H
  4. #define MOUSE_H

  5. sbit mouse_SDA=P3^2;//數據線P3_2
  6. sbit mouse_CLK=P3^3;//時鐘線P3_3

  7. sbit led1=P1^3;
  8.                            
  9. unsigned char bdata mouse_byte; //接收字節
  10. sbit mouse_byte_bit0=mouse_byte^0;//mouse_byte第0位
  11. sbit mouse_byte_bit1=mouse_byte^1;//mouse_byte第1位
  12. sbit mouse_byte_bit2=mouse_byte^2;//mouse_byte第2位
  13. sbit mouse_byte_bit3=mouse_byte^3;//mouse_byte第3位
  14. sbit mouse_byte_bit4=mouse_byte^4;//mouse_byte第4位
  15. sbit mouse_byte_bit5=mouse_byte^5;//mouse_byte第5位
  16. sbit mouse_byte_bit6=mouse_byte^6;//mouse_byte第6位
  17. sbit mouse_byte_bit7=mouse_byte^7;//mouse_byte第7位

  18. unsigned char bdata mouse_fuction;//功能信息字節
  19.                      
  20. unsigned char mouse_buffer[11];//接收位數據緩沖區
  21. unsigned char mouse_buffer_bit=0;//mouse_buffer[mouse_buffer_bit]
  22. unsigned char mouse_data[3];//接收鼠標數據緩沖區,分別存放:功能信息字節,x位移量,y位移量
  23. unsigned char mouse_data_bit=0;//mouse_data[mouse_data_bit]

  24. unsigned int move_x=10000;//存放橫坐標
  25. unsigned int move_y=10000;//存放縱坐標

  26. void Init_mouse(void)
  27. {
  28.      TCON=0x00;
  29.      EA=1;
  30.      EX1=1;//允許外部中斷1
  31.      ET0=0x01;//允許全局中斷,允許定時器/計數器0溢出中斷
  32.      PX1=1;//設置中斷優先級
  33. }


  34. /***********************************************************************
  35.                 發送數據
  36. ************************************************************************/
  37. void mouse_send_data(unsigned char dat)
  38. {
  39.         unsigned char i;
  40.         EX1=0;                              /*關閉外部中斷1*/
  41.         ACC=dat;                            /*將要發送的數據放入A寄存器*/
  42.         mouse_CLK=0;                       /*拉低時鐘線*/
  43.         delay10us(200);                      /*延時100us以上*/
  44.         mouse_SDA=0;                        /*拉低數據線*/
  45.         delay10us(40);
  46.         mouse_CLK=1;                       /*釋放時鐘線*/
  47.         for(i=0;i<=7;i++)             /*低位在前,一次發送8個數據位*/
  48.         {
  49.                 while(mouse_CLK==1);           /*等待設備拉低時鐘線*/
  50.                 mouse_SDA=(dat>>i)&0x01;      /*發送數據位*/
  51.                 while(mouse_CLK==0);           /*等待設備釋放時鐘線*/
  52.         }
  53.         while(mouse_CLK==1);
  54.         mouse_SDA=~P;                       /*發送校驗位,奇校驗*/
  55.         while(mouse_CLK==0);
  56.         while(mouse_CLK==1);
  57.         mouse_SDA=1;                        /*發送停止位*/
  58.         while(mouse_CLK==0);                                                          
  59.         while(mouse_CLK==1);                                /*應答位*/
  60.         while(mouse_CLK==0);       
  61.         EX1=1;                              /*打開外部中斷1*/
  62. }

  63. /*********************************************
  64.                          奇校檢
  65. **********************************************/
  66. unsigned char Checkout(void)                       
  67. {
  68.         ACC=mouse_byte;
  69.         if(~P==mouse_buffer[9])
  70.                 return 1;
  71.         else
  72.                 return 0;
  73. }

  74. /*********************************************************
  75.                    數據分析及處理
  76. **********************************************************/
  77. void data_analyse(void)
  78. {
  79.         //將收到的11位信號中截取8位數據放進mouse_byte
  80.         mouse_byte_bit0=mouse_buffer[1];
  81.         mouse_byte_bit1=mouse_buffer[2];
  82.         mouse_byte_bit2=mouse_buffer[3];
  83.         mouse_byte_bit3=mouse_buffer[4];
  84.         mouse_byte_bit4=mouse_buffer[5];
  85.         mouse_byte_bit5=mouse_buffer[6];
  86.         mouse_byte_bit6=mouse_buffer[7];
  87.         mouse_byte_bit7=mouse_buffer[8];       
  88.         if(Checkout())//如果校驗正確
  89.         {
  90.                 if(mouse_data_bit<3)         
  91.                         mouse_data[mouse_data_bit++]=mouse_byte;
  92.                 if(mouse_data_bit==3)
  93.                 {
  94.                         mouse_data_bit=0;
  95.                         if(mouse_data[0]&0x10)//如果"X sign bit"為1,表示鼠標向左移
  96.                         {
  97.                                 move_x-=(256-mouse_data[1]);//x坐標減
  98.                         }
  99.                         else
  100.                         {
  101.                                 move_x+=mouse_data[1];//x坐標加
  102.                         }
  103.                         if(mouse_data[0]&0x20)
  104.                         {
  105.                                 move_y-=(256-mouse_data[2]);//y坐標減
  106.                         }
  107.                         else
  108.                         {
  109.                                 move_y+=mouse_data[2];//y坐標加
  110.                         }
  111.                 }
  112.         }
  113. }

  114. /**************************************************
  115.                                    外部中斷1
  116. ***************************************************/
  117. void ReceiveData(void)  interrupt 2
  118. {
  119.         if(mouse_buffer_bit<=10)
  120.         {                                                
  121.                 while(mouse_CLK==0);//等待設備拉高時鐘線
  122.                 mouse_buffer[mouse_buffer_bit++]=mouse_SDA;//接收數據
  123.         }       
  124.         if(mouse_buffer_bit==10)
  125.         {
  126.                 data_analyse();//數據分析及處理
  127.                 mouse_buffer_bit=0;
  128.         }                                                                         
  129. }

  130. #endif

復制代碼


評分

參與人數 1黑幣 +100 收起 理由
admin + 100 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:166723 發表于 2017-2-26 14:14 | 只看該作者
學習一下,謝謝樓主
回復

使用道具 舉報

板凳
ID:166771 發表于 2017-2-26 18:16 | 只看該作者
非常厲害
回復

使用道具 舉報

地板
ID:302991 發表于 2018-4-7 06:22 | 只看該作者
你好。。。我想用單片機讀取鼠標的位移信息并保存。請問能不能通過您這個實現啊
回復

使用道具 舉報

5#
ID:313563 發表于 2018-4-22 10:38 | 只看該作者
學習下
回復

使用道具 舉報

6#
ID:218023 發表于 2018-7-6 19:14 | 只看該作者
不能用
回復

使用道具 舉報

7#
ID:287196 發表于 2018-7-16 17:37 | 只看該作者
鼠標是用哪個的?我的不能用,示波器看了下波形,可能鼠標選的不對。
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: www.一区二区 | 日韩视频在线一区 | 欧美精品一区二区免费视频 | 日本成人久久 | 国产高清在线视频 | 中文字幕一区二区三区四区五区 | 北条麻妃99精品青青久久 | xx视频在线 | 亚洲精品乱码久久久久久按摩观 | 日韩精品免费看 | 超碰成人免费 | 亚洲色图综合网 | 国产欧美精品区一区二区三区 | 久久久久国产精品免费免费搜索 | 久久6视频 | 国产精品久久久久久久免费大片 | 日本视频一区二区 | 日韩av在线免费 | 欧美福利一区 | 中文字幕一区二区三区精彩视频 | 日韩毛片| 中文字幕久久精品 | 欧美一区二区三区 | 在线成人av | 亚洲性在线| 国产 亚洲 网红 主播 | 日韩欧美一级精品久久 | 精品久久视频 | 国产精品免费一区二区三区四区 | 午夜码电影 | 一区二区视频在线 | 欧美国产视频一区二区 | 精品国产欧美一区二区三区成人 | 亚洲成av人影片在线观看 | 国产精品久久久久久久久久久久久 | 欧美精品国产一区二区 | 亚洲一区二区三区四区五区午夜 | 免费特级黄毛片 | 国产精品久久久久久久久久久久 | 精品中文字幕久久 | 亚洲欧美男人天堂 |