mouse.h头文件下载( 51单片机ps2 鼠标 驱动)

发布者:DelightWish123最新更新时间:2020-08-14 来源: 51hei关键字:mouse  头文件  51单片机  ps2  鼠标  驱动 手机看文章 扫描二维码
随时随地手机看文章

/******************************************************

     演示鼠标引脚定义

CLK : 白色

SDA  : 绿色

GND:   橙色

VCC:   蓝色

*******************************************************/

#include"delay52.h"

#ifndef MOUSE_H

#define MOUSE_H


sbit mouse_SDA=P3^4;//数据线P3_5

sbit mouse_CLK=P3^3;//时钟线P3_3



                           

unsigned char bdata mouse_byte; //接收字节

sbit mouse_byte_bit0=mouse_byte^0;//mouse_byte第0位

sbit mouse_byte_bit1=mouse_byte^1;//mouse_byte第1位

sbit mouse_byte_bit2=mouse_byte^2;//mouse_byte第2位

sbit mouse_byte_bit3=mouse_byte^3;//mouse_byte第3位

sbit mouse_byte_bit4=mouse_byte^4;//mouse_byte第4位

sbit mouse_byte_bit5=mouse_byte^5;//mouse_byte第5位

sbit mouse_byte_bit6=mouse_byte^6;//mouse_byte第6位

sbit mouse_byte_bit7=mouse_byte^7;//mouse_byte第7位


unsigned char bdata mouse_fuction;//功能信息字节

                     

unsigned char mouse_buffer[11];//接收位数据缓冲区

unsigned char mouse_buffer_bit=0;//mouse_buffer[mouse_buffer_bit]

unsigned char mouse_data[3];//接收鼠标数据缓冲区,分别存放:功能信息字节,x位移量,y位移量

unsigned char mouse_data_bit=0;//mouse_data[mouse_data_bit]


unsigned int move_x=10000;//存放横坐标

unsigned int move_y=10000;//存放纵坐标


void Init_mouse(void)

{

     TCON=0x00;

     EA=1;

     EX1=1;//允许外部中断1

     ET0=0x01;//允许全局中断,允许定时器/计数器0溢出中断

     PX1=1;//设置中断优先级

}



/***********************************************************************

  发送数据

************************************************************************/

void mouse_send_data(unsigned char dat)

{

unsigned char i;

EX1=0;                              /*关闭外部中断1*/

ACC=dat;                            /*将要发送的数据放入A寄存器*/

mouse_CLK=0;                       /*拉低时钟线*/

delay10us(200);                      /*延时100us以上*/

mouse_SDA=0;                        /*拉低数据线*/

delay10us(40);

mouse_CLK=1;                       /*释放时钟线*/

for(i=0;i<=7;i++)             /*低位在前,一次发送8个数据位*/

{

  while(mouse_CLK==1);           /*等待设备拉低时钟线*/

  mouse_SDA=(dat>>i)&0x01;      /*发送数据位*/

  while(mouse_CLK==0);           /*等待设备释放时钟线*/

}

while(mouse_CLK==1);

mouse_SDA=~P;                       /*发送校验位,奇校验*/

while(mouse_CLK==0);

while(mouse_CLK==1);

mouse_SDA=1;                        /*发送停止位*/

while(mouse_CLK==0);        

while(mouse_CLK==1);    /*应答位*/

while(mouse_CLK==0);

EX1=1;                              /*打开外部中断1*/

}


/*********************************************

    奇校检

**********************************************/

unsigned char Checkout(void)   

{

ACC=mouse_byte;

if(~P==mouse_buffer[9])

  return 1;

else

  return 0;

}


/*********************************************************

     数据分析及处理

**********************************************************/

void data_analyse(void)

{

//将收到的11位信号中截取8位数据放进mouse_byte

mouse_byte_bit0=mouse_buffer[1];

mouse_byte_bit1=mouse_buffer[2];

mouse_byte_bit2=mouse_buffer[3];

mouse_byte_bit3=mouse_buffer[4];

mouse_byte_bit4=mouse_buffer[5];

mouse_byte_bit5=mouse_buffer[6];

mouse_byte_bit6=mouse_buffer[7];

mouse_byte_bit7=mouse_buffer[8];

if(Checkout())//如果校验正确

{

  if(mouse_data_bit<3)        

   mouse_data[mouse_data_bit++]=mouse_byte;

  if(mouse_data_bit==3)

  {

   mouse_data_bit=0;

   if(mouse_data[0]&0x10)//如果"X sign bit"为1,表示鼠标向左移

   {

    move_x-=(256-mouse_data[1]);//x坐标减

   }

   else

   {

    move_x+=mouse_data[1];//x坐标加

   }

   if(mouse_data[0]&0x20)

   {

    move_y-=(256-mouse_data[2]);//y坐标减

   }

   else

   {

    move_y+=mouse_data[2];//y坐标加

   }

  }

}

}


/**************************************************

       外部中断1

***************************************************/

void ReceiveData(void)  interrupt 2

{

if(mouse_buffer_bit<=10)

{                                 

  while(mouse_CLK==0);//等待设备拉高时钟线

  mouse_buffer[mouse_buffer_bit++]=mouse_SDA;//接收数据

}

if(mouse_buffer_bit==10)

{

  data_analyse();//数据分析及处理

  mouse_buffer_bit=0;

}           

}


关键字:mouse  头文件  51单片机  ps2  鼠标  驱动 引用地址:mouse.h头文件下载( 51单片机ps2 鼠标 驱动)

上一篇:单片机多通道AD采集源程序(8路) STC15w系列
下一篇:理工男的浪漫,12864液晶表白

推荐阅读最新更新时间:2024-11-02 20:28

51单片机带闰年补偿的一个时钟程序
这是我教的学生写的带闰年补偿的一个时钟,比我自己写成的还有成就感 #include reg51.h #include delay.h #define uchar unsigned char #define uint unsigned int uchar S1num; sbit RS=P1^0; sbit RW=P1^1; sbit EN=P1^2; sbit GND=P2^4; sbit K2=P2^3; sbit K4=P2^2; sbit K6=P2^1; uchar x,num,shi,fen,miao,day,mon,year,week,count; void display(); void write_com(uch
[单片机]
c51单片机之利用外部中断实现数字时钟,且具有调时功能
仿真图: 代码段: /*整体功能:用八位共阳极数目管作电子时钟显示,并用key0位控制进行时分秒位的选择,当按一次时代表选中时位,两次选中分位,三次选中秒位,第四次取消选中时钟正常运行 且选中时该位的小数点会亮代表该位已被选中;key1按键用来对位进行加一操作,key2用来对位进行减一操作*/ #include reg52.h #define uint unsigned int //重定义,方便使用 #define uchar unsigned char sbit key0=P3^1; //位定义,此处赋予key0设置功能,通过对key0的操作来选中时钟的三个位 sbit key1=P3^2; //赋予
[单片机]
c<font color='red'>51单片机</font>之利用外部中断实现数字时钟,且具有调时功能
#51单片机#8位数码管(74HC595芯片)的使用方法
数码管基本属性: 1.采用2片595驱动数码管,需要单片机3路IO口,根据数码管动态扫描原理进行显示; 2.宽工作电压3.3V到5V; 3.PCB板尺寸:71mm*22mm 4.数码管型号:0.36 4位共阳 商家给的基本资料: 最新八位串行595数码管资料.rar 8位数码管的连接原理图 #include AT89X51.H #include intrins.h // 函数原形定义 #define uchar unsigned char #define uint unsigned int void main (void); // 主函数 void LED_OUT (uchar X); // LED单字节串行移
[单片机]
#<font color='red'>51单片机</font>#8位数码管(74HC595芯片)的使用方法
51单片机命名规则
89C51 8代表8位单片机 9代表falsh存储器,此位置为0代表无rom,7代表eprom存储器 c代表CMOS工艺,此位置为S代表ISP编程方式 1代表片内程序存储器容量,容量大小对应为该位数字*4KB 89C52:8KB容量 at89s51_&_stc89c51命名规则 本文介绍了最常见的两种厂家的单片机的命名规则. 以后见了stc和atmel的单片机看看型号就知道,什么配置了. 先说ATMEL公司的AT系列单片机 89系列单片机的型号编码由三个部分组成, 它们是前缀、型号和后缀。格式如下: AT89C XXXXXXXX其中,AT是前缀,89CXXXX是型号,XXXX是后缀。 下面分别对这
[单片机]
基于51单片机的广告灯左移电路设计与程序分析
1.实验任务   做单一灯的左移右移,硬件 电路 如图4.4.1所示,八个 发光二极管 L1-L8分别接在 单片机 的P1.0-P1.7接口上,输出“0”时,发光 二极管 亮,开始时P1.0→P1.1→P1.2→P1.3→┅→P1.7→P1.6→┅→P1.0亮,重复循环。 2. 电路原理图                         图4.4.1 3.系统板上硬件连线   把“单片机系统”区域中的P1.0-P1.7用8芯排线连接到“八路发光二极管指示模块”区域中的L1-L8端口上,要求:P1.0对应着L1,P1.1对应着L2,……,P1.7对应着L8。 4. 程序设计内容   我们可以运用输出端口指令MOV P1,A或MOV
[单片机]
基于<font color='red'>51单片机</font>的广告灯左移电路设计与程序分析
51单片机串口通信需要加超时中断吗?
接收数据时,超过一定时间就算出错. 这个超时的时间是单片机自己算出的吗?超时的时间是由编程序的人定的,他定多长就多长 从一段程序开始 实现电脑向 单片机发送一些数据,单片机返回Iget +数据 #include #define uchar unsigned char #define uint unsigned int unsigned char flag,a,i;//声明标志位 flag uchar code table = I get void init() { TMOD=0x20;//设置T1定时器工作方式为2 8位初值自动重装的8位定时器 这里设置了两个计数器的工作方式 TH1=0xfd; /
[单片机]
em78p153驱动1602源程序
芯片为EM78P153 P64,P65接晶振,振荡模式为4MHz晶振 看门狗关,指令周期为2个CLOCK,P63为复位脚 *******************IO口的定义********************* PORT6 EQU 0X06 IOC60 EQU 0X06 **************特殊功能寄存器的定义****************** TCC EQU 0X01 PC EQU 0X02 PSW EQU 0X03 IOCD0 EQU 0X0D IOCE0 EQU 0X0E IOCF0 EQU 0X0F RF EQU 0X0F ***************用户自定义的寄存器***
[单片机]
东芝推出面向多种车载应用3相直流无刷电机的新款栅极驱动IC
中国上海,2024年10月31日—— 东芝电子元件及存储装置株式会社(“东芝”)今日宣布,开始提供适用于3相直流无刷电机的栅极驱动 IC——“TB9084FTG”的工程样品。这款器件可用于驱动包括车身系统应用 、电动泵以及电机发电机 在内的关键车载功能 。该器件样品现已开放申请。 当前道路车辆上的许多机械式器件现已实现电气化,且在车辆上装有大量车载电机,包括车身系统应用中使用的电机。这一转变推动业界采用更安静、更耐用的直流无刷电机来取代直流有刷电机。 TB9084FTG旨在加强从直流有刷电机到直流无刷电机的转变。该器件提供车载应用所需最低要求的栅极驱动IC功能,并通过结合MOSFET、电源IC、微控制器和通信PHY
[电源管理]
东芝推出面向多种车载应用3相直流无刷电机的新款栅极<font color='red'>驱动</font>IC
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved