第13章-键盘和鼠标操作课件.ppt

上传人(卖家):晟晟文业 文档编号:4622041 上传时间:2022-12-26 格式:PPT 页数:22 大小:553.51KB
下载 相关 举报
第13章-键盘和鼠标操作课件.ppt_第1页
第1页 / 共22页
第13章-键盘和鼠标操作课件.ppt_第2页
第2页 / 共22页
第13章-键盘和鼠标操作课件.ppt_第3页
第3页 / 共22页
第13章-键盘和鼠标操作课件.ppt_第4页
第4页 / 共22页
第13章-键盘和鼠标操作课件.ppt_第5页
第5页 / 共22页
点击查看更多>>
资源描述

1、2022-12-261键盘操作键盘操作鼠标操作鼠标操作2022-12-262第一节第一节 键盘操作键盘操作键盘工作原理键盘工作原理键盘缓冲区键盘缓冲区键盘处理函数键盘处理函数2022-12-263一、键盘工作原理一、键盘工作原理键盘中有一个微处理器,可以监测每个键的键盘中有一个微处理器,可以监测每个键的按下或抬起的状态按下或抬起的状态当用户当用户按下按下或或抬起抬起一个键时,便产生一个一个键时,便产生一个INT 9 中断,并将该键的扫描码(中断,并将该键的扫描码(1字节)字节)送入计算机,由送入计算机,由ROM中中BIOS的中断处理程的中断处理程序去处理。序去处理。说明:说明:有些特殊键如有些

2、特殊键如PrintScreen等,只引起中断,不等,只引起中断,不产生扫描码。产生扫描码。扫描码的扫描码的最高位最高位(第第7位位)标识按键的状态:标识按键的状态:0:代表按下:代表按下1:代表抬起:代表抬起扫描码的扫描码的06位位记录的是引起中断的按键在记录的是引起中断的按键在键盘上的位置键盘上的位置说明:说明:扫描码仅能区别键的位置以及状态(按下或抬扫描码仅能区别键的位置以及状态(按下或抬起),不能直接区分大小写(大小写的扫描码相起),不能直接区分大小写(大小写的扫描码相同),键盘中断处理程序在区分大小写时,会参同),键盘中断处理程序在区分大小写时,会参照其他按键(照其他按键(Caps L

3、ock和和Shift)的状态。)的状态。2022-12-2642022-12-265按键种类AH的内容AL的内容字符键扫描码ASCII码功能键/组合键扫描码0扩充的键盘扫描码-扩充码的存放格式由于键盘扫描码只有一个字节,只能标出由于键盘扫描码只有一个字节,只能标出256种状态,不能包括键盘上的全部按键情况,故种状态,不能包括键盘上的全部按键情况,故键盘处理程序对扫描码进行了扩充键盘处理程序对扫描码进行了扩充:首先在首先在AX中将其扩充为两个字节,然后送入键盘缓冲区。中将其扩充为两个字节,然后送入键盘缓冲区。在在AX中扩充的这两个字节的内容如下表所示:中扩充的这两个字节的内容如下表所示:2022

4、-12-266二、键盘缓冲区二、键盘缓冲区由于由于INT 9中断和应用程序接收键盘输入不能中断和应用程序接收键盘输入不能同时进行,而键盘输入的信息是即刻消失的同时进行,而键盘输入的信息是即刻消失的,为了避免信息丢失,系统在内存中定义了一个为了避免信息丢失,系统在内存中定义了一个32字节的缓冲区,专门存储键盘输入。字节的缓冲区,专门存储键盘输入。键盘缓冲区中,能使用的仅键盘缓冲区中,能使用的仅30字节,可存放字节,可存放15个字符的扩充码。个字符的扩充码。此键盘缓冲区是基本输入输出系统分配的,与此键盘缓冲区是基本输入输出系统分配的,与C编译器分配的键盘缓冲区不是同一概念。编译器分配的键盘缓冲区不

5、是同一概念。两个缓冲区之间的关系:两个缓冲区之间的关系:2022-12-267设键盘输入设键盘输入:abaa的扫的扫描码描码bb的扫的扫描码描码r回车回车的扫的扫描码描码abn基本输入输出系统分配的键盘缓冲区C编译器分配的键盘缓冲区低字节高字节2022-12-268三、键盘处理函数三、键盘处理函数Turbo C在在bios.h中中提供提供了一个了一个键盘操作键盘操作函数函数bioskey(),用来,用来处理处理键盘输入键盘输入。(也可以用(也可以用BIOS调用或调用或DOS调用)调用)bioskey()函数函数的的原型是:原型是:int bioskey(int cmd);2022-12-269

6、三、键盘处理函数三、键盘处理函数其中:其中:cmd有三种取值:有三种取值:0:bioskey(0)返回按返回按键键的键值(即扩充码),的键值(即扩充码),并将缓冲区中的键值删除。该值是并将缓冲区中的键值删除。该值是2 个字节的整个字节的整数。若数。若无无键按下,则该函数一直等待,直到有键键按下,则该函数一直等待,直到有键按下。按下。1:返回按返回按键键的键值,但不删除缓冲区中的键的键值,但不删除缓冲区中的键值值。若缓冲区为空,返回若缓冲区为空,返回0。常用来查询是否有。常用来查询是否有键按下(与键按下(与kbhit()的的用法相仿)。用法相仿)。2022-12-2610三、键盘处理函数三、键盘

7、处理函数2:返回一些控制键是否被按过的信息,按:返回一些控制键是否被按过的信息,按过的状态由返回值的低过的状态由返回值的低8 位表示,位表示,如下:如下:位含义0若为1,表示右边Shift被按下1若为1,表示左边Shift被按下2若为1,表示Ctrl键被按下3若为1,表示Alt键被按下4若为1,表示Scroll Lock已打开5若为1,表示Num Lock已打开6若为1,表示Caps Lock已打开7若为1,表示Insert已打开2022-12-2611例例13-1:编程,显示用户在键盘上所按键的扫编程,显示用户在键盘上所按键的扫描码、描码、ASCII码和字符(若是非字符键,只显码和字符(若是

8、非字符键,只显示扫描码),同时显示示扫描码),同时显示Caps Lock、Shift和和Alt的按键情况。按的按键情况。按Esc键(扫描码为键(扫描码为1)结束。)结束。代码略代码略2022-12-2612第二节第二节 鼠标操作鼠标操作鼠标的鼠标的INT 33H功能调用功能调用常用鼠标操作函数常用鼠标操作函数鼠标形状的定制鼠标形状的定制鼠标操作举例鼠标操作举例2022-12-2613一一、鼠标的、鼠标的INT 33H功能调用功能调用DOS下使用鼠标,必须先安装相应的鼠标下使用鼠标,必须先安装相应的鼠标驱动程序驱动程序安装好鼠标驱动并进行初始化后,鼠标驱安装好鼠标驱动并进行初始化后,鼠标驱动程序

9、便会管理鼠标的各种操作。动程序便会管理鼠标的各种操作。每当移动一下鼠标,或者按一下鼠标的按每当移动一下鼠标,或者按一下鼠标的按钮,就会产生一次钮,就会产生一次INT 33H中断。中断。鼠标鼠标INT 33H 调用的功能号及功能见调用的功能号及功能见表表13-3,常用的调用及参数情况见常用的调用及参数情况见表表13-42022-12-2614二、常用鼠标操作函数二、常用鼠标操作函数1、检测驱动是否安装并显示按钮个数、检测驱动是否安装并显示按钮个数#include void mouse_test()_AX=0;/调用调用0号功能号功能 geninterrupt(0 x33);if(_AX=-1)/

10、若若安装返回安装返回-1,否则返回,否则返回0 printf(mouse installed%d buttonsn,_BX);else printf(mouse not installedn);2022-12-2615二、常用鼠标操作函数二、常用鼠标操作函数2、鼠标初始化函数鼠标初始化函数int init(int xmin,int xmax,int ymin,int ymax)_AX=0;geninterrupt(0 x33);/调用调用0号功能号功能 if(_AX=0)return 0;/表示鼠标器表示鼠标器或或驱动程序驱动程序未未安装安装 _AX=7;_CX=xmin;_DX=xmax;g

11、eninterrupt(0 x33);_AX=8;_CX=ymin;_DX=ymax;geninterrupt(0 x33);return-1;/表示鼠标器和驱动程序已安装表示鼠标器和驱动程序已安装2022-12-2616二、常用鼠标操作函数二、常用鼠标操作函数3、打开和关闭鼠标光标的函数打开和关闭鼠标光标的函数void cursor_on()/显示鼠标光标显示鼠标光标 _AX=1;geninterrupt(0 x33);void cursor_off()/关闭鼠标光标关闭鼠标光标 _AX=2;geninterrupt(0 x33);2022-12-2617二、常用鼠标操作函数二、常用鼠标操作

12、函数4、设定鼠标光标的位置设定鼠标光标的位置#include void cursor_to_xy(unsigned x,unsigned y)_AX=4;/4号功能调用号功能调用 _CX=x;_DX=y;geninterrupt(0 x33);2022-12-2618二、常用鼠标操作函数二、常用鼠标操作函数5、读鼠标位置和按钮状态函数读鼠标位置和按钮状态函数int read_mouse(int*mx,int*my,int*mbutton)/mx和和my指向存储新坐标的变量指向存储新坐标的变量 int x0=*mx,y0=*my,button0=*mbutton;int xnew,ynew;do

13、 _AX=3;geninterrupt(0 x33);xnew=_CX;ynew=_DX;*mbutton=_BX;while(xnew=x0&ynew=y0&*mbutton=button0);*mx=xnew;*my=ynew;switch(*mbutton)case 0:return 0;/没有键被按下没有键被按下 case 1:return 1;/左键按下左键按下 case 2:return 2;/右键按下右键按下 case 3:return 3;/左右键同时按下左右键同时按下 default:return 4;/其他情况其他情况 2022-12-2619二、常用鼠标操作函数二、常用鼠

14、标操作函数 上面上面的的do-while循环有问题循环有问题,因为指针操作,因为指针操作(*mbutton=)会会使用使用_BX寄存器,寄存器,使得使得_BX中存储的中断中存储的中断出口参数被出口参数被改变。改变。应改为:应改为:do int bx;_AX=3;geninterrupt(0 x33);bx=_BX;xnew=_CX;ynew=_DX;*mbutton=bx;while(xnew=x0&ynew=y0&*mbutton=button0);函数的调用方法:函数的调用方法:int x=320,y=240,button=0;read_mouse(&x,&y,&button);2022-

15、12-2620三、鼠标操作举例三、鼠标操作举例利用鼠标中断功能作图。要求:利用鼠标中断功能作图。要求:不按鼠标按钮时,鼠标形状为一不按鼠标按钮时,鼠标形状为一“十十”字,并随鼠字,并随鼠标移动标移动仅按住左键,鼠标形状为十字和圆,移动时留下圆仅按住左键,鼠标形状为十字和圆,移动时留下圆形轨迹形轨迹仅按住右键,鼠标形状为十字和矩形,移动时留下仅按住右键,鼠标形状为十字和矩形,移动时留下矩形轨迹矩形轨迹其他情况留下点的轨迹其他情况留下点的轨迹2022-12-2621编程思路:编程思路:检测鼠标及驱动安装否,若否,结束程序检测鼠标及驱动安装否,若否,结束程序初始化鼠标位置及移动范围初始化鼠标位置及移

16、动范围在屏幕中心显示鼠标形状在屏幕中心显示鼠标形状检测鼠标的移动和按钮的状态检测鼠标的移动和按钮的状态 若仅位置移动,将原来的鼠标形状消除,在新位若仅位置移动,将原来的鼠标形状消除,在新位置重新显示鼠标(十字形状)置重新显示鼠标(十字形状)若有按钮按下若有按钮按下 若在若在quit处按下,则退出程序处按下,则退出程序 不在不在quit处:处:左键:消除原位置鼠标,新位置显示鼠标,并画一圆左键:消除原位置鼠标,新位置显示鼠标,并画一圆 右键:消除原位置鼠标,新位置显示鼠标,并画一矩形右键:消除原位置鼠标,新位置显示鼠标,并画一矩形 其他:消除原位置鼠标,新位置显示鼠标,并画一点其他:消除原位置鼠

17、标,新位置显示鼠标,并画一点2022-12-2622实实 训训1、写一个程序,监测键盘上写一个程序,监测键盘上A、空格和、空格和Enter键被按下键被按下的次数,按的次数,按ESC键停止监测。键停止监测。2、屏幕上画一个半径为、屏幕上画一个半径为100的圆,当鼠标在圆内时,按的圆,当鼠标在圆内时,按下左键显示一个点,并可用红色写字画图(用作铅下左键显示一个点,并可用红色写字画图(用作铅笔),按下右键则显示一个小方块,可擦除圆内图笔),按下右键则显示一个小方块,可擦除圆内图像(用作橡皮)。若鼠标在圆外,只显示一个箭头,像(用作橡皮)。若鼠标在圆外,只显示一个箭头,无任何作用。无任何作用。3、屏幕上画一个球,用键盘控制其上下左右移动,按、屏幕上画一个球,用键盘控制其上下左右移动,按ESC时退出。时退出。4、屏幕上画两个按钮,当鼠标移动到某按钮上方时,、屏幕上画两个按钮,当鼠标移动到某按钮上方时,按钮上的字为红色,否则为白色。按钮上的字为红色,否则为白色。

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

当前位置:首页 > 办公、行业 > 各类PPT课件(模板)
版权提示 | 免责声明

1,本文(第13章-键盘和鼠标操作课件.ppt)为本站会员(晟晟文业)主动上传,163文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。
2,用户下载本文档,所消耗的文币(积分)将全额增加到上传者的账号。
3, 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(发送邮件至3464097650@qq.com或直接QQ联系客服),我们立即给予删除!


侵权处理QQ:3464097650--上传资料QQ:3464097650

【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。


163文库-Www.163Wenku.Com |网站地图|