Ld=(N-1)×管子的宽度
由于手指遮挡时有一定的区域,所以遮挡时有两种可能:其一是在被确定的管子的前面;其二是在被确定的管子处。图3所示为手指遮挡示意图。
为了精确计算,需要计算这两种情况下位置的偏移量△L1和△L2。则有:
其中,L为第N个管子被遮挡时的位置。△L1为手指在被确定的管子的前面时的偏移量。△L2为手指在被确定的管子处时的偏移量,XN为扫描时采样第N个管子接收到的数据,XNmax为“1”态时采样第N个管子接收到的数据.XNmin为“0”态时采样第N个管子接收到的数据。
2鼠标驱动
ARM7作为硬件上的核心控制芯片,只能进行采集以得到触摸位置信息,而无法实现相应的鼠标动作。所以,必须通过主机端的驱动程序来实现。本文中的驱动程序可通过VC++编程来实现串口通信和鼠标动作,从而完成软件结合硬件对鼠标的驱动。
2.1 串口通信
为了使主机能够接收ARM7通过串口传送的触摸位置,可利用Microsoft公司提供的ActiveX控件Microsoft Communications Control,并通过VC++编程来实现串口通信。通过在该控件中的设置可指定通信串口号,同时可设置波特率、校验位、停止位、数据位等通信参数,以及接收OnComm事件门限值。其具体代码如下:
由于传统的鼠标是一种相对定位系统,它只和前一次鼠标的位置坐标有关。而触摸屏则是一种绝对坐标系,与相对定位系统有着本质的区别。因此,本文通过主机从串口接收到的触摸点坐标数据并进行转换来得到屏幕坐标,即触摸屏的坐标范围为(0,0)到(2048,768)。而ARM7只能通过串口发送字节,且只能发送小于256的数据,所以很难实现直接传输。因此,在数据发送时,应将采集得到的位置数据的每个位上的数分别进行传送。与此同时,主机端从串口接收缓冲区并取出数据,然后在驱动程序中将这些数据重新组合起来以得到触摸位置信息。另外,为了实现鼠标的不同动作,也应分别发送不同的控制字。每次串口通信的数据格式如下:
其中,X为触摸位置的横坐标,X1为X百位上的数,X2为X十位上的数,X3为X个位上的数;Y为触摸位置的纵坐标,Y1为Y百位上的数,Y2为Y十位上的数,Y3为Y个位上的数。