红外鼠标.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
一种简单串行鼠标控制的51单片机实现 2011-12-28 13:22:03???来源:互联网 ?? 关键字:鼠标 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条指令,能满足实时跟踪的要求。 3 软件设计 设计的软件要完成按键扫描、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。正好与向左移动的情况相反。 由此,可以根据本次测得的状态与上一次的状态比较的结果确定鼠标移动的方向。 向上、向下的运动检测遵循同样的原则。 根据以上分析,要完成一次计数,单片机至少要对每一种状态检测一次,这就需要单片机有较高的跟踪速度。由实验测得,最短的时间间隔在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,即以补码表示),表示向左运行。

文档评论(0)

000 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档