ImageVerifierCode 换一换
格式:DOCX , 页数:9 ,大小:80.46KB ,
资源ID:20932938      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/20932938.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(80C196单片机鼠标接口程序设计实例Word下载.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

80C196单片机鼠标接口程序设计实例Word下载.docx

1、当鼠标被拖动超过一个最小距离或某一按钮被按下时,它按照规定的协议将移动距离和按钮状态通过一次或几次信息发送到机;主机上的鼠标驱动程序将信息变换成鼠标位置和按钮状态供其它程序模块调用。每发生一次移动或按钮状态变化,鼠标向上发送一次信息。通常一般鼠标的分辨率为400DPI。理论上即沿着某一方向每拖动一英寸(一般速度),会产生400次信息发送过程。,如果拖动较快,则信息发送次数送减少,但所反映的总的移动距离仍然是400步。各种串行接口鼠标在物理层普遍采用标准的串行通信协议,波特率为1200bps。帧格式为7个数据位、2个停止位,无奇偶校验位。上层协议则在此基础上以十六进制数形式直接发更新鼠标信息,包

2、括:初始化报告:移动方向、距离、按钮状态。其一般形式如表1所示。表1 鼠标信息发送格式上述P1、P2、P3三个参数说明:P1_D7D6固定值01;D1D0=11本次鼠标移动包含左右移动分量;D3D2=11本次鼠标移动包含上下移动分量;D4=1目前鼠标右键呈按下状态;D5=1目前鼠标左键呈按下状态(D4D5=00则键呈释放状态)。P2_D7D6固定值00;其余六位表示一个有符号二进制数,反映左右移动量,大于0为向右移动,小于0为向左移动。P3_D7D6固定值00;其余六位表示一个有符号二进制数,反映上下移动量,大于0为向下移动,小于0为向上移动。例如:6CH 02H 3AH(P1=6CH,P2=

3、02H,P3=3AH)反馈出鼠标向右移动了2个单位,向上移动了6个单位,目前左键按下。2 鼠标接口程序设计80C196系列单片机内设RS-232收发器,但需要配置接口芯片实现电平转换。考虑到鼠标从串口窃取功率,接口芯片必须具有一定的驱动能力,而不能要用简单的准RS-232电平转换器。这里采用MAX232E作为接口芯片。图1中左侧为80C196单片机,P2.0(TXD)、P2.1(RXD)通过MAX232E形成满足鼠标要求的串行接口,包括生成标准RS-232C电平和提供电源供应。图1中最右边为9针或24针标准串行接插件。由于鼠标的电源供应采用功率窃取方案,由DTR/RTS提供,这里为DTR加限流

4、电阻防止对鼠标造成伤害。RTS由MAX232E垢信号发送端提供,通过80C196的P2.0控制MAX232E的10脚(对应的输出脚为7脚)电平高低以改变7脚电位,使鼠标可以接收来自RTS的控制命令,以实现鼠标安装与否的检测。MAX232E的11脚(对应的输入脚为14脚)设备高电平以保证14脚电位为负RS-232电位,满足鼠标发送信号时的电平要求。从链路层看,80C196串行接口的四种工作方式均不满足鼠标的帧格式要求;但其工作方式1(1位起始位、8位数据位、1位停止位)的总传送位数与鼠标(1位起始位、7个数据位、2个停止位)相同,均为10位。接收过程中80C196收到7个数据位后,将2个停止位中

5、的第一个作为数据位装入接收缓冲器的最高位,由于停止位在物理层是高电平,作为数据被接收后相当于逻辑“0”;剩下的第二个停止位给好为80C196提供了有效的停止位。利用80C196的工作方式1完全可以保证正确接收鼠标信息。单片机起动后,通过鼠标驱动模块对鼠标进行初始化,即通过P2.0使RTS电平翻转一次而令鼠标发送初始化报告,以确认鼠标是否安装。之后,鼠标即可随着拖动或按钮操作向单片机发送动作信息,经接口模块释放即可反应鼠标位置和按钮状态。鼠标接口模块主要包括按钮状态识别和位置识别两个部分。80C196将根据接收到的鼠标信息不断刷新鼠标信息缓冲区。由于鼠标事件间隔不确定,采用扫描方式但会浪费CPU

6、时间,还可能因来不及处理而丢失信息。有效的处理方法是采用中断方式接收,应用模块通过软件接口获得鼠标信息。完整的鼠标接口程序流程图如图2所示。在初始化阶段,首先检查鼠标是否存在,根据结果设置标志位,以备以后取鼠标信息时判断用;根据需要设定鼠标初始化位置、按钮原始状态;最后设置串行接口参数(帧格式等)并开放鼠标中断。鼠标发送信息时,第三个字节为一个完整的信息报告。但80C196每接收到一个字节,就产生一次中断,然后根据当前字节是否大于40H确定其性质。若是信息报告的首字节,则还要进一步通过有效性检验后保存;若不是首字节,则必须经过一系列检验后保存起来。收到三个字节后立即进行命令分析和执行。具体处理

7、过程可参看源程序。用户模块通过特定接口模块(图2(b)获得鼠标当前位置和按钮状,并可通过进位标志C=0/1判断鼠标是否安装。下面是图2、3程序流程图如图对应的程序清单。该程序要求80C196单片机的工作频率为12MHz;如果采有其它工作频率,通过修改串行口的波特率设置参数以及延时程序的时间常数即可。;8098特殊功能寄存器预定义R0 EQU 00H:WordSBUD EQU 07H:ByteINT_MASK EQU 08H:INT_PEND EQU 09H:BAUD_RT EQU 0EH:IOP2 EQU 10H:SP_CON EQU 11H:SP_STAT EQU 11H:IOC1 EQU

8、16H:SP EQU 18H:通用寄存器预定义RSEG AT ICHAX: DSW 1DX:AL EQU AX:BYTEAH EQU (AX+1):DL EQU DX:DH EQU (DX+1):SCRNW EQU 640 ;显示屏宽度SCRNH EQU 480 ;显示屏高度变量区RSEG AT 20HM_X :DSW 1 ;光标X值M_Y :DSW 1 :光标Y值M_BUF :DSB 4 ;接收缓冲区M_P : DSW 1 ;接收指针BX :DSW 1LRB_OK:DSB 1 ;鼠标状态Bit7:存在,Bit5,左键,Bit4:右键CSEG AT 2000HDCW INITCSEG AT 2

9、00CHDCW SIOINTDCW 0DCB 0,0,0,0,0,0DCB 08DHDCB 000HDCB 027H,0FEHCSEG AT 2080HINIT:LD SP,#0100H ;设堆栈指针LD M_X,#SCRNW/2;初始化指针LD M_Y,#SCRNH/2ANDB LRB_OK,#7CHLD M_P,#M_BUFCLRB INT_PEND ;清除中断LDB INT_MASK,#40H ;开串行中断LDB AL,SP_STAT ;清除RI/TILDB SP_CON,#09H ;设串口模式LDB BAUD_RT,#9BH ;1200,12MHzLDB BAUD_RT,#80HEIA

10、NDB IOP2,#0FEH ;P2.2=0LD AX,#8000H ;延迟200msDLY0:DEC AXJNE DLY0LDB AL,LRB_OKLBS AL,7,M_OKANDB INT_MASK,#0BFHM_OK:NOP 清单二:取鼠标消息,AL=鼠标及按钮状态,BX=X,DX=Y GET_M:ANDB INT_MASK,#0BFHLDB AL,LRB_OK ;取鼠标信息LD BX,M_XLD DX,M_YORB INT_MASK,#40HRET清单三:串口中断服务程序SIOINT:PUSHF ;中断服务PUSH AXLDB AL,SBUFLDB AH,SP_STATJBS AL,6

11、,ISB0 ;第一个字节CMP M_P,#M_BUFJNE SIO_1SJMP C99 ;缓冲区空,出错SIO_1:CMP M_P,#M_BUF+2JH C98 ;缓冲区满,出错STB AL,M_P+ ;存储收到字节CMP M_P,#M_BUF+3JNE C99LD M_P,#M_BUF ;已收到完整命令GOLR:LDB AL,1M_P ;处理X方向位移SHLB AL,#2EXTB ALSHRA AX,#2ADD M_X,AXCKL:CMP M_X,#0JGE CKRCLR M_XCKR:CMP M_X ,#SCRNWJLT GOUDLD M_X,#SCRNWGOUD:LDB AL,2M_P

12、;处理Y方向位数ADD M_Y,AXCKU:CMP M_Y,#0JGE CKDCLR M_YCKD:CMP M_Y,#SCRNHJLT ELRUDLD M_Y,#SCRNHELRUD:SJMP C98ISB0:STB AL,M_BUFANDB AL,#0FHCMPB AL,#03HJE C97 ;=X3H,CMPB AL,#0CH=XCHCMPB AL,#0DHJNE C98 ;XDHORB LRB_OK,#80H ;确认鼠标正常C97:ANDB AL,M_BUF,#30HANDB LRB_OK,#80HORB LRB_OK,AL ;更新左右键状态LD M_P,#M_BUF+1SJMP C99C98:LD M_P,#0000HC99:POP AXPOPFEND 80C196单片机鼠标接口程序设计实例-单片机技术80C196单片机鼠标接口程序设计实例

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1