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

上传人:b****6 文档编号:20932938 上传时间:2023-01-26 格式:DOCX 页数:9 大小:80.46KB
下载 相关 举报
80C196单片机鼠标接口程序设计实例Word下载.docx_第1页
第1页 / 共9页
80C196单片机鼠标接口程序设计实例Word下载.docx_第2页
第2页 / 共9页
80C196单片机鼠标接口程序设计实例Word下载.docx_第3页
第3页 / 共9页
80C196单片机鼠标接口程序设计实例Word下载.docx_第4页
第4页 / 共9页
80C196单片机鼠标接口程序设计实例Word下载.docx_第5页
第5页 / 共9页
点击查看更多>>
下载资源
资源描述

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

《80C196单片机鼠标接口程序设计实例Word下载.docx》由会员分享,可在线阅读,更多相关《80C196单片机鼠标接口程序设计实例Word下载.docx(9页珍藏版)》请在冰豆网上搜索。

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

当鼠标被拖动超过一个最小距离或某一按钮被按下时,它按照规定的协议将移动距离和按钮状态通过一次或几次信息发送到机;

主机上的鼠标驱动程序将信息变换成鼠标位置和按钮状态供其它程序模块调用。

每发生一次移动或按钮状态变化,鼠标向上发送一次信息。

通常一般鼠标的分辨率为400DPI。

理论上即沿着某一方向每拖动一英寸(一般速度),会产生400次信息发送过程。

,如果拖动较快,则信息发送次数送减少,但所反映的总的移动距离仍然是400步。

各种串行接口鼠标在物理层普遍采用标准的串行通信协议,波特率为1200bps。

帧格式为7个数据位、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为向上移动。

例如:

[6CH02H3AH](P1=6CH,P2=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加限流电阻防止对鼠标造成伤害。

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个停止位中的第一个作为数据位装入接收缓冲器的最高位,由于停止位在物理层是高电平,作为数据被接收后相当于逻辑“0”;

剩下的第二个停止位给好为80C196提供了有效的停止位。

利用80C196的工作方式1完全可以保证正确接收鼠标信息。

单片机起动后,通过鼠标驱动模块对鼠标进行初始化,即通过P2.0使RTS电平翻转一次而令鼠标发送初始化报告,以确认鼠标是否安装。

之后,鼠标即可随着拖动或按钮操作向单片机发送动作信息,经接口模块释放即可反应鼠标位置和按钮状态。

鼠标接口模块主要包括按钮状态识别和位置识别两个部分。

80C196将根据接收到的鼠标信息不断刷新鼠标信息缓冲区。

由于鼠标事件间隔不确定,采用扫描方式但会浪费CPU时间,还可能因来不及处理而丢失信息。

有效的处理方法是采用中断方式接收,应用模块通过软件接口获得鼠标信息。

完整的鼠标接口程序流程图如图2所示。

在初始化阶段,首先检查鼠标是否存在,根据结果设置标志位,以备以后取鼠标信息时判断用;

根据需要设定鼠标初始化位置、按钮原始状态;

最后设置串行接口参数(帧格式等)并开放鼠标中断。

鼠标发送信息时,第三个字节为一个完整的信息报告。

但80C196每接收到一个字节,就产生一次中断,然后根据当前字节是否大于40H确定其性质。

若是信息报告的首字节,则还要进一步通过有效性检验后保存;

若不是首字节,则必须经过一系列检验后保存起来。

收到三个字节后立即进行命令分析和执行。

具体处理过程可参看源程序。

用户模块通过特定接口模块(图2(b))获得鼠标当前位置和按钮状,并可通过进位标志C=0/1判断鼠标是否安装。

下面是图2、3程序流程图如图对应的程序清单。

该程序要求80C196单片机的工作频率为12MHz;

如果采有其它工作频率,通过修改串行口的波特率设置参数以及延时程序的时间常数即可。

8098特殊功能寄存器预定义

R0EQU00H:

Word

SBUDEQU07H:

Byte

INT_MASKEQU08H:

INT_PENDEQU09H:

BAUD_RTEQU0EH:

IOP2EQU10H:

SP_CONEQU11H:

SP_STATEQU11H:

IOC1EQU16H:

SPEQU18H:

通用寄存器预定义

RSEGATICH

AX:

DSW1

DX:

ALEQUAX:

BYTE

AHEQU(AX+1):

DLEQUDX:

DHEQU(DX+1):

SCRNWEQU640;

显示屏宽度

SCRNHEQU480;

显示屏高度

变量区

RSEGAT20H

M_X:

DSW1;

光标X值

M_Y:

DSW1:

光标Y值

M_BUF:

DSB4;

接收缓冲区

M_P:

DSW1;

接收指针

BX:

DSW1

LRB_OK:

DSB1;

鼠标状态

Bit7:

存在,Bit5,左键,Bit4:

右键

CSEGAT2000H

DCWINIT

CSEGAT200CH

DCWSIOINT

DCW0

DCB0,0,0,0,0,0

DCB08DH

DCB000H

DCB027H,0FEH

CSEGAT2080H

INIT:

LDSP,#0100H;

设堆栈指针

LDM_X,#SCRNW/2;

初始化指针

LDM_Y,#SCRNH/2

ANDBLRB_OK,#7CH

LDM_P,#M_BUF

CLRBINT_PEND;

清除中断

LDBINT_MASK,#40H;

开串行中断

LDBAL,SP_STAT;

清除RI/TI

LDBSP_CON,#09H;

设串口模式

LDBBAUD_RT,#9BH;

1200,12MHz

LDBBAUD_RT,#80H

EI

ANDBIOP2,#0FEH;

P2.2=0

LDAX,#8000H;

延迟200ms

DLY0:

DECAX

JNEDLY0

LDBAL,LRB_OK

LBSAL,7,M_OK

ANDBINT_MASK,#0BFH

M_OK:

NOP

………

清单二:

取鼠标消息,

AL=鼠标及按钮状态,BX=X,DX=YGET_M:

ANDBINT_MASK,#0BFH

LDBAL,LRB_OK;

取鼠标信息

LDBX,M_X

LDDX,M_Y

ORBINT_MASK,#40H

RET

清单三:

串口中断服务程序

SIOINT:

PUSHF;

中断服务

PUSHAX

LDBAL,SBUF

LDBAH,SP_STAT

JBSAL,6,ISB0;

第一个字节

CMPM_P,#M_BUF

JNESIO_1

SJMPC99;

缓冲区空,出错

SIO_1:

CMPM_P,#M_BUF+2

JHC98;

缓冲区满,出错

STBAL,[M_P]+;

存储收到字节

CMPM_P,#M_BUF+3

JNEC99

LDM_P,#M_BUF;

已收到完整命令

GOLR:

LDBAL,1[M_P];

处理X方向位移

SHLBAL,#2

EXTBAL

SHRAAX,#2

ADDM_X,AX

CKL:

CMPM_X,#0

JGECKR

CLRM_X

CKR:

CMPM_X,#SCRNW

JLTGOUD

LDM_X,#SCRNW

GOUD:

LDBAL,2[M_P];

处理Y方向位数

ADDM_Y,AX

CKU:

CMPM_Y,#0

JGECKD

CLRM_Y

CKD:

CMPM_Y,#SCRNH

JLTELRUD

LDM_Y,#SCRNH

ELRUD:

SJMPC98

ISB0:

STBAL,M_BUF

ANDBAL,#0FH

CMPBAL,#03H

JEC97;

=X3H,

CMPBAL,#0CH

=XCH

CMPBAL,#0DH

JNEC98;

<

>

XDH

ORBLRB_OK,#80H;

确认鼠标正常

C97:

ANDBAL,M_BUF,#30H

ANDBLRB_OK,#80H

ORBLRB_OK,AL;

更新左右键状态

LDM_P,#M_BUF+1

SJMPC99

C98:

LDM_P,#0000H

C99:

POPAX

POPF

END

80C196单片机鼠标接口程序设计实例-单片机技术80C196单片机鼠标接口程序设计实例

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > PPT模板 > 其它模板

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

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