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

📄 jiurl键盘驱动 1.htm

📁 JIURL键盘驱动
💻 HTM
📖 第 1 页 / 共 2 页
字号:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<!-- saved from url=(0058)http://jiurl.nease.net/cn/document/KbdDriver/JiurlKbd1.htm -->
<HTML><HEAD><TITLE>JIURL键盘驱动 1</TITLE>
<META http-equiv=Content-Type content="text/html; charset=gb2312">
<STYLE type=text/css>.title {
	FONT-WEIGHT: bold; FONT-SIZE: 21px; LINE-HEIGHT: 48px; FONT-FAMILY: "黑体", Arial, sans-serif; TEXT-DECORATION: none
}
.author {
	FONT-SIZE: 12px; LINE-HEIGHT: 16px; FONT-FAMILY: "宋体"
}
.content {
	FONT-SIZE: 14px; LINE-HEIGHT: 20px
}
</STYLE>

<META content="MSHTML 6.00.2900.2668" name=GENERATOR></HEAD>
<BODY bgColor=#f7f7f7 topMargin=5>
<DIV align=center>
<CENTER>
<TABLE height=29 cellSpacing=0 cellPadding=0 width="96%" border=0>
  <TBODY>
  <TR>
    <TD class=title width="100%" height=41>
      <P align=center><FONT face=宋体>JIURL键盘驱动 1</FONT></P></TD></TR></CENTER>
  <TR>
    <TD class=author width="100%" height=9>
      <P align=center><FONT face=宋体>作者: <A 
      href="mailto:jiurl@mail.china.com">JIURL</A> </FONT></P></TD></TR>
  <TR>
    <TD class=author width="100%" height=6>
      <P align=center><FONT 
      face=宋体>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      主页: <A href="http://jiurl.yeah.net/">http://jiurl.yeah.net/</A> 
    </FONT></P></TD></TR>
  <TR>
    <TD class=author width="100%" height=2>
      <P align=center><FONT face=宋体>&nbsp;&nbsp;&nbsp; 日期: 2003-12-13</FONT> 
    </P></TD></TR></TBODY></TABLE></DIV>
<DIV align=center>
<CENTER>
<TABLE height=1 cellSpacing=0 cellPadding=0 width="96%" border=0>
  <TBODY>
  <TR>
    <TD width="100%" height=1>
      <HR color=#396da5 SIZE=3>
    </TD></TR></TBODY></TABLE></CENTER></DIV>
<DIV align=center>
<TABLE class=content height=200 cellSpacing=0 cellPadding=0 width="96%" 
border=0>
  <TBODY>
  <TR>
    <TD vAlign=top width="131%" height=200>
      <P><B>0 概述</B><BR><BR>&nbsp;&nbsp;&nbsp; 我们将讨论 ps/2 键盘的驱动。主要讨论的内容有,ps/2 
      键盘的硬件,使用键盘驱动的应用层,键盘驱动的初始化,键盘驱动如何完成自己的工作,以及一些涉及到的相关内容。需要注意的是,以后我们提到的键盘,如果没有特殊说明,都是指 
      ps/2 键盘。<BR><BR><B>1 ps/2 键盘的硬件</B><BR><BR>&nbsp;&nbsp;&nbsp; 
      要以写一个硬件的驱动为目的的话,需要对这个硬件有一定的了解,但并不需要太深入,只要对于写驱动足够就可以了。关于 ps/2 
      键盘的硬件知识,我们也是对讨论键盘驱动足够就可以了,一些对于驱动没有帮助的硬件实现的细节,我们不讨论。<BR><BR>1.1 ps/2 
      键盘硬件概述<BR><BR>&nbsp;&nbsp;&nbsp; 对于驱动来说,和键盘相关的最重要的硬件是两个芯片。一个是 intel 8042 
      芯片,位于主板上,CPU 通过 IO 端口直接和这个芯片通信,获得按键的扫描码或者发送各种键盘命令。另一个是 intel 8048 
      芯片或者其兼容芯片,位于键盘中,这个芯片主要作用是从键盘的硬件中得到被按的键所产生的扫描码,与 i8042 
      通信,控制键盘本身。<BR><BR>&nbsp;&nbsp;&nbsp; 当键盘上有键被按下时,i8048 直接获得键盘硬件产生的扫描码。i8048 
      也负责键盘本身的控制,比如点亮 LED 指示灯,熄灭 LED 指示灯。i8048 通过 ps/2 口和 i8042 通信,把得到的扫描码传送给 
      i8042。CPU 通过读写端口,可以直接把 i8042 中的数据读入到 CPU 的寄存器中,或者把 CPU 寄存器中的数据写入 i8042 
      中。ps/2 口一共有 6 个引脚,可以拔下 ps/2 插头看一下,这 6 
      个引脚分别为,时钟,数据,电源地,电源+5V,还有2个引脚没有被用到。由于只有一个引脚传输数据,所以 ps/2 
      口上的数据传输是串行的。<BR><BR>&nbsp;&nbsp;&nbsp; 下面几幅图是一个键盘的内部,可以看到用来产生扫描码的按键矩阵( Key 
      Martix ),可以看到键盘中的芯片(这里不是i8048,是一个兼容的其他型号的芯片)。 
      <P align=center><IMG height=203 src="JIURL键盘驱动 1.files/kbd1.jpg" width=640 
      border=0> 
      <P align=center><IMG height=233 src="JIURL键盘驱动 1.files/kbd2.jpg" width=640 
      border=0> 
      <P align=center><IMG height=125 src="JIURL键盘驱动 1.files/kbd3.jpg" width=183 
      border=0>&nbsp; <IMG height=215 src="JIURL键盘驱动 1.files/kbd4.jpg" width=271 
      border=0> 
      <P>注意,i8042 并不一定在主板上单独出现,可能被整合在某一芯片中。<BR><BR>1.2 扫描码 ,Make Code ,Break 
      Code ,Typematic&nbsp;<BR><BR>&nbsp;&nbsp;&nbsp; 当键盘上有键被按下,松开,按住,键盘将产生扫描码( 
      Scan Code ),这些扫描码将被 i8048 直接得到。扫描码有两种,Make Code 和 Break 
      Code。当一个键被按下或按住时产生的是 Make Code ,当一个键被松开产生的是 Break Code。每个键被分配了唯一的 Make 
      Code 和 Break Code ,这样主机通过扫描码就可以知道是哪一个键。简单的说就是按下键,产生一个 Make Code。松开键,产生一个 
      Break Code。<BR><BR>&nbsp;&nbsp;&nbsp; 而对于按住不放的情况呢。我们可以打开一个记事本,把 'a' 
      键按住不放,可以看到会不停的产生 'a' 直到我们松开。这是由于,当按住一个键不放时,将会 Typematic 
      ,也就是自动打。每隔一定时间,自动产生一个被按住的键的 Make Code,直到最后松开该键。对于 Typematic 有两个重要的参数,一个是 
      Typematic Delay ,决定了按下多长时间之后,进入 Typematic,另一个是 Typematic Rate,决定了在进入 
      Typematic 之后,一秒钟内能产生多少个 Make Code 。现在我们再打开记事本,按住 'a' 不放,仔细观察,将看到第一个 'a' 
      和第二个 'a' 之间间隔的时间明显比其他的要长,而之后每个'a'之间的时间间隔是一样的。<BR><BR>&nbsp;&nbsp;&nbsp; 
      而对于同时按下多个键的情况呢。在一个键被按下,产生了 Make Code,而没有被松开,没有产生 Break Code 
      的时候,再按下另一个键,于是产生了另一个键的 Make Code ,就算是这两个键被同时按下。之后,这两个键松开时,各自产生各自的 Break 
      Code。更多的键的情况也是一样。比如要按 Ctrl 和 A,下面的情况就算作是同时按下了 Ctrl 和 A。按Ctrl,产生 Ctrl 的 
      Make Code,然后按A,产生 A 的 Make Code,然后各自松开,各自产生各自的 Break 
      Code。<BR><BR>&nbsp;&nbsp;&nbsp; 
      而对于按一个键不放的时候,再按另一个键的情况呢。我们可以打开一个记事本,把'a'键按住不放,不要松开,然后再按's'键不放。我们可以看到当按下's'时,'a'键并没有松,但是并没有'a'再出现了,而是's'开始出现,这时即使松开了's','a'也不会继续出现了。<BR><BR><BR>1.3 
      扫描码集<BR><BR>&nbsp;&nbsp;&nbsp; 到目前为止一共有三套扫描码集( Scan Code Set ),ps/2 
      键盘默认使用第二套。不过可以设置 i8042,让 i8042 把得到的 Scan Code 翻译成 Scan Code Set 1 中的 Scan 
      Code ,这样键盘驱动从 i8042 得到的所有 Scan Code 都是第一套中的 Scan Code(实际中驱动也是这么做的)。所以我们只讨论 
      Scan Code Set 1 。需要说明的是 Scan Code 和 ASCII码完全不相同。<BR><BR>&nbsp;&nbsp;&nbsp; 
      在 Scan Code Set 1 中,大多数键的 Make Code,Break Code 都是一个字节。他们的 Make Code 
      的最高位都为0,也就是他们的 Make Code 都小于 0x7F。而他们的 Break Code 为其 Make Code 或运算 80h 
      ,也就是把 Make Code 的低7位不变,最高位设置为1。<BR><BR>&nbsp;&nbsp;&nbsp; 还有一些扩展按键,他们的 
      Scan Code 是双字节的。他们的第一个字节都是E0h,表明这是一个扩展键。第2个字节,和单字节 Scan Code 
      的情况相同。<BR><BR>&nbsp;&nbsp;&nbsp; 还有一个特殊的键,Pause/Break 键,它的 Make Code 为 
      E1,1D,45 E1,9D,C5,注意是 E1h 开头。而且它没有 Break Code 。<BR><BR>我们按键的 Make Code 
      的值的大小,列出 Scan Code Set 1 中的所有扫描码<BR><BR>KEY MAKE BREAK<BR><BR>ESC 01 
      81&nbsp;<BR>1 02 82&nbsp;<BR>2 03 83&nbsp;<BR>3 04 84&nbsp;<BR>4 05 
      85&nbsp;<BR>5 06 86&nbsp;<BR>6 07 87&nbsp;<BR>7 08 88&nbsp;<BR>8 09 
      89&nbsp;<BR>9 0A 8A&nbsp;<BR>0 0B 8B&nbsp;<BR>- 0C 8C&nbsp;<BR>= 0D 
      8D&nbsp;<BR>BKSP 0E 8E&nbsp;<BR><BR>TAB 0F 8F&nbsp;<BR>Q 10 19&nbsp;<BR>W 
      11 91&nbsp;<BR>E 12 92&nbsp;<BR>R 13 93&nbsp;<BR>T 14 94&nbsp;<BR>Y 15 
      95&nbsp;<BR>U 16 96&nbsp;<BR>I 17 97&nbsp;<BR>O 18 98&nbsp;<BR>P 19 
      99&nbsp;<BR>[ 1A 9A&nbsp;<BR>] 1B 9B&nbsp;<BR>ENTER 1C 
      9C&nbsp;<BR><BR>L_CTRL 1D 9D&nbsp;<BR>A 1E 9E&nbsp;<BR>S 1F 9F&nbsp;<BR>D 
      20 A0&nbsp;<BR>F 21 A1&nbsp;<BR>G 22 A2&nbsp;<BR>H 23 A3&nbsp;<BR>J 24 
      A4&nbsp;<BR>K 25 A5&nbsp;<BR>L 26 A6&nbsp;<BR>; 27 A7&nbsp;<BR>' 28 
      A8&nbsp;<BR><BR>` 29 89&nbsp;<BR>L_SHFT 2A AA&nbsp;<BR>\ 2B AB&nbsp;<BR>Z 
      2C AC&nbsp;<BR>X 2D AD&nbsp;<BR>C 2E AE&nbsp;<BR>V 2F AF&nbsp;<BR>B 30 
      B0&nbsp;<BR>N 31 B1&nbsp;<BR>M 32 B2&nbsp;<BR>, 33 B3&nbsp;<BR>. 34 
      B4&nbsp;<BR>/ 35 B5&nbsp;<BR>R_SHFT 36 B6&nbsp;<BR><BR>KP * 37 
      B7&nbsp;<BR>L_ALT 38 B8&nbsp;<BR>SPACE 39 B9&nbsp;<BR>CAPS 3A 
      BA&nbsp;<BR><BR>F1 3B BB&nbsp;<BR>F2 3C BC&nbsp;<BR>F3 3D BD&nbsp;<BR>F4 
      3E BE&nbsp;<BR>F5 3F BF&nbsp;<BR>F6 40 C0&nbsp;<BR>F7 41 C1&nbsp;<BR>F8 42 
      C2&nbsp;<BR>F9 43 C3&nbsp;<BR>F10 44 C4&nbsp;<BR><BR>NUM 45 
      C5&nbsp;<BR>SCROLL 46 C6&nbsp;<BR><BR>KP 7 47 C7&nbsp;<BR>KP 8 48 
      C8&nbsp;<BR>KP 9 49 C9&nbsp;<BR>KP - 4A CA&nbsp;<BR><BR>KP 4 4B 
      CB&nbsp;<BR>KP 5 4C CC&nbsp;<BR>KP 6 4D CD&nbsp;<BR>KP + 4E 
      CE&nbsp;<BR><BR>KP 1 4F CF&nbsp;<BR>KP 2 50 D0&nbsp;<BR>KP 3 51 
      D1&nbsp;<BR><BR>KP 0 52 D2&nbsp;<BR>KP . 53 D3&nbsp;<BR><BR>F11 57 
      D7&nbsp;<BR>F12 58 D8&nbsp;<BR><BR>KP EN E0,1C E0,9C&nbsp;<BR>R_CTRL E0,1D 
      E0,9D&nbsp;<BR><BR>KP / E0,35 E0,B5&nbsp;<BR>R_ALT E0,38 
      E0,B8&nbsp;<BR><BR>HOME E0,47 E0,C7&nbsp;<BR>UP ARROW E0,48 

⌨️ 快捷键说明

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