首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

有人知道TC中的bioskey()函数如何用吗

2012-02-20 
有人知道TC中的bioskey()函数怎么用吗我有个问题请教大家,我在看源程序时看到了一个调用TC库函数中的biosk

有人知道TC中的bioskey()函数怎么用吗
我有个问题请教大家,我在看源程序时看到了一个调用TC库函数中的bioskey()函数的例子,我有些看不懂请达人指教。

源代码如下:
/****************************************************************/
/*bioskey函数                                                                                                       */
/*函数原型:   int   bioskey(int   cmd);                                                               */
/*函数功能:                                                                                                           */
/*         利用函数bioskey可以实现三种功能,参数cmd为要实现的功能号,*/
/*值只能为0、1、2,具体含义如下:                                                               */
/*         0:在系统中有一个按键队列,所有的键盘按键都在这里排成队。该*/
/*功能就是如果按键队列中有按键,那么读取队列首位的按键,并返回按*/
/*键值;否则等待键盘按键出现。(   其中按键值的高字节为扫描码,低字*/
/*节为ASCII码)                                                                                                     */
/*         1:如果按键队列中没有按键,那么返回零,否则返回非零。             */
/*         2:返回特殊按键Shift、Ctrl、Alt等键的按键状态。                         */
/****************************************************************/
/*bioskey例程*/
#include   <stdio.h>
#include   <bios.h>
#include   <ctype.h>

#define   RIGHT     0x01
#define   LEFT       0x02
#define   CTRL       0x04
#define   ALT         0x08

int   main(void)
{
      int   key,   modifiers;

      /*   1号功能返回零,除非按下了一个键*/
      while   (bioskey(1)   ==   0);

      /*   0号功能返回等待中按下的键*/
      key   =   bioskey(0);

      /*   2号功能用于判断特殊键是否被按下*/
      modifiers   =   bioskey(2);
      if   (modifiers)
      {
            printf( "[ ");
            if   (modifiers   &   RIGHT)   printf( "RIGHT ");
            if   (modifiers   &   LEFT)     printf( "LEFT ");
            if   (modifiers   &   CTRL)     printf( "CTRL ");


            if   (modifiers   &   ALT)       printf( "ALT ");
            printf( "] ");
      }
      /*   print   out   the   character   read   */
      /*   打印出读进来的字符   */
      if   (isalnum(key   &   0xFF))
            printf( " '%c '\n ",   key);
      else
            printf( "%#02x\n ",   key);
      return   0;
}


问题:
1.什么是扫描码?   有什么用呀?

[解决办法]
#define RIGHT 0x01
#define LEFT 0x02
#define CTRL 0x04
#define ALT 0x08

是定义按键的值.键盘上每一个键都有一个对应的键值.当按下一个键时.会产生一个中断.
然后键盘对应的寄存器上保存的就是这个按键的值.这里对应的就是ALT等键的键值.
操做系统里面有讲.

modifiers = bioskey(2);
if (modifiers)
{
printf( "[ ");
if (modifiers & RIGHT) printf( "RIGHT ");
if (modifiers & LEFT) printf( "LEFT ");
if (modifiers & CTRL) printf( "CTRL ");
if (modifiers & ALT) printf( "ALT ");
printf( "] ");
}

这里是值出按的是哪个键.
[解决办法]
那为什么ALT对应的ASCII码没有啊?
=====================================
一般的功能键都不用ASCII表示,它们可能是两个字符的复合,所以表示不出,同样的还有 方向键,F1~F12 功能键


什么是扫描码呀?
=====================================
扫描码是键盘真正输入计算机的代码,一般由键盘内部的芯片发生,每个键的击键与释放都会产生一个扫描码,然后由系统程序解释成ASCII码,你可以查阅硬件手册了解扫描码的内容,如果需要我可以在稍后提供给你。


还要用位于操作,有必要吗?
=====================================
位于操作是用来判断按键状态是否被按下,代码运行的效率比一般的 "== "比较要高,并且安全性也高。

热点排行