摘要:通过对鼠标底层通信原理与协议的深入分析,探讨以at89c2051单片机构成串行鼠标的实现方法;介绍鼠标编码器数据取软件的设计原理及方法,给出串行鼠标的软件设计。
关键词:鼠标 at89c2051 软件设计
鼠标是一种快速定位器,通过移动鼠标可以快速定位屏幕上的对象,是计算机图形界面交互的必用外部设备。通常,鼠标通过微机中的串口或ps/2鼠标插口与主机连接。当在平面上移动鼠标时,通过机械或光学的方法把鼠标滚轮移动的距离和方向转换成脉冲信号传送给计算机,计算机鼠标驱动程序将脉冲个数转换成鼠标的水平方向和垂直方向的位移量,从而控制显示屏上光标箭头随鼠标的移动而移动。根据此原理,我们可利用鼠标的上位机驱动程序来设计测控系统中的编码器读取软件。
1 串行鼠标的原理及数据协议
鼠标一般划分为以下功能模块:微控制器、按键检测、位置移动检测、rs232信号产生、5v电源产生器。串行鼠标的功能框图如图1所示。
微软公司与mouse system公司的鼠标都采用串行输入技术。微软公司的协议格式为3个字节:第1字节的6、7位固定为1,4,5位分别为左右键状态,2、3位为上下移动数据的高6、7位,0、1位为左右移动数据的高6、7位;第2、第3字节发送的都是左右上下的其余6位数据,其中y表示上下、x表示左右移动的数据位。mouse system公司的协议格式为5个字节:1个字节用于描述3个按键的状态,2个字节为y方向的相对坐标,另外2个字节为x方向的相对坐标,具体协议如表1所列。由表1我们可以方便地制作鼠标。
表1 鼠标系统数据信息协议
mouse system格式 | microsoft格式 | |
数字位 | 7 6 5 4 3 2 1 0 | 7 6 5 4 3 2 1 0 |
字节1 | 1 0 0 0 0 l m r | 1 1 l r y7 y6 x7 x6 |
字节2 | x7 x6 x5 x4 x3 x2 x1 x0 | 0 0 x5 x4 x3 x2 x1 x0 |
字节3 | y7 y6 y5 y4 y3 y2 y1 y0 | 0 0 y5 y4 y3 y2 y1 y0 |
字节4 | x7 x6 x5 x4 x3 x2 x1 x0 | |
字节5 | y7 y6 y5 y4 y3 y2 y1 y0 |
l=左键状态 m=中键状态 r=右键状态 1=按下 0=释放
x7~x0=x轴(左右)运动数据 y7~y0=y轴(上下)运动数据
2 at89c51构成的鼠标电路
at89c2051构成的鼠标接口电路如图2所示。
硬件接口分配如下:
p1口完成对按键及x、y方向的运动扫描;
p3.1完成数据发送。
为较好地跟踪鼠标状态,采用12mhz晶振,at89c2051每μs执行1条指令,能满足实时跟踪的要求。
图2 电路原理图
3 软件设计
设计的软件要完成按键扫描、x方向/y方向运动扫描、数据发送等任务。在记数光电管产生脉冲的同时,将数据按照规定格式发送到主机。脉冲