DOS命令扩充-键盘及汉字的扫描代码

1.原理

 当按键盘上任一键时,对键盘的扫描代码是两字节代码。扫描代码的低字节是按键的ASCII码,汉字则是由两个扫描代码组成,而高字节是键位代码。当按键是一般ASCII字符键时,从扫描代码的低字节中可以得到它们的ASCII代码值;当按键是汉字时,扫描代码的低字节小于零,两个扫描代码的低字节各自加上256便是汉字的ASCII代码。但是,当按键是特殊键时,扫描代码的低字节是零,此时必须使用高字节的键位代码判别它们。程序中调用ROM_BIOS的int16H 的0号功能把键盘扫描代码置入AX后返回,AX的值是int86()的返回值。如此便可以得到按键和汉字的ASCII代码值及特殊键的键位码。

 

2.程序清单

#include<stdio.h>

#include<dos.h>

char getkey(void);

void main()

{

 int j1 = 0;

 int j = 0;

 

 union

 {

  int c;

  char ch[2];

 }cc;

 

 do

 {

  printf("\n\n[请输入任意键或组合键或汉字]\n");

  cc.c=getkey();

 

  if(cc.ch[0]==0)

  {

   printf("计算机特殊键键位码:00-%d",cc.ch[1]);

  }

  else if(cc.ch[0]>0)

  {

   j++;

   if(j==2)

   {

    putchar(j1);

    putchar(cc.ch[0]+256);

    printf("的ASCII码是%d",j1);

    printf("和%d",cc.ch[0]+256);

    printf("\n机器码是%x%x",j1,cc.ch[0]+256);

    printf("\n区位码是%d%d",j1-160,cc.ch[0]+96);

    j = 0;

   }

   else

   {

    j1 = cc.ch[0]+256;

   }    

  }

  else

  {

   printf("%c",cc.ch[0]);

   printf("的ASCII码是%d",cc.ch[0]);

   printf("\n机器码是%x",cc.ch[0]);

  }

 }while(cc.ch[0]!=27);

}

 

char getkey(void)

{

 union REGS regs;

 regs.h.ah = 0;

 return int86(0x16,&regs,&regs);

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值