历史上的今天
返回首页

历史上的今天

今天是:2025年02月01日(星期六)

2021年02月01日 | 单片机简单串行鼠标控制的实现

2021-02-01 来源:eefocus

简介:通过对鼠标底层通信原理与协议的深入分析,探讨以AT89C2051单片机构成串行鼠标的实现方法;介绍鼠标编码器数据取软件的设计原理及方法,给出串行鼠标的软件设计。


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


1 串行鼠标的原理及数据协议


鼠标一般划分为以下功能模块:微控制器、按键检测、位置移动检测、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我们可以方便地制作鼠标。


表1 鼠标系统数据信息协议

L=左键状态 M=中键状态 R=右键状态 1=按下 0=释放


X7~X0=X轴(左右)运动数据 Y7~Y0=Y轴(上下)运动数据


2 AT89C51构成的鼠标电路


AT89C2051构成的鼠标接口电路。


硬件接口分配如下:


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,即以补码表示),表示向左运行。


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


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


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


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


4 结论


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


推荐阅读

史海拾趣

浙江凡华(FANHAR)公司的发展小趣事

对于计数型10键键盘编码译码显示电路,网友可能会有多个方面的问题,以下是一些常见问题及其回答:

一、设计基础与原理

问题1:计数型10键键盘编码译码显示电路的基本组成是什么?

回答:计数型10键键盘编码译码显示电路主要由三部分组成:键盘编码电路、译码电路和显示电路。键盘编码电路负责将按键的输入转换为对应的编码信号;译码电路则将该编码信号还原为可识别的信息或数据;最后,显示电路将译码后的信息以可视化的方式呈现出来。

问题2:编码和译码在数字电路中的作用是什么?

回答:编码是将信息或数据转换为二进制代码的过程,以便在数字系统中进行监测、控制、传输等操作。而译码则是编码的逆过程,即将二进制代码还原为原始的信息或数据,以便进行显示或进一步处理。在计数型10键键盘编码译码显示电路中,编码和译码是实现按键输入到显示输出的关键步骤。

二、技术实现细节

问题3:如何实现10键键盘的编码?

回答:实现10键键盘的编码通常可以采用优先编码器。优先编码器能够识别多个输入信号中的最高优先级信号,并将其转换为对应的编码输出。在10键键盘中,可以将10个按键的输入信号接入优先编码器的输入端,通过编码器的内部逻辑处理,得到按键对应的编码输出。

问题4:译码器如何选择以满足显示需求?

回答:译码器的选择应根据显示需求来确定。对于计数型10键键盘编码译码显示电路,如果显示的是十进制数字,则应选择能够处理十进制数的译码器,如74LS48等。此外,还需要考虑译码器的输入位数、输出类型(如共阳极或共阴极)以及驱动能力等因素,以确保译码器能够满足显示电路的要求。

问题5:显示电路如何设计以兼容不同显示器?

回答:显示电路的设计应兼顾译码器、驱动器和显示器三部分。首先,根据译码器的输出选择合适的驱动器来驱动显示器。驱动器的选择应考虑显示器的类型(如七段数码管、LED点阵等)、工作电压和电流等因素。其次,根据显示器的特性设计显示电路,包括确定显示方式(如静态显示或动态显示)、设置显示亮度等。最后,通过连接译码器、驱动器和显示器,实现按键输入到显示输出的完整电路。

三、常见问题与解决方案

问题6:如何解决按键冲突问题?

回答:按键冲突是指多个按键同时按下时,电路无法正确识别所有按键的状态。在计数型10键键盘编码译码显示电路中,可以通过采用优先编码器来避免按键冲突问题。因为优先编码器能够识别最高优先级的按键信号,并忽略其他低优先级的按键信号。此外,还可以通过软件算法来进一步处理按键冲突问题,如设置按键去抖动时间、检测按键按下和释放的时间差等。

问题7:如何提高电路的抗干扰能力?

回答:提高电路的抗干扰能力可以从多个方面入手。首先,选择具有良好抗干扰性能的元器件和电路布局方式;其次,在电路设计中加入滤波、去耦等电路来抑制干扰信号;最后,通过软件算法来识别和排除干扰信号的影响。此外,还可以采用屏蔽、接地等外部措施来进一步提高电路的抗干扰能力。

以上是对计数型10键键盘编码译码显示电路中网友可能提出的问题及其回答的总结。在实际应用中,还需要根据具体需求和条件进行灵活调整和优化。

Capax Technologies Inc公司的发展小趣事

Capax Technologies Inc的成功还得益于与各大企业的紧密合作。公司与多家知名的电子设备制造商建立了长期稳定的合作关系,为其提供高品质的组件和技术支持。通过与合作伙伴的共同努力,Capax Technologies Inc的产品得以广泛应用在各类电子设备中,进一步提升了公司的知名度和市场份额。

AMI Semiconductor公司的发展小趣事

Capax Technologies Inc的崛起始于一次技术突破。公司研发团队成功开发出一种新型半导体材料,显著提高了电子设备的性能和能效。这一创新成果迅速在行业内引起关注,Capax Technologies Inc因此获得了大量订单和投资。随着技术的不断迭代和优化,Capax Technologies Inc逐渐在电子行业中崭露头角,成为一家备受瞩目的创新型企业。

EVERLIGHT公司的发展小趣事

在电子产品领域,品质是企业生存和发展的关键。EVERLIGHT一直将品质管理放在首位,建立了严格的质量控制体系。公司从原材料采购到生产过程,再到产品出厂,都进行严格的品质检测和监控,确保每一颗LED都符合高标准的质量要求。这种对品质的坚持让EVERLIGHT在市场上赢得了良好的口碑,也为企业赢得了更多客户的信任。

Evans Capacitor Company公司的发展小趣事

在国内市场取得成功后,ECC开始将目光投向国际市场。公司积极参加国际展会,与海外客户建立联系。同时,ECC还在海外设立了研发中心和生产基地,以便更好地了解当地市场需求并提供定制化服务。通过不懈的努力,ECC的产品成功打入国际市场,实现了全球化布局。

Apx-Crystal公司的发展小趣事

Apx-Crystal公司起初是一家专注于研发新型晶体振荡器的小型科技公司。在创始人的领导下,团队通过不懈的努力,成功研发出了一款具有高稳定性和长寿命的晶体振荡器,这一技术突破在行业内引起了广泛关注。随着产品性能的不断提升和成本的有效控制,Apx-Crystal开始赢得越来越多客户的青睐,市场份额逐年攀升。公司逐渐扩大生产规模,并在多个国家和地区设立了销售和服务网络,实现了从初创企业到国际知名电子元件供应商的华丽转身。

问答坊 | AI 解惑

招聘高级硬件开发工程师

本公司提供良好发展机会和平台 我公司是一家主营一卡通智能管理系统、智能卡机具、热工仪表三大类产品,集研发、生产、销售、工程安装维护等全套工程实施,具有雄厚技术、销售实力的民营企业。 公司于2003年11月取得ISO9001认证;2005年8月,被杭 ...…

查看全部问答>

电子竞赛—具有语音功能的RCL测试仪

本帖最后由 paulhyde 于 2014-9-15 04:23 编辑 电子竞赛—具有语音功能的RCL测试仪  …

查看全部问答>

请教关于HID设备的读写问题~

关于访问HID设备的问题,在网上看到一篇介绍“Windows主机端与自定义USB HID设备通信详解”(http://blog.eeworld.net/kevinyujm/archive/2009/06/12/4264506.aspx)的文章,现在有几个疑问,还请各位指点: 1.相同类型的Report,其Report ID是不 ...…

查看全部问答>

wince下如何实现cpu的休眠?就100分了,都给了

现在本人在做wince的电源管理,芯片是三星2450的,wince5.0,想问问要实现cpu的休眠,不是系统休眠,要怎么做?是不在在D:\\WINCE500\\PUBLIC\\COMMON\\OAK\\DRIVERS\\PM\\PDD下的里面的DEFAULT或是PDA模式下改里面的platform.cpp文件。 其实2450 ...…

查看全部问答>

请问再wince上如何检验usb口是否已经接续?

请问再wince上如何检验usb口是否已经接续? 另外,pc方面在接续后需要做什么动作通知wince已经接续了usb?谢谢 …

查看全部问答>

急求助:有没有TTL电平直接转232和485两种电平的器件?有成品最好.

有没有TTL电平直接转232和485两种电平的器件?有成品最好. 也就是说用这个产品有三个接口.可以直接把TTL电平转成232和485信号输出.…

查看全部问答>

vxworks 如何动态加载.0文件?

驱动文件以.0给出,需要检测到有该硬件再加载其驱动,如何实现?有什么命令可以?谢谢…

查看全部问答>

keil中的lib文件是怎么生成的?如何使用呢?

用过的给分享下经验刚才看到了STM32F10xR.LIB这个文件前面有文章提到不过似乎没有说怎么生成…

查看全部问答>