C语言bioskey返回值大全

### C语言bioskey返回值大全解析 #### 一、引言 在早期的计算机编程环境中,特别是使用C语言进行低级编程时,了解并掌握如何有效地处理键盘输入是非常重要的。`bioskey`函数是一个非常实用的工具,它可以用来读取键盘上的按键事件,并根据按键的不同情况返回不同的值。本文将详细介绍`bioskey`函数的使用方法及其返回值的意义,并通过具体的示例代码帮助读者更好地理解。 #### 二、bioskey函数简介 `bioskey`函数是一个在C语言中常用于获取键盘输入的函数,尤其适用于那些需要更高级键盘控制的应用场景。例如,在游戏开发或者特定的系统监控程序中,程序员可能需要精确地知道用户按下的每一个键。`bioskey`函数可以满足这种需求,它提供了对键盘事件的直接访问。 #### 三、bioskey函数的基本用法 `bioskey`函数的原型为: ```c int bioskey(int cmd); ``` 其中,`cmd`参数决定了`bioskey()`函数的操作方式。主要有以下几种用法: 1. **等待按键**(`cmd = 0`):此模式下,函数会一直等待直到有一个键被按下,然后返回该键的键值。如果返回值的低8位非零,则表示按下的是一般字符键,其值即为ASCII码;如果低8位为0,则高8位存储的是扩展ASCII码,代表特殊功能键。 2. **查询是否有按键**(`cmd = 1`):此模式下,函数会检查是否有键被按下,如果有键按下则返回非零值,否则返回0。 3. **查询控制键状态**(`cmd = 2`):此模式下,函数返回一个值,其中的每一位表示不同的控制键是否被按下,如Shift键、Ctrl键等。 #### 四、bioskey函数的返回值详解 根据`cmd`参数的不同,`bioskey`函数的返回值具有不同的意义: - 当`cmd`为0时,函数返回一个两个字节的整型数。如果低8位非零,表示按下的是一般字符键;如果低8位为0,则高8位表示的是特殊功能键。 - 当`cmd`为1时,如果返回非零值,表示有键按下;如果返回0,则表示没有键按下。 - 当`cmd`为2时,返回值的每一位表示不同的控制键状态: - 第0位(0x01):右边的Shift键被按下 - 第1位(0x02):左边的Shift键被按下 - 第2位(0x04):Ctrl键被按下 - 第3位(0x08):Alt键被按下 - 第4位(0x10):Scroll Lock已打开 - 第5位(0x20):Num Lock已打开 - 第6位(0x40):Caps Lock已打开 - 第7位(0x80):Insert已打开 #### 五、bioskey函数的底层实现 `bioskey`函数实际上是通过调用`int86`函数来实现的,`int86`函数的原型为: ```c int int86(int intr_num, union REGS *inregs, union REGS *outregs); ``` 该函数的第一个参数`intr_num`表示BIOS调用类型号,第二个参数`inregs`用于传递调用的功能号及其它入口参数,第三个参数`outregs`用于接收功能调用后的返回值。 #### 六、示例代码 以下是一个简单的示例代码,展示了如何使用`bioskey`函数来获取用户的键盘输入: ```c #include <stdio.h> #include <conio.h> #include <stdlib.h> int main(void) { int key; printf("Press any key...\n"); while (1) { key = bioskey(0); // 等待按键 if (key != 0) { if ((key & 0xFF) != 0) { // 普通字符键 printf("Key pressed: %c\n", key & 0xFF); } else { // 特殊功能键 printf("Special key pressed: %X\n", key >> 8); } } } return 0; } ``` #### 七、总结 通过对`bioskey`函数的详细介绍和示例代码的展示,我们可以看到该函数在处理键盘输入方面的强大能力。无论是简单的字符键还是复杂的控制键,`bioskey`都可以准确地捕捉到用户的操作,为开发人员提供了极大的灵活性和便利性。在进行低级编程时,熟练掌握`bioskey`的使用技巧对于提高程序的交互性和功能性至关重要。






















有的时候TC提供的屏幕输出函数并不能满足我们的实际需要比如我们需要一个输入字符后按下回车不换行
在图行模式按下某个键后显示自定义字符或图形 类似五子棋游戏中棋子移动问题等等.这就需要我们编写自己的屏幕输出函数和键盘控制函数而编写这样的函数需要读取键盘扫描码!
每个按键都对应一个唯一的扫描码来用于程序识别这个按键!但有些按键没有扫描码原因是它直接引起中断调用中断程序.
怎样获得扫描码以确定那个键被按下?:一是直接使用 Turbo C 提供
的键盘操作函数 bioskey()来识别,二是通过int86()函数,调用 BIOS
的 INT 16H,功能号为 0 的中断。它将按键的扫描码存放在 Ax 寄存器的高字节中。
下面介绍bioskey()函数的用法! bioskey()的原型为:
int bioskey(int cmd);
它在 bios.h 头文件中进行了说明,参数 cmd 用来确定 bioskey()如何操作:
操作
cmd
bioskey()返回按健的键值,该值是 2 个字节的整型数。若没有键按下,则该函数一
0
直等待,直到有键按下。当按下时,若返回值的低 8 位为非零,则表示为普通键,
其值代表该键的 ASCII 码。若返回值的低 8 位为 0,则高 8 位表示为扩展的 ASCII
码,表示按下的是特殊功能键。
bioskey()查询是否有键按下。若返回非 0 值,则表示有键按下,若为 0 表示没键按
1
下。
按过的状态由该函数返回的低 8 位的各位
2 bioskey()将返回一些控制键是否被按过,
值来表示:
字节位 对应的 16 进制数 含义
右边的 shift 键被按下
0 0x01
左边的 shift 键被按下
1 0x02
Ctrl 键被按下
2 0x04
Alt 键被按下
3 0x08
Scroll Lock 已打开
4 0x10
Num Lock 已打开
5 0x20
Caps Lock 已打开
6 0x40
Inset 已打开
7 0x80
当某位为 l 时,表示相应的键已按,或相应的控制功能已有效,如选参数 cmd 为 2,
若 key 值为 0x09,则表示右边的 shift 键被按,同时又按了 Alt 键。
其实bilskey()就是通过调用int86()来实现的!也需bilskey()就是int86()的宏定义有兴趣的朋友可以自 己查下相关资料
int int86(int intr_num,union REGS *inregs,union REGS *outregs);
这个函数在 bios.h 头文件中进行了说明,它的第一个参数 intr_num 表示 BIOS 调用类型
号,相当于 int n 调用的中断类型号 n,第二个参数表示是指向联合类型 REGS 的指针,它
用于接收调用的功能号及其它一些指定的入口参数, 以便传给相应的寄存器, 第三个参数也
是一个指向联合类型 REGS 的指针,它用于接收功能调用后的返回值,即出口参数,如调
用的结果,状态信息,这些值从相关寄存器中得到。
下面举个bioskey()应用的例子:
#include "Stdio.h"
#include "Conio.h"
#include <stdlib.h>
int main(void)
}
}
下面是我自己读取的键盘扫描码
剩余7页未读,继续阅读

- 粉丝: 4
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源
- 第一节---基因工程概述.ppt
- 2023年C++语言面试宝典整理.doc
- MATLAB的简要介绍.ppt
- 第三方物流项目管理-项目控制与风险管理课件.pptx
- Java坦克大战设计报告.doc
- Java多线程和输入输出流.doc
- vfp程序设计填空-改错-查询题库(可编辑修改word版).docx
- C、C++编程题目和代码.doc
- 2023年水利协会五大员网络学习考试题.doc
- oracle-DBA日常检查.doc
- ERD-ONLINE-SQL资源
- 2023年专业技术人员继续教育公需科目培训计划专业技术人员网络安全知识答案.docx
- Citrix虚拟化提升能源企业信息化体系架构.doc
- CNote-计算机二级资源
- 2023年华师CI与网络广告在线作业.doc
- 从中间件技术看网络技术发展.pptx



- 1
- 2
前往页