📄 interfacing the pc's keyboard.htm
字号:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<!-- saved from url=(0046)http://www.beyondlogic.org/keyboard/keybrd.htm -->
<HTML><HEAD><TITLE>Interfacing the PC's Keyboard.</TITLE>
<META http-equiv=Content-Type content="text/html; charset=gb2312">
<META
content="Details the AT Keyboard Interface and AT Keyboard Protocols. Includes an example Keyboard to ASCII decoder using a 68HC705J1A MCU."
name=description>
<META content="Keyboard, Scan Code, AT, 101 key, HC705J1A, HC11" name=keywords>
<META content="Microsoft FrontPage 5.0" name=GENERATOR></HEAD>
<BODY background="Interfacing the PC's Keyboard.files/background.gif">
<STYLE type=text/css>#TITLEBLOCK {
COLOR: #ffffff; TEXT-DECORATION: none
}
TD {
FONT-FAMILY: Arial
}
P {
FONT-FAMILY: Arial
}
FONT {
FONT-FAMILY: Arial
}
A {
FONT-FAMILY: Arial
}
</STYLE>
<CENTER><BR><BR><A href="http://www.beyondlogic.org/"><IMG
alt="Interfacing the PC / Beyond Logic"
src="Interfacing the PC's Keyboard.files/interface.gif" border=0></A> <BR>
<TABLE width="70%">
<TBODY>
<TR>
<TD>
<DIV align=right><FONT face=ARIAL size=+1>Quality Information in one Place
. . .</FONT></DIV></TD></TR></TBODY></TABLE><BR>
<TABLE width="90%" border=0>
<TBODY>
<TR>
<TD width="20%" bgColor=blue height=25><FONT face=ARIAL color=white><B>
<CENTER><A id=TITLEBLOCK
href="http://www.beyondlogic.org/index.html#PARALLEL">Parallel
Ports</A></CENTER></B></FONT></TD>
<TD width="20%" bgColor=blue height=25><FONT face=ARIAL color=white><B>
<CENTER><A id=TITLEBLOCK
href="http://www.beyondlogic.org/index.html#SERIAL">Serial
Ports</A></CENTER></B></FONT></TD>
<TD width="20%" bgColor=blue height=25><FONT face=ARIAL color=white><B>
<CENTER><A id=TITLEBLOCK
href="http://www.beyondlogic.org/index.html#INTERRUPTS">Interrupts</A></CENTER></B></FONT></TD>
<TD width="20%" bgColor=blue height=25><FONT face=ARIAL color=white><B>
<CENTER><A id=TITLEBLOCK
href="http://www.beyondlogic.org/index.html#ATKEYBOARDS">AT Keyboard
Ports</A></CENTER></B></FONT></TD>
<TD width="20%" bgColor=blue height=25><FONT face=ARIAL color=white><B>
<CENTER><A id=TITLEBLOCK
href="http://www.beyondlogic.org/index.html#USB">USB</A></CENTER></B></FONT></TD></TR></TBODY></TABLE><BR>
<HR>
<FONT face=ARIAL size=5><B>The PC's keyboard. </B></FONT>
<HR>
<UL></CENTER>
<UL><FONT face=ARIAL><BR>
<P>Why would you want to interface the Keyboard? The IBM keyboard can be a
cheap alternative to a keyboard on a Microprocessor development system. Or
maybe you want a remote terminal, just couple it with a LCD Module. </P>
<P>Maybe you have a RS-232 Barcode Scanner or other input devices, which you
want to use with existing software which only allows you to key in numbers or
letters. You could design yourself a little box to convert RS-232 into a
Keyboard Transmission, making it transparent to the software. </P>
<P>An interfacing example is given showing the keyboard's protocols in action.
This interfacing example uses a 68HC705J1A MCU to decode an IBM AT keyboard
and output the ASCII equivalent of the key pressed at 9600 BPS. </P>
<P>Note that this page only deals with AT Keyboards. If you have any XT
keyboards, you wish to interface, consider placing them in a museum. We will
not deal with this type of keyboard in this document. XT Keyboards use a
different protocol compared to the AT, thus code contained on this page will
be incompatible. </P></UL><BR>
<HR>
<B><FONT size=+2>PC Keyboard Theory</FONT></B>
<HR>
<UL>
<P>The IBM keyboard you most probably have sitting in front of you, sends scan
codes to your computer. The scan codes tell your Keyboard Bios, what keys you
have pressed or released. Take for example the 'A' Key. The 'A' key has a scan
code of 1C (hex). When you press the 'A' key, your keyboard will send 1C down
it's serial line. If you are still holding it down, for longer than it's
typematic delay, another 1C will be sent. This keeps occurring until another
key has been pressed, or if the 'A' key has been released. </P>
<P>However your keyboard will also send another code when the key has been
released. Take the example of the 'A' key again, when released, the keyboard
will send F0 (hex) to tell you that the key with the proceeding scan code has
been released. It will then send 1C, so you know which key has been released.
</P>
<P>Your keyboard only has one code for each key. It doesn't care it the shift
key has been pressed. It will still send you the same code. It's up to your
keyboard BIOS to determine this and take the appropriate action. Your keyboard
doesn't even process the Num Lock, Caps Lock and Scroll Lock. When you press
the Caps Lock for example, the keyboard will send the scan code for the cap
locks. It is then up to your keyboard BIOS to send a code to the keyboard to
turn on the Caps lock LED. </P>
<P>Now there's 101 keys and 8 bits make 256 different combinations, thus you
only need to send one byte per key, right? </P>
<P>Nop. Unfortunately a handful of the keys found on your keyboard are
extended keys, and thus require two scan code. These keys are preceded by a E0
(hex). But it doesn't stop at two scan codes either. How about
E1,14,77,E1,F0,14,F0,77! Now that can't be a valid scan code? Wrong again.
It's happens to be sent when you press the Pause/break key. Don't ask me why
they have to make it so long! Maybe they were having a bad day or something?
</P>
<P>When an extended key has been released, it would be expect that F0 would be
sent to tell you that a key has been released. Then you would expect E0,
telling you it was an extended key followed by the scan code for the key
pressed. However this is not the case. E0 is sent first, followed by F0, when
an extended key has been released. </P><B><FONT size=+2>Keyboard
Commands</FONT></B>
<HR>
<P>Besides Scan codes, commands can also be sent to and from the keyboard. The
following section details the function of these commands. By no means is this
a complete list. These are only some of the more common commands. </P>
<UL><B><FONT size=+2>Host Commands</FONT></B>
<HR>
<P>These commands are sent by the Host to the Keyboard. The most common
command would be the setting/resetting of the Status Indicators (i.e. the
Num lock, Caps Lock & Scroll Lock LEDs). The more common and useful
commands are shown below.
<P>
<CENTER>
<TABLE width="80%" border=0>
<TBODY>
<TR>
<TD vAlign=top><B>ED</B></TD>
<TD><B>Set Status LED's - This command can be used to turn on and off
the Num Lock, Caps Lock & Scroll Lock LED's. After Sending ED,
keyboard will reply with ACK (FA) and wait for another byte which
determines their Status. Bit 0 controls the Scroll Lock, Bit 1 the Num
Lock and Bit 2 the Caps lock. Bits 3 to 7 are ignored. </B></TD></TR>
<TR>
<TD></TD>
<TD></TD></TR>
<TR>
<TD vAlign=top>EE</TD>
<TD>Echo - Upon sending a Echo command to the Keyboard, the keyboard
should reply with a Echo (EE)</TD></TR>
<TR>
<TD></TD>
<TD></TD></TR>
<TR>
<TD vAlign=top><B>F0</B></TD>
<TD><B>Set Scan Code Set. Upon Sending F0, keyboard will reply with
ACK (FA) and wait for another byte, 01-03 which determines the Scan
Code Used. Sending 00 as the second byte will return the Scan Code Set
currently in Use </B></TD></TR>
<TR>
<TD></TD>
<TD></TD></TR>
<TR>
<TD vAlign=top>F3</TD>
<TD>Set Typematic Repeat Rate. Keyboard will Acknowledge command with
FA and wait for second byte, which determines the Typematic Repeat
Rate.</TD></TR>
<TR>
<TD></TD>
<TD></TD></TR>
<TR>
<TD vAlign=top><B>F4</B></TD>
<TD><B>Keyboard Enable - Clears the keyboards output buffer, enables
Keyboard Scanning and returns an Acknowledgment.</B></TD></TR>
<TR>
<TD></TD>
<TD></TD></TR>
<TR>
<TD vAlign=top>F5</TD>
<TD>Keyboard Disable - Resets the keyboard, disables Keyboard Scanning
and returns an Acknowledgment.</TD></TR>
<TR>
<TD></TD>
<TD></TD></TR>
<TR>
<TD vAlign=top><B>FE</B></TD>
<TD><B>Resend - Upon receipt of the resend command the keyboard will
re- transmit the last byte sent.</B></TD></TR>
<TR>
<TD></TD>
<TD></TD></TR>
<TR>
<TD vAlign=top>FF</TD>
<TD>Reset - Resets the
Keyboard.</TD></TR></TBODY></TABLE></CENTER><BR><BR><B><FONT
size=+2>Commands</FONT></B>
<HR>
<P>Now if the Host Commands are send from the host to the keyboard, then the
keyboard commands must be sent from the keyboard to host. If you think this
way, you must be correct. Below details some of the commands which the
keyboard can send. </P><BR>
<CENTER>
<TABLE width="80%" border=0>
<TBODY>
<TR>
<TD vAlign=top><B>FA</B></TD>
<TD><B>Acknowledge</B></TD></TR>
<TR>
<TD></TD>
<TD></TD></TR>
<TR>
<TD vAlign=top>AA</TD>
<TD>Power On Self Test Passed (BAT Completed)</TD></TR>
<TR>
<TD></TD>
<TD></TD></TR>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -