您好,欢迎访问三七文档
第七章鼠标接口•7.1鼠标的工作原理•1.鼠标分机械式鼠标和光电式鼠标两类。如果从按键的数量来分,又可分为二键鼠标和三键鼠标。•1.1机械式鼠标带滚轮球,通过RS-232C串行口连接在微机上,通过转动滚球,产生X、Y方向移动的信号,由信号线传送到计算机的串口,操作系统收到鼠标的信号后产生图标并显示在屏幕上。当用户按鼠标左键、右键和中间键时,操作系统根据鼠标光标的位置决定执行相应的命令。•在鼠标的驱动程序中,左键为0,右键为1,中键为2。1.2光电鼠标是通过光电二极管照射在一块由红绿网格线组成的板上,当鼠标移动时,通过感应红绿线数来计算鼠标移动的位置,然后反馈给操作系统。鼠标驱动程序大多数是遵照Microsoft提出的调用系统标准,1.3鼠标驱动程序:1.基于文本模式和基于图形模式的两种鼠标驱动程序。在文本模式下,光标在不连续的行和列位置间跳动,光标的形状为整个字符大小的方块,光标热点只能定位在80x24的一个点上。精度差。在图形模式下,光标在屏幕上可连续地通过,光标形状可由使用者自己设计为任何形状。光标的热点位置是一个象素点。精度高。2.鼠标驱动程序•下拉菜单的选择:通过对屏幕上的窗口、标签和连接等的组合操作来完成所希望的工作。•最复杂的程序是用鼠标在屏幕上作图和编辑图象。•3.鼠标驱动程序的安装:需要Windows支持实模式和虚模式的设备驱动程序,具体为Mouse.bin、Mouse.com、或Mouse.drv等。•软件安装之后,IRQ4(COM1口)或IRQ3(COM2口)提供硬件中断服务程序。INT33h是鼠标的应用程序界面,提供一组子功能,向应用程序报告按键情况并设置内部工作状态。4.鼠标的硬件支持•常由下列事件导致它向CPU发硬件中断请求:•(1)鼠标移动的单位:米基(Mickey)•1Mickey=1/200英寸•(2)鼠标移动的方向:左移、右移、上移、下移、左键按下和放开、右键按下和放开等。•(3)CPU响应的断口地址:串行口RBR寄存器其地址为3F8H或2F8H,在此取出一个字节的数据,该数据的编码置反映事件中的中断,不同的中断事件导致硬件中断服务程序作出不同的处理。•(4)鼠标驱动程序是通过中断号INT33h来工作的。各鼠标的功能是通过在AX寄存器设置功能号来调用。先启动Mouse.com或Mouse.bin;再调用INT33h。7.2鼠标操作方式•本书用汇编语言对鼠标的各项操作进行描述的,也可以用C、C++等其他语言来描述。•1.初始化鼠标驱动程序:例如:中断号INT33h功能16h子功能17h中断号:用于请求服务功能号:用于确定用户期望获取哪种服务子功能号:进一步指定所希望的服务调用寄存器:设置被调用的服务功能所要求的参数返回寄存器:返回服务功能执行结果调用的进程:设置参数中断号INT33h功能15hBX寄存器ES:DX功能16h功能17hES:DX2.显示或隐藏鼠标光标•中断33h的功能1和2分别置鼠标光标为“打开”和“关闭”。而鼠标驱动程序一直跟踪鼠标的移动,当鼠标移动时就更新它在屏幕的位置。•鼠标的程序从开始通常在打开光标,一直到程序结束。•鼠标驱动程序采用光标标记,用做显示和隐藏光标的分层方法。初次打开光标标记设为-1;功能1将标记加至0,使光标出现。功能2将标记减1,当标记为负值时就隐藏光标。3.设置文本鼠标光标的形状•在以视频文本模式工作时,鼠标驱动程序生成两类光标:•(1)硬件光标,由视频硬件所产生的常规屏幕光标,由水平扫描线组成。•(2)软件或属性光标,这种情况下,鼠标驱动程序在光标出现的屏幕位置写数据。驱动程序在改变此位置显示的字符或改变字符属性,使它闪烁、背景色等。•(3)中断33h的功能Ah设置文本光标的类型:AX存放功能号;BX存放应光标或软件光标选择;CX存放起始扫描线;DX存放终止扫描线。4.设置图形鼠标光标的形状•中断33h的功能9h设置图形模式下的鼠标光标的形状,并定义光标里的一个点为热点。光标由16x16位的视频掩码和16x16位的光标掩码组成。•5.取得或设置鼠标光标的位置•中断33h的功能4h用于设置鼠标光标位置,功能3h则用于报告光标的位置。AX存放功能号,CX被赋予X坐标,DX被赋予Y坐标。P200例7-4•6.将鼠标光标限定在屏幕的一部分•将鼠标光标可以限制在屏幕的一个矩形区域内,由中断33h的功能7h设置鼠标光标移动的水平范围,8h设置垂直范围。P201例7-57.定义不显示鼠标光标的屏幕区域•中断33h的功能10h定义屏幕的一个区域,当鼠标进入该区域时会自动关掉。进入时,CX存放被保护域的左列号,SI存放右列号;DX存放首行号,DI存放末行号。•例7-6设置一个范围是从第10~50列和5~30行之间的矩形域。•MOVAX,10h;功能号•MOVCX,10;左列•MOVSI,50;右列•MOVDX,5;首行•MOVDI,30;末行•INT33h;调用中断设置域8.跟踪鼠标的移动•中断33h功能Bh报告自从上次调用该功能后,鼠标移动的实际距离(测量单位为米基)。该功能在CX中返回相对的水平位移;DX中返回相对的垂直位移。例7-7查询鼠标光标的相对位移。•MOVAX,0Bh•INT33h•MOVHORZ_MOTION,CX•MOVVERT_MOTION,DX9.设置鼠标与光标移动的比率•程序可以改变鼠标移动相对于鼠标光标移动的比率。大多数鼠标的分辨率为每英寸200米基。在一定方向上移动一定数目的米基,转换为鼠标光标移动一个像素。默认情况8米基使水平移动一个像素;16米基使光标垂直移动一个像素。•中断21h的功能Fh可以改变米基–像素的比例。•中断33h的功能13h是改变产生双倍速率的这个阀值,默认值为64米基/秒。P202例7-810.监视鼠标按钮•中断33h的功能5h和6h报告鼠标按钮的信息。这两项功能都在AX返回一个按钮状态字节,报告按钮2个或3个当前状态。此状态字节由中断21h的功能3h返回。它报告鼠标光标的位置。•中断33h的功能5h和6h跟踪按下按钮和释放按钮。D0D1D2D3状态字节左按钮按下为1否则为0右按钮按下1否则0中按钮按下为1否则为011.截取单击、双击和拖动事件•许多使用鼠标的程序都要检测鼠标的单击和双击,并跟踪按钮按下的拖动事件。•12.建立鼠标中断例程•在INT33h的功能Ch建立列程。入口时,ES:DX指向列程CX中存放一个位模式,设定几种应当调用的例程事件。其模式为:位0123置1的含义鼠标移动按下左按钮释放左按钮按下右按钮位456置1的含义释放右按钮按下中按钮释放中按钮7.3鼠标应用程序设计•本书给出的是用汇编语言编写的鼠标和键盘应用程序。在程序执行后屏幕上显示包括鼠标和键盘的状态。当用户移动鼠标时,屏幕显示鼠标的位置;按下鼠标左键时,显示“LeftButtonpress”;在放开左键时显示“LeftButtonPress”消失。在按下鼠标右键时,显示“RightButtonPressandProgramreturnedtoDos.”•P206程序结构:•Prog7-1.Asm中引用的外部定义子程序为tab6.Inc。它包含所有定义、过程和宏。•外部过程有:clrScrn.asm(清屏过程)、onCur.asm(开光标过程)、offCur.asm(关光标过程)、mvCur.asm(移动光标)、bdwrite.asm(显示字符过程)、kdState.asm(取键盘状态过程)、msOff.asm(鼠标关)、msOn.asm(鼠标开)msInit.asm(鼠标初始化)msState.asm(鼠标状态)等。P206程序结构:•Prog7-1.Asm中引用的外部定义子程序为tab6.Inc。它包含所有定义、过程和宏。•外部过程包括:clrScrn.asm(清屏过程)、onCur.asm(开光标过程)、offCur.asm(关光标过程)、mvCur.asm(移动光标)、bdwrite.asm(显示字符过程)、kdState.asm(取键盘状态过程)、msOff.asm(鼠标关)、msOn.asm(鼠标开)msInit.asm(鼠标初始化)msState.asm(鼠标状态)等。•Tabl6.inc包含有proto6s.inc、def6.inc和mac6.inc三个子程序。第七章结束
本文标题:第七章 鼠标接口
链接地址:https://www.777doc.com/doc-4060155 .html