READKEYS.C
上传用户:sunrenlu
上传日期:2022-06-13
资源大小:1419k
文件大小:2k
源码类别:

操作系统开发

开发平台:

DOS

  1. /*
  2.  * readkeys - demonstrates a NON-interrupt based input program
  3.  *
  4.  * Copyright (c) 1999 Erick Engelke
  5.  *
  6.  * The PC keyboard contains an Intel 8048 (or functional equivalent) which
  7.  * debouces and does other beneficial stuff.
  8.  *
  9.  * We are ignoring it and just periodically scanning the data pins to see
  10.  * what character is currently changing.
  11.  *
  12.  * Make is when the key is pressed, Break is when it is released.
  13.  *
  14.  * Notice that auto key repeat is a BIOS function, so we don't see this
  15.  * phenomenon, though we hear it because the BIOS buffer overflows if
  16.  * you hold down a key for a while!
  17.  */
  18. #include <stdio.h>
  19. #include <mem.h>
  20. #include <ctype.h>
  21. #include <conio.h>
  22. #include <dos.h>
  23. #include <rtos.h>
  24. void key_thread( DWORD dummy )
  25. {
  26.     WORD port = 0x60;
  27.     BYTE data, prevdata, ch;
  28.     prevdata = 0;
  29.     do {
  30.         data = inportb( port );
  31.         if ( data != prevdata ) {
  32.             /* use BIOS to translate */
  33.             while ( kbhit())
  34.                 ch = getch();
  35.             /* only interesting if it changed */
  36.             cprintf("data : %x : %c : %srn", data & 0x7f, ch,
  37.                 (data & 128 ) ? "break" : "make" );
  38.             prevdata = data;
  39.         }
  40.         rt_sleep( 10 );
  41.     } while ( 1 );
  42. }
  43. int main( int argc, char **argv )
  44. {
  45.     int i;
  46.     kpreemptive = 1;
  47.     kdebug = 0;
  48.     rt_init( 100 );
  49.     rt_newthread( key_thread, 1, 4096, 0, "keyboard reader" );
  50.     /* let this program run for 10 seconds */
  51.     rt_sleep( 10000 );
  52.     return( 0 );
  53. }