我们从2011年坚守至今,只想做存粹的技术论坛。  由于网站在外面,点击附件后要很长世间才弹出下载,请耐心等待,勿重复点击不要用Edge和IE浏览器下载,否则提示不安全下载不了

 找回密码
 立即注册
搜索
查看: 866|回复: 0

一种简单串行鼠标控制的单片机实现 - 消费电子 - 电子工程

[复制链接]

该用户从未签到

1万

主题

1292

回帖

2万

积分

管理员

积分
29577

社区居民最爱沙发原创达人社区明星终身成就奖优秀斑竹奖宣传大使奖特殊贡献奖

QQ
发表于 2013-3-30 00:29:27 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区

您需要 登录 才可以下载或查看,没有账号?立即注册

×
鼠标是一种快速定位器,通过移动鼠标可以快速定位屏幕上的对象,是计算机图形界面交互的必用外部设备。通常,鼠标通过微机中的串口或PS/2鼠标插口与主机连接。当在平面上移动鼠标时,通过机械或光学的方法把鼠标滚轮移动的距离和方向转换成脉冲信号传送给计算机,计算机鼠标驱动程序将脉冲个数转换成鼠标的水平方向和垂直方向的位移量,从而控制显示屏上光标箭头随鼠标的移动而移动。根据此原理,我们可利用鼠标的上位机驱动程序来设计测控系统中的编码器读取软件。

<strong>1 串行鼠标的原理及数据协议</strong>

鼠标一般划分为以下功能模块:微控制器、按键检测、位置移动检测、RS232信号产生、5V电源产生器。

微软公司与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我们可以方便地制作鼠标。

<strong>表1 鼠标系统数据信息协议</strong>
Mouse System格式Microsoft格式数字位7654321076543210字节110000LMR11LRY7Y6 X7 X6字节2X7 X6 X5 X4 X3 X2 X1 X000X5 X4 X3 X2 X1 X0字节3Y7 Y6 Y5 Y4 Y3 Y2 Y1 Y000Y5 Y4 Y3 Y2 Y1 Y0字节4X7 X6 X5 X4 X3 X2 X1 X0 字节5Y7 Y6 Y5 Y4 Y3 Y2 Y1 Y0

L=左键状态M=中键状态R=右键状态1=按下0=释放
X7~X0=X轴(左右)运动数据Y7~Y0=Y轴(上下)运动数据

<strong>2 AT89C51构成的鼠标电路</strong>

AT89C2051构成的鼠标接口电路如图2所示。


<ignore_js_op>





2010-3-19 20:55:53 上传
<strong>下载附件</strong> (21.71 KB)




</ignore_js_op>


硬件接口分配如下:
P1口完成对按键及X、Y方向的运动扫描;
P3.1完成数据发送。

为较好地跟踪鼠标状态,采用12MHz晶振,AT89C2051每μs执行1条指令,能满足实时跟踪的要求。

<strong>3 软件设计</strong>

设计的软件要完成按键扫描、X方向/Y方向运动扫描、数据发送等任务。在记数光电管产生脉冲的同时,将数据按照规定格式发送到主机。脉冲的个数反映了移动的距离,单位时间内脉冲数越多,鼠标移动越快。

下面以X方向为例,详细说明方向的判断及脉冲的记数。
X方向的2路信号为P1.2与P1.3,分别用X1与X2表示。当鼠标向左移动时,X1(P1.2)超前于X2(P1.3);当鼠标向右移动时,X1(P1.2)落后于X2(P1.3);假设测得X1、X2都为低电平0(图3中a),若下一次测得X1为高电平1、X2为低电平0(图3中b)。第三次检测到X1、X2电平1(图3中c),继续向左移动,直到检测到X1为低电平1、X2为高电平0(图3中d),正好检测到一个完整的脉冲,计数器加 1,接着进入下一个循环。由此可见,要完成一个脉冲的计数,需要检测到四种不同的状态:X1=X2=0;X1=1,X2=0;X1=X2=1;X1=0,X2=1。
向右移动的状态为:X1=X2=0;X1=0,X2=1;X1=X2=1;X1=1,X2=0。正好与向左移动的情况相反。


<ignore_js_op>





2010-3-19 20:55:53 上传
<strong>下载附件</strong> (13.42 KB)




</ignore_js_op>


由此,可以根据本次测得的状态与上一次的状态比较的结果确定鼠标移动的方向。
向上、向下的运动检测遵循同样的原则。

根据以上分析,要完成一次计数,单片机至少要对每一种状态检测一次,这就需要单片机有较高的跟踪速度。由实验测得,最短的时间间隔在b与d处,即X1=X2=0变化到X1=X2=1或者X1=X2=1变化到X1=X2=0的过程中。鼠标正常移动时,间隔一般为300μs~500μs。即使在鼠标高速移动时,最小间隔也大于80μs。当AT89C2051采用12MHz晶振时,程序正常扫描一遍的时间最大为50μs(包括数据处理与发送的时间),因此,能保证每种状态都能扫描到。

在表1中,X7~X0反映X方向移动的距离。如X值为正(X7=0),则表示鼠标向右运行;如果为负值(X7=1,即以补码表示),表示向左运行。

同理,若Y值为正,表示鼠标向下运行;若为负,则表示向上运行。

在程序中,若检测到鼠标状态有变化,则延时多个循环(在每个循环中都对鼠标状态检测一遍),作为消除按键抖动的时间。信息采用RS232格式,波特率为1200baud。为满足鼠标1位起始位、7位数据,无奇偶校验位以及2位停止位的数据格式,在程序中,对数据进行了处理,将要发送的每个字节的最高位置为1。

主程序流程如图4所示。在图中,当检测到按钮状态发化或者检测到X、Y方向运行时,置延时循环标志。为了发送3个字节信息,在串行口中断程序中置标志位,使3个字节能连续发送完。


<ignore_js_op>





2010-3-19 20:55:52 上传
<strong>下载附件</strong> (40.6 KB)




</ignore_js_op>


另外,当主机检测鼠标时,需要鼠标发送初始化报告,以检测鼠标是束安装。因此,在鼠标初始化过程中,首先要发送一个字节“4DH” (“M”,D7位置“1”则为“CDH”),使主机能够检测到鼠标已经安装。

完整的程序清单见网络补充版(http://www.dpj.com.cn)。

<strong>4 结论</strong>

本文利用AT89C2051完成了鼠标移动数据的读取与PC机通信数据的传送。该系统在Windows 95、98和Win2000XP下均调试通过。文中给出的硬件原理图同样可应用于测控系统中编程器信号的读取,应用面较广。

<strong>参考文献</strong>

1. 余永权 ATMEL89 系列单片机应用技术 2002
2. 王有绪 PIC 系列单片机接口技术及应用系统设计 2000

作 者:山东潍坊科技职业学院 刘迎春 牟金秀 西安交通大学 毕宏彦
来 源:单片机与嵌入式系统应用 2003(10)
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

公告:服务器刚移机,
大家请不要下载东西。
会下载失败


Copyright ©2011-2024 NTpcb.com All Right Reserved.  Powered by Discuz! (NTpcb)

本站信息均由会员发表,不代表NTpcb立场,如侵犯了您的权利请发帖投诉

( 闽ICP备2024076463号-1 ) 论坛技术支持QQ群171867948 ,论坛问题,充值问题请联系QQ1308068381

平平安安
TOP
快速回复 返回顶部 返回列表