© MCS Electronics, 1995-2007
The following tables lists all scan codes.
AT KEYBOARD SCANCODES
Table reprinted with permission of Adam Chapweske
http://panda.cs.ndsu.nodak.edu/~achapwes
KEY |
MAKE |
BREAK |
|
KEY |
MAKE |
BREAK |
|
KEY |
MAKE |
BREAK |
A |
1C |
F0,1C |
|
9 |
46 |
F0,46 |
|
[ |
54 |
FO,54 |
B |
32 |
F0,32 |
|
` |
0E |
F0,0E |
|
INSERT |
E0,70 |
E0,F0,70 |
C |
21 |
F0,21 |
|
- |
4E |
F0,4E |
|
HOME |
E0,6C |
E0,F0,6C |
D |
23 |
F0,23 |
|
= |
55 |
FO,55 |
|
PG UP |
E0,7D |
E0,F0,7D |
E |
24 |
F0,24 |
|
\ |
5D |
F0,5D |
|
DELETE |
E0,71 |
E0,F0,71 |
F |
2B |
F0,2B |
|
BKSP |
66 |
F0,66 |
|
END |
E0,69 |
E0,F0,69 |
G |
34 |
F0,34 |
|
SPACE |
29 |
F0,29 |
|
PG DN |
E0,7A |
E0,F0,7A |
H |
33 |
F0,33 |
|
TAB |
0D |
F0,0D |
|
U ARROW |
E0,75 |
E0,F0,75 |
I |
43 |
F0,43 |
|
CAPS |
58 |
F0,58 |
|
L ARROW |
E0,6B |
E0,F0,6B |
J |
3B |
F0,3B |
|
L SHFT |
12 |
FO,12 |
|
D ARROW |
E0,72 |
E0,F0,72 |
K |
42 |
F0,42 |
|
L CTRL |
14 |
FO,14 |
|
R ARROW |
E0,74 |
E0,F0,74 |
L |
4B |
F0,4B |
|
L GUI |
E0,1F |
E0,F0,1F |
|
NUM |
77 |
F0,77 |
M |
3A |
F0,3A |
|
L ALT |
11 |
F0,11 |
|
KP / |
E0,4A |
E0,F0,4A |
N |
31 |
F0,31 |
|
R SHFT |
59 |
F0,59 |
|
KP * |
7C |
F0,7C |
O |
44 |
F0,44 |
|
R CTRL |
E0,14 |
E0,F0,14 |
|
KP - |
7B |
F0,7B |
P |
4D |
F0,4D |
|
R GUI |
E0,27 |
E0,F0,27 |
|
KP + |
79 |
F0,79 |
Q |
15 |
F0,15 |
|
R ALT |
E0,11 |
E0,F0,11 |
|
KP EN |
E0,5A |
E0,F0,5A |
R |
2D |
F0,2D |
|
APPS |
E0,2F |
E0,F0,2F |
|
KP . |
71 |
F0,71 |
S |
1B |
F0,1B |
|
ENTER |
5A |
F0,5A |
|
KP 0 |
70 |
F0,70 |
T |
2C |
F0,2C |
|
ESC |
76 |
F0,76 |
|
KP 1 |
69 |
F0,69 |
U |
3C |
F0,3C |
|
F1 |
05 |
F0,05 |
|
KP 2 |
72 |
F0,72 |
V |
2A |
F0,2A |
|
F2 |
06 |
F0,06 |
|
KP 3 |
7A |
F0,7A |
W |
1D |
F0,1D |
|
F3 |
04 |
F0,04 |
|
KP 4 |
6B |
F0,6B |
X |
22 |
F0,22 |
|
F4 |
0C |
F0,0C |
|
KP 5 |
73 |
F0,73 |
Y |
35 |
F0,35 |
|
F5 |
03 |
F0,03 |
|
KP 6 |
74 |
F0,74 |
Z |
1A |
F0,1A |
|
F6 |
0B |
F0,0B |
|
KP 7 |
6C |
F0,6C |
0 |
45 |
F0,45 |
|
F7 |
83 |
F0,83 |
|
KP 8 |
75 |
F0,75 |
1 |
16 |
F0,16 |
|
F8 |
0A |
F0,0A |
|
KP 9 |
7D |
F0,7D |
2 |
1E |
F0,1E |
|
F9 |
01 |
F0,01 |
|
] |
5B |
F0,5B |
3 |
26 |
F0,26 |
|
F10 |
09 |
F0,09 |
|
; |
4C |
F0,4C |
4 |
25 |
F0,25 |
|
F11 |
78 |
F0,78 |
|
' |
52 |
F0,52 |
5 |
2E |
F0,2E |
|
F12 |
07 |
F0,07 |
|
, |
41 |
F0,41 |
6 |
36 |
F0,36 |
|
PRNT |
E0,12, |
E0,F0, |
|
. |
49 |
F0,49 |
|
|
|
|
SCRN |
E0,7C |
7C,E0, |
|
|
|
|
|
|
|
|
|
|
F0,12 |
|
|
|
|
7 |
3D |
F0,3D |
|
SCROL |
7E |
F0,7E |
|
/ |
4A |
F0,4A |
|
|
|
|
L |
|
|
|
|
|
|
8 |
3E |
F0,3E |
|
PAUSE |
E1,14,7 |
-NONE- |
|
|
|
|
|
|
|
|
|
7, |
|
|
|
|
|
|
|
|
|
|
E1,F0,14 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
© MCS Electronics, 1995-2007
,
F0,77
ACPI Scan Codes
Key |
Make Code |
Break Code |
Power |
E0, 37 |
E0, F0, 37 |
Sleep |
E0, 3F |
E0, F0, |
3F |
Wake |
E0, 5E |
E0, F0, |
5E |
|
|
|
|
Windows Multimedia Scan Codes
Key |
Make Code |
Break Code |
Next Track |
E0, 4D |
E0, F0, 4D |
Previous Track |
E0, 15 |
E0, F0, 15 |
Stop |
E0, 3B |
E0, F0, 3B |
Play/Pause |
E0, 34 |
E0, F0, 34 |
Mute |
E0, 23 |
E0, F0, 23 |
Volume Up |
E0, 32 |
E0, F0, 32 |
Volume Down |
E0, 21 |
E0, F0, 21 |
Media Select |
E0, 50 |
E0, F0, 50 |
E-Mail |
E0, 48 |
E0, F0, 48 |
Calculator |
E0, 2B |
E0, F0, 2B |
My Computer |
E0, 40 |
E0, F0, 40 |
WWW Search |
E0, 10 |
E0, F0, 10 |
WWW Home |
E0, 3A |
E0, F0, 3A |
WWW Back |
E0, 38 |
E0, F0, 38 |
WWW Forward |
E0, 30 |
E0, F0, 30 |
WWW Stop |
E0, 28 |
E0, F0, 28 |
WWW Refresh |
E0, 20 |
E0, F0, 20 |
WWW Favorites |
E0, 18 |
E0, F0, 18 |
|
|
|
To emulate volume up, the data line would look like this:
DATA 5 , &HE0, &H32, &HE0, &HF0 , &H32
^send 5 bytes
^volume up
© MCS Electronics, 1995-2007
See also
CONFIG ATEMU
Example
'----------------------------------------------------------------------------- |
|
------------ |
: ps2_kbdemul.bas |
'name |
'copyright |
: (c) 1995-2005, MCS Electronics |
'purpose |
: PS2 AT Keyboard emulator |
'micro |
: 90S2313 |
'suited for demo |
: no, ADD ON NEEDED |
'commercial addon needed |
: yes |
'-----------------------------------------------------------------------------
------------
$regfile = "2313def.dat" |
' specify the used |
micro |
|
' used crystal |
$crystal = 4000000 |
|
frequency |
|
' use baud rate |
$baud = 19200 |
|
$hwstack = 32 |
|
' default use 32 |
for the hardware stack |
' default use 10 |
$swstack = 10 |
|
for the SW stack |
|
' default use 40 |
$framesize = 40 |
|
for the frame space |
|
$lib "mcsbyteint.lbx" |
' use optional lib |
since we use only bytes |
|
'configure PS2 AT pins |
' you need to turn |
Enable Interrupts |
|
on interrupts yourself since an INT is used |
|
Config Atemu = Int1 , Data = Pind.3 , Clock = Pinb.0 |
' |
^------------------------ |
used interrupt |
' |
^----------- |
pin connected to DATA |
' |
^-- |
pin connected to clock |
'Note that the DATA must be connected to the used interrupt pin |
Waitms 500 |
|
' optional delay |
'rcall _AT_KBD_INIT
Print "Press t for test, and set focus to the editor window"
Dim Key2 As Byte , Key As Byte
Do |
' get key from |
Key2 = Waitkey() |
terminal |
|
Select Case Key2 |
|
Case "t" : |
|
Waitms 1500 |
' send a scan code |
Sendscankbd Mark |
Case Else |
|
End Select |
|
Loop |
|
Print Hex(key) |
|
Mark: |
' send mark |
Data 12 , &H3A , &HF0 , &H3A , &H1C , &HF0 , &H1C , &H2D , &HF0 , &H2D , &H42
, &HF0 , &H42
'^ send 12 bytes
page -639-
© MCS Electronics, 1995-2007
SERIN
Action
Reads serial data from a dynamic software UART.
Syntax
SERIN var , bts , port , pin, baud , parity , dbits , sbits
Remarks
While the OPEN and CLOSE statements can be used for software UARTS, they do not permit to use the same pin for input and output. The settings used when opened the communication channel can also not be changed at run time.
The SERIN and SEROUT statements are dynamic software UART routines to performinput and output. You can use them on the same pin for example send some data with SEROUT and get back an answer using SERIN.
Since the SERIN and SEROUT routines can use any pin and can use different parameter values, the code size of these routines is larger.
Parameter Description
Var |
A variable that will be assigned with the received data. |
Bts |
The number of bytes to receive. String variables will wait for a return (ASCII |
|
13). There is no check if the variable you assign is big enough to hold the |
|
result. |
Port |
The name of the port to use. This must be a letter like A for portA. |
Pin |
The pin number you want to use of the port. This must be in the range from |
|
0-7. |
Baud |
The baud rate you want to use. For example 19200. |
Parity |
A number that codes the parity. 0= NONE, 1 = EVEN, 2 = ODD |
Dbits |
The number of data bits. Use 7 or 8. |
Sbits |
The number of stop bits. 1 to 2. |
The use of SERIN will create an internal variable named ___SER_BAUD. This is a LONG variable. It is important that you specify the correct crystal value with $CRYSTAL so the correct calculation can be made for the specified baud rate.
Note that ___SER_BAUD will not hold the passed baud rate but will hold the bit delay used internal.
Since the SW UART is dynamic you can change all the params at run time. For example you can store the baud rate in a variable and pass this variable to the SERIN routine.
Your code could change the baud rate under user controlthis way.
It is important to realize that software timing is used for the bit timing. Any interrupt that occurs during SERIN or SEROUT will delay the transmission. Disable interrupts while you use SERIN or SEROUT.