当前位置:文档之家› 第13章 键盘和鼠标操作 PPT课件

第13章 键盘和鼠标操作 PPT课件


7
三、键盘处理函数
➢Turbo C在bios.h中提供了一个键盘操作函 数bioskey(),用来处理键盘输入。
(也可以用BIOS调用或DOS调用)
➢bioskey()函数的原型是: int bioskey(int cmd);
2021/3/31
8
三、键盘处理函数
➢其中:cmd有三种取值:
➢0:bioskey(0)返回按键的键值(即扩充码), 并将缓冲区中的键值删除。该值是2 个字节的整 数。若无键按下,则该函数一直等待,直到有键 按下。
_CX = xmin;
_DX = xmax;
geninterrupt(0x33);
_AX = 8;
_CX = ymin;
_DX = ymax;
geninterrupt(0x33);
return -1;
// 表示鼠标器和驱动程序已安装
}
2021/3/31
15
二、常用鼠标操作函数
➢3、打开和关闭鼠标光标的函数
2
若为1,表示Ctrl键被按下
3
若为1,表示Alt键被按下
4
若为1,表示Scroll Lock已打开
5
若为1,表示Num Lock已打开
6
若为1,表示Caps Lock已打开
7
若为1,表示Insert已打开
2021/3/31
10
➢例13-1:编程,显示用户在键盘上所按键的扫 描码、ASCII码和字符(若是非字符键,只显 示扫描码),同时显示Caps Lock、Shift和Alt 的按键情况。按Esc键(扫描码为1)结束。
2021/3/31
4
➢ 由于键盘扫描码只有一个字节,只能标出256种 状态,不能包括键盘上的全部按键情况,故键 盘处理程序对扫描码进行了扩充:首先在AX中 将其扩充为两个字节,然后送入键盘缓冲区。
➢ 在AX中扩充的这两个字节的内容如下表所示:
扩充的键盘扫描码-扩充码的存放格式
按键种类 字符键
功能键/组合键
AH的内容 扫描码 扫描码
AL的内容 ASCII码
0
2021/3/31
5
二、键盘缓冲区
➢ 由于INT 9中断和应用程序接收键盘输入不能 同时进行,而键盘输入的信息是即刻消失的, 为了避免信息丢失,系统在内存中定义了一个 32字节的缓冲区,专门存储键盘输入。
➢ 键盘缓冲区中,能使用的仅30字节,可存放15 个字符的扩充码。
➢ 每当移动一下鼠标,或者按一下鼠标的按 钮,就会产生一次INT 33H中断。
➢ 鼠标INT 33H 调用的功能号及功能见表13-3, 常用的调用及参数情况见表13-4
2021/3/31
13
二、常用鼠标操作函数
➢1、检测驱动是否安装并显示按钮个数
#include <dos.h>
void mouse_test()
void cursor_to_xy(unsigned x, unsigned y)
{
_AX=4;
//4号功能调用
_CX=x;
_DX=y;
geninterrupt(0x33);
}
2021/3/31
17
二、常用鼠标操作函数
➢ 5、 读鼠标位置和按钮状态函数
说明:
➢ 有些特殊键如PrintScreen等,只引起中断,不产 生扫描码。
2021/3/31
3
➢ 扫描码的最高位(第7位)标识按键的状态:
➢ 0:代表按下 ➢ 1:代表抬起
➢ 扫描码的0~6位记录的是引起中断的按键在键 盘上的位置
说明:
➢ 扫描码仅能区别键的位置以及状态(按下或抬 起),不能直接区分大小写(大小写的扫描码相 同),键盘中断处理程序在区分大小写时,会参 照其他按键(Caps Lock和Shift)的状态。
第13章 键盘和鼠标操作 PPT课件
第一节 键盘操作
➢键盘工作原理 ➢键盘缓冲区 ➢键盘处理函数
2021/3/31
2
Hale Waihona Puke 一、键盘工作原理➢ 键盘中有一个微处理器,可以监测每个键的 按下或抬起的状态
➢ 当用户按下或抬起一个键时,便产生一个 INT 9 中断,并将该键的扫描码(1字节)送 入计算机,由ROM中BIOS的中断处理程序 去处理。
14
二、常用鼠标操作函数
➢2、鼠标初始化函数
int init(int xmin, int xmax, int ymin, int ymax)
{ _AX = 0;
geninterrupt(0x33); //调用0号功能
if(_AX == 0)
return 0;
// 表示鼠标器或驱动程序未安装
_AX = 7;
void cursor_on( ) // 显示鼠标光标 { _AX=1;
geninterrupt(0x33); } void cursor_off( ) //关闭鼠标光标 { _AX=2;
geninterrupt(0x33); }
2021/3/31
16
二、常用鼠标操作函数
➢4、设定鼠标光标的位置
#include <dos.h>
{ _AX = 0;
//调用0号功能
geninterrupt(0x33);
if(_AX == -1) //若安装返回-1,否则返回0
printf("mouse installed %d buttons\n", _BX);
else
printf("mouse not installed\n");
}
2021/3/31
➢1:返回按键的键值,但不删除缓冲区中的键值
。若缓冲区为空,返回0。常用来查询是否有键按 下(与kbhit()的用法相仿)。
2021/3/31
9
三、键盘处理函数
➢ 2:返回一些控制键是否被按过的信息,按 过的状态由返回值的低8 位表示,如下:

含义
0
若为1,表示右边Shift被按下
1
若为1,表示左边Shift被按下
➢代码略
2021/3/31
11
第二节 鼠标操作
➢鼠标的INT 33H功能调用 ➢常用鼠标操作函数 ➢鼠标形状的定制 ➢鼠标操作举例
2021/3/31
12
一、鼠标的INT 33H功能调用
➢ DOS下使用鼠标,必须先安装相应的鼠标 驱动程序
➢ 安装好鼠标驱动并进行初始化后,鼠标驱 动程序便会管理鼠标的各种操作。
➢ 此键盘缓冲区是基本输入输出系统分配的,与 C编译器分配的键盘缓冲区不是同一概念。
2021/3/31
6
➢ 两个缓冲区之间的关系:
设键盘输入: ab<Enter>
高字节
低字节
a b \r a的扫
b的扫
回车
描码
描码
的扫 描码
基本输入输出系统分配的键盘缓冲区
a b \n
C编译器分配的键盘缓冲区
2021/3/31
相关主题