历史上的今天
今天是:2025年08月14日(星期四)
2020年08月14日 | mouse.h头文件下载( 51单片机ps2 鼠标 驱动)
2020-08-14 来源:51hei
/******************************************************
演示鼠标引脚定义
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;
}
}
史海拾趣
|
慢熔断保险丝与快熔断有什么不同的性能和应用;相同特性和额定电流的保险丝能直接替换吗;保险丝分断能力在实际应用中有什么意义;保险丝性能的影响因素;一次性保险丝和可恢复保险丝的异同;保险电阻能起到保险丝的作用吗?这些都是工程师在保险丝 ...… 查看全部问答> |
|
我程序一直都是裸体的,在裸体中发现了几个问题: (1)WARNING L15: MULTIPLE CALL TO SEGMENT --函数重入 其实这个问题实际上就是函数重入问题,在操作系统的多线程很常见。例如在主循环里调用了一个函数,而在中断服务中,你又一次调用了同样 ...… 查看全部问答> |
|
我的小本系统是win7的,但装不了Protel 99se软件 我的小本系统是win7的,但装不了Protel 99se软件,装的是Protel 99se汉化中文第六版(含第二版),请各位友友帮帮忙…小弟我感激不尽…… 查看全部问答> |
|
SD卡驱动在很多情况下都可以正常的识别SD卡,但是有一些卡却无法识别。 查看log,可以看到一些初始化命令无法获得响应,总是超时。 请问大家遇到过类似的问题吗?可能是哪些方面的原因呢?… 查看全部问答> |
|
刚接触CE1个月 马上要在公司自己开发的主板上移植7645BF驱动了 还有些有关camera驱动问题还不是很清楚 希望高人解答!!! 比如 2440上 camera分配的是irq6 该irq可能由INTSUB_CAM_P、INTSUB_CAM_C或INT_CAM 被置一而引起,有的资料上说中断由VSYN ...… 查看全部问答> |
|
本帖最后由 dontium 于 2015-1-23 13:21 编辑 在我加载程序时,它提示我Data verification failed at address 0x48a0。Please verify target memory and memory map.点我点确定后,又出现这个错误对话框,可地址改为ox6320了,当我打开 ...… 查看全部问答> |




