📄 一种简单串行鼠标控制的单片机实现.htm
字号:
<TD align=middle width="33%">字节5</TD>
<TD align=middle width="33%">Y7 Y6 Y5 Y4 Y3 Y2 Y1 Y0</TD>
<TD align=middle width="34%"> </TD></TR></TBODY></TABLE>
<P style="TEXT-INDENT: 0px"> L=左键状态
M=中键状态 R=右键状态 1=按下 0=释放</P>
<P style="TEXT-INDENT: 0px">
X7~X0=X轴(左右)运动数据 Y7~Y0=Y轴(上下)运动数据</P>
<P style="TEXT-INDENT: 0px"><B>2 AT89C51构成的鼠标电路</B></P>
<P style="TEXT-INDENT: 30px">AT89C2051构成的鼠标接口电路如图2所示。</P>
<P style="TEXT-INDENT: 30px">硬件接口分配如下:</P>
<P style="TEXT-INDENT: 30px">P1口完成对按键及X、Y方向的运动扫描;</P>
<P style="TEXT-INDENT: 30px">P3.1完成数据发送。</P>
<P style="TEXT-INDENT: 30px">为较好地跟踪鼠标状态,采用12MHz晶振,AT89C2051每<FONT
face=Arial>μs</FONT>执行1条指令,能满足实时跟踪的要求。<B><BR><BR><A
href="http://www.21ic.com/info/images/dpj/200310/17b.gif">图2
电路原理图</A><BR><BR>3 软件设计</B></P>
<P
style="TEXT-INDENT: 30px">设计的软件要完成按键扫描、X方向/Y方向运动扫描、数据发送等任务。在记数光电管产生脉冲的同时,将数据按照规定格式发送到主机。脉冲的个数反映了移动的距离,单位时间内脉冲数越多,鼠标移动越快。</P>
<P style="TEXT-INDENT: 30px">下面以X方向为例,详细说明方向的判断及脉冲的记数。</P>
<P
style="TEXT-INDENT: 30px">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。</P>
<P
style="TEXT-INDENT: 30px">向右移动的状态为:X1=X2=0;X1=0,X2=1;X1=X2=1;X1=1,X2=0。正好与向左移动的情况相反。<IMG
height=296 hspace=1 src="一种简单串行鼠标控制的单片机实现.files/17c.gif" width=395
align=right vspace=1 border=0></P>
<P
style="TEXT-INDENT: 30px">由此,可以根据本次测得的状态与上一次的状态比较的结果确定鼠标移动的方向。</P>
<P style="TEXT-INDENT: 30px">向上、向下的运动检测遵循同样的原则。</P>
<P
style="TEXT-INDENT: 30px">根据以上分析,要完成一次计数,单片机至少要对每一种状态检测一次,这就需要单片机有较高的跟踪速度。由实验测得,最短的时间间隔在b与d处,即X1=X2=0变化到X1=X2=1或者X1=X2=1变化到X1=X2=0的过程中。鼠标正常移动时,间隔一般为300<FONT
face=Arial>μs</FONT>~500<FONT
face=Arial>μs</FONT>。即使在鼠标高速移动时,最小间隔也大于80<FONT
face=Arial>μs</FONT>。当AT89C2051采用12MHz晶振时,程序正常扫描一遍的时间最大为50<FONT
face=Arial>μs</FONT>(包括数据处理与发送的时间),因此,能保证每种状态都能扫描到。</P>
<P
style="TEXT-INDENT: 30px">在表1中,X7~X0反映X方向移动的距离。如X值为正(X7=0),则表示鼠标向右运行;如果为负值(X7=1,即以补码表示),表示向左运行。</P>
<P style="TEXT-INDENT: 30px">同理,若Y值为正,表示鼠标向下运行;若为负,则表示向上运行。</P>
<P
style="TEXT-INDENT: 30px">在程序中,若检测到鼠标状态有变化,则延时多个循环(在每个循环中都对鼠标状态检测一遍),作为消除按键抖动的时间。信息采用RS232格式,波特率为1200baud。为满足鼠标1位起始位、7位数据,无奇偶校验位以及2位停止位的数据格式,在程序中,对数据进行了处理,将要发送的每个字节的最高位置为1。</P>
<P
style="TEXT-INDENT: 30px">主程序流程如图4所示。在图中,当检测到按钮状态发化或者检测到X、Y方向运行时,置延时循环标志。为了发送3个字节信息,在串行口中断程序中置标志位,使3个字节能连续发送完。</P>
<P
style="TEXT-INDENT: 30px">另外,当主机检测鼠标时,需要鼠标发送初始化报告,以检测鼠标是束安装。因此,在鼠标初始化过程中,首先要发送一个字节“4DH”(“M”,D7位置“1”则为“CDH”),使主机能够检测到鼠标已经安装。</P>
<P
style="TEXT-INDENT: 30px">完整的程序清单见网络补充版(http://www.dpj.com.cn)。<B><BR><IMG
height=622 hspace=35 src="一种简单串行鼠标控制的单片机实现.files/17d.gif" width=487
vspace=10 border=0><BR>4 结论</B></P>
<P
style="TEXT-INDENT: 30px">本文利用AT89C2051完成了鼠标移动数据的读取与PC机通信数据的传送。该系统在Windows
95、98和Win2000XP下均调试通过。文中给出的硬件原理图同样可应用于测控系统中编程器信号的读取,应用面较广。 </P>
<P></P></DIV></TD></TR>
<TR>
<TD align=middle height=15>
<TABLE cellSpacing=0 cellPadding=0 align=center border=0>
<TBODY>
<TR>
<TD>
<DIV></DIV></TD></TR></TBODY></TABLE></TD></TR>
<TR>
<TD align=right height=2>
<TABLE cellSpacing=0 cellPadding=0 width="80%" border=0>
<TBODY>
<TR>
<TD width=75>【<A href="javascript:doPrint();">打印本稿</A>】</TD>
<TD width=8></TD>
<TD width=75>
<P>【<A
href="http://www.21ic.com/new_info/news/review.asp?title=一种简单串行鼠标控制的单片机实现target="
_blank?>发表评论</A>】</P></TD>
<TD width=10></TD>
<TD width=79>【<A
href="http://www.21ic.com/new_info/news/sendmail.asp?num=一种简单串行鼠标控制的单片机实现">推荐</A>】</TD></TR></TBODY></TABLE></TD></TR>
<TR>
<TD align=right height=2></TD></TR>
<TR>
<TD align=right height=2><A href="javascript:window.close();"><IMG
height=20 src="一种简单串行鼠标控制的单片机实现.files/close_c.gif" width=77 border=0
name=Image161></A><FONT
color=#ffffff>----</FONT></TD></TR></TBODY></TABLE><BR><BR>
<TABLE cellSpacing=0 cellPadding=0 width=520 align=center border=0>
<TBODY>
<TR>
<TD vAlign=bottom align=middle width=114 bgColor=#999a76
height=1><IMG height=1 src="一种简单串行鼠标控制的单片机实现.files/blank.gif"
width=1></TD>
<TD width=466 height=1></TD></TR>
<TR>
<TD align=middle width=114 bgColor=#ece8db height=19>相关新闻</TD>
<TD width=466 height=19></TD></TR>
<TR bgColor=#999a76>
<TD colSpan=2 height=1><IMG height=1
src="一种简单串行鼠标控制的单片机实现.files/blank.gif" width=1></TD></TR>
<TR>
<TD colSpan=2 height=1></TD></TR></TBODY></TABLE>
<TABLE borderColor=#000000 cellSpacing=0 cellPadding=0 width=520
align=center border=0>
<TBODY>
<TR>
<TD vAlign=top>
<TABLE class=RelatedTable width="100%" border=0>
<TBODY>
<TR class=RelatedTr>
<TD class=RelatedTd>
<SCRIPT language=javascript
src="一种简单串行鼠标控制的单片机实现.files/about.htm"></SCRIPT>
</TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE><BR></TD>
<TD vAlign=top align=middle width=150 bgColor=#ece8db height=2>
<TABLE cellSpacing=0 cellPadding=1 width="100%" border=0>
<TBODY>
<TR>
<TD bgColor=#000000>
<TABLE cellSpacing=0 cellPadding=2 width=150 bgColor=#ece8db
border=0>
<TBODY>
<TR>
<TD>
<META content="Microsoft FrontPage 5.0" name=GENERATOR>
<META content=FrontPage.Editor.Document name=ProgId><BR><A
href="http://www.hhcn.com/chinese/cnindex.html"
target=blank>华恒<BR>(ARM,PowerPC,冷火,龙珠)</A><BR><A
href="http://www.embedon.com/" target=blank>远峰</A> <BR><A
href="http://www.21ic.com/custom/jhb/index.htm"
target=blank>复旦金海博</A><BR><A
href="http://www.emdoor.com/index.asp"
target=blank>亿道</A><BR><BR>单片机 <BR><BR><A
href="http://www.hk.renesas.com/"
target=blank>Renesas</A><BR><A
href="http://www.zlgmcu.com/tools/kaifaban.asp"
target=blank>周立功 Philips</A> <BR><A
href="http://www.strong-ic.com/" target=blank>胜创特</A> <BR><A
href="http://www.holtek.com.tw/" target=blank>盛群 Holtek</A>
<BR><A href="http://www.xhl.com.cn/"
target=blank>Cygnal单片机</A><BR><A href="http://www.lierda.com/"
target=blank>利尔达MSP430</A> <BR><BR>接口电路:<BR><BR><A
href="http://www.whjmw.com/" target=blank>金迈威</A> <BR><A
href="http://www.21ic.com/custom/maiwei/mw.htm"
target=blank>迈威</A> <BR><A href="http://www.rs232.net.cn/"
target=blank>瑞赛特</A><BR><BR><BR>存储器<BR><A
href="http://www.huazhoucn.com/"
target=blank>铁电存储器免费样品</A><BR><BR><BR>模拟器件<BR><A
href="http://www.unique-ap.com.cn/"
target=blank>Linear</A><BR><BR><BR>编程器<BR><A
href="http://www.xeltek.com.cn/"
target=blank>西尔特编程器</A><BR></TD></TR>
<TR>
<TD
height=5></TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE>
<TABLE cellSpacing=0 cellPadding=0 width=766 align=center border=0>
<TBODY>
<TR>
<TD vAlign=top colSpan=6></TD></TR>
<TR>
<TD vAlign=top colSpan=6 height=10></TD></TR>
<TR>
<TD vAlign=top bgColor=#999999 colSpan=6 height=2></TD></TR>
<TR>
<TD class=stxt vAlign=center align=middle colSpan=6
height=6></TD></TR></TBODY></TABLE>
<TABLE cellSpacing=0 cellPadding=0 width=766 align=center border=0>
<TBODY>
<TR>
<TD class=s width=973 height=12></TD></TR>
<TR>
<TD class=s width=973 height=20>
<DIV align=center><FONT face="Arial, Helvetica, sans-serif"><!--start copyright-->
<DIV align=center><FONT color=black>
<TABLE cellSpacing=0 cellPadding=0 width=600 align=center border=0>
<TBODY>
<TR>
<TD align=middle width="100%" colSpan=2><BR>Better View:800*600 Best
View:1024x768 为了本系统能够更好的为您服务,请使用IE4.0或以上版本浏览器
<BR><BR>版权所有(C)21IC中国电子网 电话:010-82357510, 82357511 传真: 010-82357512
</TD></TR></TBODY></TABLE><!--start copyright--></FONT></DIV></FONT></DIV></TD></TR></TBODY></TABLE><BR></BODY></HTML>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -