⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 keyboard.c

📁 一个完整的GUI界面OS,单盘启动 实现了多线程、FAT32文件读写
💻 C
字号:
//-----------------------------------------------------------------------------------------------------------------------
//          KeyBoard Driver For FireXOS  1.01 
//
//          Version  1.10
//
//          Create by  xiaofan                                   2004.9.20
//
//          Update by xiaofan                                    2004.9.20
//------------------------------------------------------------------------------------------------------------------------

#include "Keyboard.h"
#include "Queue.h"
#include "Message.h"
#include "Io.h"
#include "Traps.h"
#include "Timer.h"
#include "Console.h"

void  KeyboardInterrupt(void);                      //键盘中断句柄


//--------------------------------------------------------------------------------------------------------------------------////  将键盘扫描码转成ASCII码////--------------------------------------------------------------------------------------------------------------------------
unsigned char ToASCII(unsigned char keycode)
{
    switch(keycode)
    {
     case 0x1e :
      case 0x9e :  return 'a' ;
      case 0x30 :
      case 0xb0 :  return 'b' ;
      case 0x2e :
      case 0xae :  return 'c' ;
      case 0x20 :
      case 0xa0 :  return 'd' ;
      case 0x12 :
      case 0x92 :  return 'e' ;
      case 0x21 :
      case 0xa1 :  return 'f' ;
      case 0x22 :
      case 0xa2 :  return 'g' ;
      case 0x23 :
      case 0xa3 :  return 'h' ;
      case 0x17 :
      case 0x97 :  return 'i' ;
      case 0x24 :
      case 0xa4 :  return 'j' ;
      case 0x25 :
      case 0xa5 :  return 'k' ;
      case 0x26 :
      case 0xa6 :  return 'l' ;
      case 0x32 :
      case 0xb2 :  return 'm' ;
      case 0x31 :
      case 0xb1 :  return 'n' ;
      case 0x18 :
      case 0x98 :  return 'o' ;
      case 0x19 :
      case 0x99 :  return 'p' ;
      case 0x10 :
      case 0x90 :  return 'q' ;
      case 0x13 :
      case 0x93 :  return 'r' ;
      case 0x1f :
      case 0x9f :  return 's' ;
      case 0x14 :
      case 0x94 :  return 't' ;
      case 0x16 :
      case 0x96 :  return 'u' ;
      case 0x2f :
      case 0xaf :  return 'v' ;
      case 0x11 :
      case 0x91 :  return 'w' ;
      case 0x2d :
      case 0xad :  return 'x' ;
      case 0x15 :
      case 0x95 :  return 'y' ;
      case 0x2c :
      case 0xac :  return 'z' ;
      case 0x0b :
      case 0x8b :  return '0' ;
      case 0x1c :
      case 0x9c :  return '\n' ; 
      case 0x0e :
      case 0x8e :  return '\b' ; // 退格键
     }

		return 1;

}



//--------------------------------------------------------------------------------------------------------------------------////  键盘中断处理////--------------------------------------------------------------------------------------------------------------------------
void KeyboardHandle(void)
{
      KnlMes     mes;
      unsigned char ch=inb(0x60);
      if(ch==0x0) return;
      if(ch>0x80)
      mes.MessageType = MES_KEYUP;
      else
      mes.MessageType = MES_KEYDOWN;  

      mes.Param1= ch;                                                    //参数1为扫描码
      mes.Param2= ToASCII(ch);                                           //参数2为ASCII码
			KnlPutMessage(KnlMesQue,mes);
			
}


//--------------------------------------------------------------------------------------------------------------------------////  键盘驱动初始化////--------------------------------------------------------------------------------------------------------------------------
void KeyboardInit(void)
{
	    ConsolePrintf("Set the keyboard driver");
      SetIntrGate(0x21,(void*)KeyboardInterrupt);
      outb_p(inb_p(0x21)&0xfd,0x21);     
			ConsolePrintOK();
			TickDelay(1);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -