欢迎来到天天文库
浏览记录
ID:20514111
大小:553.50 KB
页数:22页
时间:2018-10-13
《第13章 键盘和鼠标操作》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、2021/7/61第十三章键盘和鼠标操作键盘操作鼠标操作2021/7/62第一节键盘操作键盘工作原理键盘缓冲区键盘处理函数2021/7/63一、键盘工作原理键盘中有一个微处理器,可以监测每个键的按下或抬起的状态当用户按下或抬起一个键时,便产生一个INT9中断,并将该键的扫描码(1字节)送入计算机,由ROM中BIOS的中断处理程序去处理。说明:有些特殊键如PrintScreen等,只引起中断,不产生扫描码。扫描码的最高位(第7位)标识按键的状态:0:代表按下1:代表抬起扫描码的0~6位记录的是引起中断的按键在键盘上的位置说明:扫描码仅能区别键的位置以及状态(按下或抬起),不能直接区分
2、大小写(大小写的扫描码相同),键盘中断处理程序在区分大小写时,会参照其他按键(CapsLock和Shift)的状态。2021/7/642021/7/65按键种类AH的内容AL的内容字符键扫描码ASCII码功能键/组合键扫描码0扩充的键盘扫描码-扩充码的存放格式由于键盘扫描码只有一个字节,只能标出256种状态,不能包括键盘上的全部按键情况,故键盘处理程序对扫描码进行了扩充:首先在AX中将其扩充为两个字节,然后送入键盘缓冲区。在AX中扩充的这两个字节的内容如下表所示:2021/7/66二、键盘缓冲区由于INT9中断和应用程序接收键盘输入不能同时进行,而键盘输入的信息是即刻消失的,为了避
3、免信息丢失,系统在内存中定义了一个32字节的缓冲区,专门存储键盘输入。键盘缓冲区中,能使用的仅30字节,可存放15个字符的扩充码。此键盘缓冲区是基本输入输出系统分配的,与C编译器分配的键盘缓冲区不是同一概念。两个缓冲区之间的关系:2021/7/67设键盘输入:abaa的扫描码bb的扫描码r回车的扫描码ab基本输入输出系统分配的键盘缓冲区C编译器分配的键盘缓冲区低字节高字节2021/7/68三、键盘处理函数TurboC在bios.h中提供了一个键盘操作函数bioskey(),用来处理键盘输入。(也可以用BIOS调用或DOS调用)bioskey()函数的原型是:in
4、tbioskey(intcmd);2021/7/69三、键盘处理函数其中:cmd有三种取值:0:bioskey(0)返回按键的键值(即扩充码),并将缓冲区中的键值删除。该值是2个字节的整数。若无键按下,则该函数一直等待,直到有键按下。1:返回按键的键值,但不删除缓冲区中的键值。若缓冲区为空,返回0。常用来查询是否有键按下(与kbhit()的用法相仿)。2021/7/610三、键盘处理函数2:返回一些控制键是否被按过的信息,按过的状态由返回值的低8位表示,如下:位含义0若为1,表示右边Shift被按下1若为1,表示左边Shift被按下2若为1,表示Ctrl键被按下3若为1,表示Alt
5、键被按下4若为1,表示ScrollLock已打开5若为1,表示NumLock已打开6若为1,表示CapsLock已打开7若为1,表示Insert已打开2021/7/611例13-1:编程,显示用户在键盘上所按键的扫描码、ASCII码和字符(若是非字符键,只显示扫描码),同时显示CapsLock、Shift和Alt的按键情况。按Esc键(扫描码为1)结束。代码略2021/7/612第二节鼠标操作鼠标的INT33H功能调用常用鼠标操作函数鼠标形状的定制鼠标操作举例2021/7/613一、鼠标的INT33H功能调用DOS下使用鼠标,必须先安装相应的鼠标驱动程序安装好鼠标驱动并进行初始化后
6、,鼠标驱动程序便会管理鼠标的各种操作。每当移动一下鼠标,或者按一下鼠标的按钮,就会产生一次INT33H中断。鼠标INT33H调用的功能号及功能见表13-3,常用的调用及参数情况见表13-42021/7/614二、常用鼠标操作函数1、检测驱动是否安装并显示按钮个数#includevoidmouse_test(){_AX=0;//调用0号功能geninterrupt(0x33);if(_AX==-1)//若安装返回-1,否则返回0printf("mouseinstalled%dbuttons",_BX);elseprintf("mousenotinstalled"
7、);}2021/7/615二、常用鼠标操作函数2、鼠标初始化函数intinit(intxmin,intxmax,intymin,intymax){_AX=0;geninterrupt(0x33);//调用0号功能if(_AX==0)return0;//表示鼠标器或驱动程序未安装_AX=7;_CX=xmin;_DX=xmax;geninterrupt(0x33);_AX=8;_CX=ymin;_DX=ymax;geninterrupt(0x33);return-1;//
此文档下载收益归作者所有