第二套扫描集-- 所有现代键盘默认的扫描码集
PS2设备通信协议 时序图
主机到PS/2设备的传输
• PS2控制器必须进入主机发送请求(Host Send Request)的状态。这可以通过以下动作实现: • PS2CLK线首先被拉低至少在一个时钟周期(进 入禁止传输Inhibit Transmission状态) • PS2DATA线随后被拉低(提供的起始位帧传送) • PS2CLK线随后被释放(仍然保持PS2DATA低)。 • PS/2设备定期检查数据和时钟线是否为这种状态, 当检测到,开始产生PS2CLK信号。 • 在从主机向PS/2设备发送数据时,PS2一帧数据由 10个域构成。见时序图
Ps2键盘
• 如果它发现有键被按下,释放或按住,键盘 将发送 扫描码的信息包到计算机。扫描码有 两种不同的类型 通码 和 断码 。当一个键被 按下或按住就发送通码,当一个键被释放就 发送断码。每个按键被分配了唯一的通码和 断码。这样主机通过查找唯一的扫描码就可 以测定是哪个按键。每个键一整套的通断码 组成了扫描码集,有三套标准的扫描码集分 别是第一套 第二套和第三套。 所有现代的 键盘默认使用第二套扫描码。
Description
3
4 5
6
7 2 3 0-7 0-7
Left button status;1=pressed Right button status;1=pressed Middle button status;1=pressed Reserve X data sign; 1=negative Y data sign; 1=negative Reserve Reserve X data (D0-D7) Y data (D0-D7)
Ps2设备到主机的通信
• 图中绿色的信号表示由Ps2设备产生的。也就是 说PS2设备在产生时钟的同时向主机送出数据, 主机在PS2CLK信号的下降沿读取每个位 。 • 当PS2CLK频率为15kHz时,从PS2CLK(时钟脚) 的上升沿到数据位转变时间至少要5μs。数据变化 到PS2CLK(时钟脚)下降沿的时间至少也有5 μs, 但不能大于25 μs,这是由PS/2通讯协议的时序规 定的。(一般不用考虑,这由键盘或者鼠标产生)
键盘按键的各种编码对照表(全)
键盘按键的各种编码对照表(全)键盘按键的各种编码对照表本附录中的各表列举了键盘按键扫描码和其ASCII码之间的对照关系,表中数据都是⼗六进制形式。
在⽤中断16H的0号功能时,当按下任意⼀个键或组合键时,寄存器AH和AL分别保存着该按键的扫描码和ASCII码。
表1、ASCII码的编码⽅案⾼位000001010011100101110111低位0000NUL DEL SP0@P`p0001SOH DC1!1A Q a q0010STX DC2“2B R b r0011ETX DC3#3C S c s0100EOT DC4$4D T d t0101ENQ NAK%5E U e u0110ACK SYN&6F V f v0111BEL ETB‘7G W g w1000BS CAN(8H X h x1001HT EM)9I Y i y1010LF SUB*:J Z j z1011VT ESC+;K[k{1100FF FS1101CR GS-=M]m}1110SO RS.>N^n~1111SI US/?O_o Del表2、字母和空格按键的编码表单键SHIFT CTRL ALT 按键扫描码ASCII码扫描码ASCII码扫描码ASCII码扫描码ASCII码a and A1E611E411E011E00b and B3062304230023000c and C2E632E432E032E00d and D2064204420042000e and E1265124512051200f and F2166214621062100g and G2267224722072200h and H2368234823082300i and I1769174917091700j an1 J246A244A240A2400 k and K256B254B250B2500 l and L266C264C260C2600m and M326D324D320D3200 n and N316E314E310E3100 o and O186F184F180F1800 p and P1970195019101900 q and Q1071105110111000 r and R1372135213121300 s and S1F731F531F131F00 t and T1474145414141400 u andU1675165516151600 v and V2F762F562F162F00w and W1177115711171100 x and X2D782D582D182D00 y and Y1579155915191500 z and Z2C7A2C5A2C1A2C00 SpaceBar3920392039203920表3、功能键的编码表单键SHIFT CTRL ALT按键扫描码ASCII码扫描码ASCII码扫描码ASCII码扫描码ASCII码F13B0054005E006800 F23C0055005F006900F33D00560060006A00 F43E00570061006B00 F53F00580062006C00 F64000590063006D00 F741005A0064006E00F842005B0065006F00 F943005C0066007000 F1044005D0067007100 F118500870089008B00 F12860088008A008C00表4、数字键盘的编码表单键SHIFT CTRL ALT 按键扫描码ASCII码扫描码ASCII码扫描码ASCII码扫描码ASCII码Ins & 0 52 00 52 30 92 00End & 14F004F3175000001↓& 25000503291000002 PgDn & 35100513376000003←& 44B004B3473000004 54C004C358F000005→&64D004D3674000006 Home & 74700473777000007↑& 8480048388D000008 PgUp & 94900493984000009+4E2B4E2B90004E00-4A2D4A2D8E004A00 Del & '.'53 00 53 2E 93 00*372A372A96003700表5、第⼀排数字键盘的编码表单键SHIFT CTRL ALT 按键扫描码ASCII码扫描码ASCII码扫描码ASCII码扫描码ASCII码` and ~2960297E29001 and !023*********2 and @03320340030079003 and #043304237A004 and $053405247B005 and %063506257C006 and ^0736075E071E7D007 and &083708267E008 and *0938092A7F009 and (0A390A3880000 and )0B300B298100- and _0C2D0C5F0C1F8200= and +0D3D0D2B8300表6、操作按键的编码表单键SHIFT CTRL ALT 按键扫描码ASCII码扫描码ASCII码扫描码ASCII码扫描码ASCII码Esc011B011B011B0100 Backspace0E080E080E7F0E00 Tab0F090F009400A500 Enter1C0D1C0D1C0A1C00表7、标号按键的编码表单键SHIFT CTRL ALT按键扫描码ASCII码扫描码ASCII码扫描码ASCII码扫描码ASCII码[ and {1A5B1A7B1A1B1A00] and }1B5D1B7D1B1D1B00; and :273B273A27' and "2827282228\ and |2b5C2b7C2B1C2b, and <332C333C33. and >342E343E34/ and ?352F353F35表8、附加按键的编码表单键SHIFT CTRL ALT 按键扫描码ASCII码扫描码ASCII码扫描码ASCII码扫描码ASCII码Slash(/)E02F E02F9500A400 Enter E00D E00D E00A A600 Home47E047E077E09700 End4F E04F E075E09F00 PageUp49E049E084E09900 PageDown51E051E076E0A100 DnArrow50E050E091E0A000 LeftArrow4B E04B E073E09B00 RightArrow4D E04D E074E09D00 UpArrow48E048E08D E09800 Ins52E052E092E0A200 Del53E053E093E0A300表9、其它按键的扫描码当这些键被按下时,BIOS并没有把它们的扫描码输⼊键盘缓冲区。
键盘扫描码
键盘上的每一个键都有两个唯一的数值进行标志。
为什么要用两个数值而不是一个数值呢?这是因为一个键可以被按下,也可以被释放。
当一个键按下时,它们产生一个唯一的数值,当一个键被释放时,它也会产生一个唯一的数值,我们把这些数值都保存在一张表里面,到时候通过查表就可以知道是哪一个键被敲击,并且可以知道是它是被按下还是被释放了。
这些数值在系统中被称为键盘扫描码2扫描码大全扫描码键0x011b ESC0x3b00 F10x3c00 F20x3d00 F30x3e00 F40x3f00 F50x4000 F60x4100 F70x4200 F80x4300 F90x4400 F10主键盘区:0x2960 ~0x0231 10x0332 20x0433 30x0534 40x0635 50x0736 60x0837 70x0938 80x0a39 90x0b30 00x0c2d -0x0d3d =0x2b5c \0x0e08 退格键0x0f09 Tab0x1071 q0x1177 w0x1265 e0x1372 r0x1474 t0x1579 y0x1769 i0x186f o0x1970 p0x1a5b [0x1b5d ]0x1e61 a0x1f73 s0x2064 d0x2166 f0x2267 g0x2368 h0x246a j0x256b k0x266c l0x273b ;0x2827 '0x1c0d 回车0x2c7a z0x2d78 x0x2e63 c0x2f76 v0x3062 b0x316e n0x326d m0x332c ,0x342e .0x352f /0x3920 空格键0xe05b 左Win0xe05c 右Win0xe05d Menu右边数字键盘:0x5200 Insert0x4700 Home0x4900 Page UP 0x5300 Delete0x4f00 End0x5100 PageDown 0x4800 上箭头0x4b00 左箭头0x5000 下箭头0x4d00 右箭头0x352f /0x4a2d - (注意,这是数字键盘的)0x4737 70x4838 80x4939 90x4b34 40x4c35 50x4d36 60x4e2b +0x4f31 10x5032 20x5133 30x5230 00x532e Del通过PC机键盘输入汉字时,其中经过多次的代码转换:用户---汉字输入码---键盘---键盘扫描码---BIOS键盘驱动程序----ASCII码----汉字输入软件----汉字内码。
键盘扫描码key_code
键盘扫描码Keyboard Scan Codes (Numerical Order)---------------+---------------+---------------+---------------+---------------HEX DEC keys |HEX DEC keys |HEX DEC keys |HEX DEC keys |HEXDEC keys---------------+---------------+---------------+---------------+---------------|10 16 Q |20 32 D |30 48 B |4064 F601 1 ESC |11 17 W |21 33 F |31 49 N |4165 F702 2 1 |12 18 E |22 34 G |32 50 M |4266 F803 3 2 |13 19 R |23 35 H |33 51 , |4367 F904 4 3 |14 20 T |24 36 J |34 52 . |4468 F1005 5 4 |15 21 Y |25 37 K |35 53 / |4569 Num06 6 5 |16 22 U |26 38 L |36 54 RShift|46 70 Scroll07 7 6 |17 23 I |27 39 ; |37 55 PrtSc |4771 Home08 8 7 |18 24 O |28 40 ' |38 56 Alt |4872 Up09 9 8 |19 25 P |29 41 ` |39 57 Space |4973 PgUp0A 10 9 |1A 26 [ |2A 42 LShift|3A 58 Caps |4A 74 -0B 11 0 |1B 27 ] |2B 43 \ |3B 59 F1 |4B75 Left0C 12 - |1C 28 |2C 44 Z |3C 60 F2 |4C76 Center0D 13 = |1D 29 CTRL |2D 45 X |3D 61 F3 |4D77 Right0E 14 bs |1E 30 A |2E 46 C |3E 62 F4 |4E78 +0F 15 Tab |1F 31 S |2F 47 V |3F 63 F5 |4F79 End---------------+---------------+---------------+---------------+---------------50 80 Down | | | |51 81 PgDn | | | |52 82 Ins | | | |53 83 Del | | | | ---------------+---------------+---------------+---------------+---------------Keyboard Scan Codes (Read from Port HEX 60 = DEC 96) (Keyboard Layout)Top number ... DECBottom number ... HEX+--+--+---+---+---+---+---+---+---+---+---+---+---+---+---+---+-------+-------+|F1|F2|ESC| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = |BkS|NumLok|Scr Lok|| | | | | | | | | | | | | | | | || ||59|60| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |10 |11 |12 |13 |14 | 69 | 70 | |3B|3C|01 |02 |03 |04 |05 |06 |07 |08 |09 |0A |0B |0C |0D |0E| 45 | 46 |+--+--+---+---+---+---+---+---+---+---+---+---+---+---+---+---+-------+-------+|F3|F4|TAB| Q | W | E | R | T | Y | U | I | O | P | [ | ] | | 7 38 | 9 3 - || | | | | | | | | | | | | | | | | 3| 3 ||61|62|15 |16 |17 |18 |19 |20 |21 |22 |23 |24 |25 |26 |27 | |71 372|73 374 ||3D|3E|0F |10 |11 |12 |13 |14 |15 |16 |17 |18 |19 |1A |1B | |47 348|49 34A |+--+--+---+---+---+---+---+---+---+---+---+---+---+---+---+---+-------+-------+|F5|F6|CTR| A | S | D | F | G | H | J | K | L | ; | ' | ` |28 | 4 35 |6 3 || | | | | | | | | | | | | | | | | 3| 3 ||63|64|29 |30 |31 |32 |33 |34 |35 |36 |37 |38 |39 |40 |41 | |75 376|77 3 ||3F|40|1D |1E |1F |20 |21 |22 |23 |24 |25 |26 |27 |28 |29 | |4B 34C|4D 3 |+--+--+---+---+---+---+---+---+---+---+---+---+---+---+---+---+-------+-------+|F7|F8|Shf| \ | Z | X | C | V | B | N | M | , | . | / |Shf|Prt| 1 32 |3 3 + || | | | | | | | | | | | | | | | | 3| 3 ||65|66|42 |43 |44 |45 |46 |47 |48 |49 |50 |51 |52 |53 |54 |55 |78 380|81 378 ||41|42|2A |2B |2C |2D |2E |2F |30 |31 |32 |33 |34 |35 |36 |37 |4F 350|51 34E |+--+--+---+---+---+---+---+---+---+---+---+---+---+---+---+---+-------+-------+|F9|F0| A|t | | | | |pac| | | | |Cap|Lok| I|s 3D|l 3 || | | | | | | | | | | | | | | | | 3| 3 ||67|68| 5| | | | | |57| | | | | 5| | 8| 3 8| 3 ||43|44| 3| | | | | |39| | | | | 3| | 5| 3 5| 3 |+--+--+---+---+---+---+---+---+---+---+---+---+---+---+---+---+-------+-------+Extended ASCII Special Key Codes (Numerical Order)... composed of 2 bytes, the 2nd byte being 00 (00 signifies that the special codes are to be applied.)HEX DEC keys-------------------------------03 3 CTRL-2; same as CHR$(0)0F 15 Shift-tab10 16 Alt-Q11 17 Alt-W12 18 Alt-E13 19 Alt-R14 20 Alt-T15 21 Alt-Y16 22 Alt-U17 23 Alt-I18 24 Alt-O19 25 Alt-P1E 30 Alt-A1F 31 Alt-S20 32 Alt-D21 33 Alt-F22 34 Alt-G23 35 Alt-H24 36 Alt-J25 37 Alt-K26 38 Alt-L2C 44 Alt-Z2D 45 Alt-X2E 46 Alt-C2F 47 Alt-V30 48 Alt-B31 49 Alt-N32 50 Alt-M3B 59 F13C 60 F23D 61 F33E 62 F43F 63 F540 64 F641 65 F742 66 F843 67 F944 68 F1047 71 Home48 72 Up49 73 PgUp4B 75 Left4D 77 Right4F 79 End50 80 Down51 81 PgDn52 82 Ins53 83 Del54 84 Shift-F155 85 Shift-F256 86 Shift-F357 87 Shift-F458 88 Shift-F559 89 Shift-F6 5A 90 Shift-F7 5B 91 Shift-F8 5C 92 Shift-F9 5D 93 Shift-F105F 95 Ctrl-F260 96 Ctrl-F361 97 Ctrl-F462 98 Ctrl-F563 99 Ctrl-F664 100 Ctrl-F765 101 Ctrl-F866 102 Ctrl-F967 103 Ctrl-F1068 104 Alt-F169 105 Alt-F26A 106 Alt-F36B 107 Alt-F46C 108 Alt-F56D 109 Alt-F66E 110 Alt-F76F 111 Alt-F870 112 Alt-F971 113 Alt-F1072 114 Ctrl-PrtSc73 115 Ctrl-Left74 116 Ctrl-Right75 117 Ctrl-End76 118 Ctrl-PgDn77 119 Ctrl-Home78 120 Alt-179 121 Alt-27A 122 Alt-37B 123 Alt-47C 124 Alt-57D 125 Alt-67E 126 Alt-77F 127 Alt-880 128 Alt-981 129 Alt-082 130 Alt--83 131 Alt-=84 132 Ctrl-PgUp85 133 Ctrl-Up86 134 Ctrl--(num)87 135 Ctrl-Center88 136 Ctrl-+(num)89 137 Ctrl-Down8B 139 Ctrl-Del8C 140 Alt-Home8D 141 Alt-Up8E 142 Alt-PgUp8F 143 Alt--(num)90 144 Alt-Left91 145 Alt-Center92 146 Alt-Right93 147 Alt-+(num)94 148 Alt-End95 149 Alt-Down96 150 Alt-PgDn97 151 Alt-Ins98 152 Alt-DelExtended ASCII Special Key Codes (Keyboard Layout)------------------+-------------------+-------------------+--------------------HEX DEC keys | HEX DEC keys | HEX DEC keys | HEX DECkeys------------------+-------------------+-------------------+--------------------03 3 nul | 0F 15 Shift-tab | 72 114 Ctrl-PrtSc|------------------+-------------------+-------------------+--------------------47 71 Home | | 77 119 Ctrl-Home | 8C140 Alt-Home48 72 Up | | 85 133 Ctrl-Up | 8D141 Alt-Up49 73 PgUp | | 84 132 Ctrl-PgUp | 8E142 Alt-PgUp4A 74 -(num) | | 86 134 Ctrl--(nu)| 8F143 Alt--(num)4B 75 Left | | 73 115 Ctrl-Left | 90144 Alt-Left4C 76 Center | | 87 135 Ctrl-Centr| 91145 Alt-Center4D 77 Right | | 74 116 Ctrl-Right| 92146 Alt-Right4E 78 +(num) | | 88 136 Ctrl-+(nu)| 93147 Alt-+(num)4F 79 End | | 75 117 Ctrl-End | 94148 Alt-End50 80 Down | | 89 137 Ctrl-Down | 95149 Alt-Down51 81 PgDn | | 76 118 Ctrl-PgDn | 96150 Alt-PgDn52 82 Ins | | 8A 138 Ctrl-Ins | 97151 Alt-Ins53 83 Del | | 8B 139 Ctrl-Del | 98152 Alt-Del------------------+-------------------+-------------------+--------------------3B 59 F1 | 54 84 Shift-F1 | 5E 94 Ctrl-F1 | 68104 Alt-F13C 60 F2 | 55 85 Shift-F2 | 5F 95 Ctrl-F2 | 69105 Alt-F23D 61 F3 | 56 86 Shift-F3 | 60 96 Ctrl-F3 | 6A106 Alt-F33E 62 F4 | 57 87 Shift-F4 | 61 97 Ctrl-F4 | 6B107 Alt-F43F 63 F5 | 58 88 Shift-F5 | 62 98 Ctrl-F5 | 6C108 Alt-F540 64 F6 | 59 89 Shift-F6 | 63 99 Ctrl-F6 | 6D109 Alt-F641 65 F7 | 5A 90 Shift-F7 | 64 100 Ctrl-F7 | 6E110 Alt-F742 66 F8 | 5B 91 Shift-F8 | 65 101 Ctrl-F8 | 6F111 Alt-F843 67 F9 | 5C 92 Shift-F9 | 66 102 Ctrl-F9 | 70112 Alt-F944 68 F10 | 5D 93 Shift-F10 | 67 103 Ctrl-F10 | 71113 Alt-F10------------------+-------------------+-------------------+--------------------1E 30 Alt-A | 31 49 Alt-N | 78 120 Alt-1 |30 48 Alt-B | 18 24 Alt-O | 79 121 Alt-2 |2E 46 Alt-C | 19 25 Alt-P | 7A 122 Alt-3 |20 32 Alt-D | 10 16 Alt-Q | 7B 123 Alt-4 |12 18 Alt-E | 13 19 Alt-R | 7C 124 Alt-5 |21 33 Alt-F | 1F 31 Alt-S | 7D 125 Alt-6 |22 34 Alt-G | 14 20 Alt-T | 7E 126 Alt-7 |23 35 Alt-H | 16 22 Alt-U | 7F 127 Alt-8 |17 23 Alt-I | 2F 47 Alt-V | 80 128 Alt-9 |24 36 Alt-J | 11 17 Alt-W | 81 129 Alt-0 |25 37 Alt-K | 2D 45 Alt-X | 82 130 Alt-- |26 38 Alt-L | 15 21 Alt-Y | 83 131 Alt-= |32 50 Alt-M | 2C 44 Alt-Z |PC机和键盘部分通信命令字PC机向键盘发出的命令共有10条,键盘向PC机发出的键盘响应共有7条。
PS2设备通信协议
电气特性
• PS/2通讯协议是一种双向同步串行通讯协议。通 讯的两端通过Clock(时钟脚)同步,并通过 DATA(数据脚)交换数据。任何一方如果想抑制另 外一方通讯时,只需要把Clock(时钟脚)拉到低电 平。如果是PC机和PS/2键盘间的通讯,则PC机 必须做主机,也就是说,PC机可以抑制PS/2键 盘发送数据,而PS/2键盘则不会抑制PC机发送数 据。一般两设备间传输数据的最大时钟频率是3 3kHz,大多数PS/2设备工作在10~20kHz。推 荐值在15kHz左右,也就是说,Clock(时钟脚)高、 低电平的持续时间都为40μs。每一数据帧包含 11~12个位,具体含义如表1所列。
PS2设备通信协议
时序图
PS2接口和协议
• 接口简介 • 1981年IBM推出了IBM PC/XT键盘及其接 口标准。 经过多年演变成6脚mini-DiN连 接器接口,封装上更小巧,用双向串行通 讯协议并且提供有可选择的第三套键盘扫 描码集,同时支持17个主机到键盘的命令。 现在,市面上的键盘都和PS/2及AT键盘兼 容
主机(即PC)到PS/2设备的传输
• 主机若想影响传输,必须能够控制总线时钟!对于 主机而言,控制PS/2总线有三种状态 状态 PS2D ATA 高 高 低 PS2 Note CLK 高 低 为了传输能够发送串 行数据到一位寄存器 高 输出端,控制器要求 PS2设备产生PTransmission Host Send Request
Ps2键盘
• 如果它发现有键被按下,释放或按住,键盘 将发送 扫描码的信息包到计算机。扫描码有 两种不同的类型 通码 和 断码 。当一个键被 按下或按住就发送通码,当一个键被释放就 发送断码。每个按键被分配了唯一的通码和 断码。这样主机通过查找唯一的扫描码就可 以测定是哪个按键。每个键一整套的通断码 组成了扫描码集,有三套标准的扫描码集分 别是第一套 第二套和第三套。 所有现代的 键盘默认使用第二套扫描码。
ps2键盘编码
2 PS/2键盘的编码与命令集 2.1 PS/2键盘的编码目前,PC机使用的PS/2键盘都默认采用第2套扫描码集.扫描码有两种不同的类型:“通码(make code)”和“断码(break code)”.当一个键被按下或持续按住时,键盘会将该键的通码发送给主机;而当一个键被释放时,键盘会将该键的断码发送给主机.根据键盘按键扫描码的不同,可将按键分为3类:第1类按键通码为一个字节,断码为0xF0+通码形式.如A键,其通码为0x1C;断码为0xF0 0x1C.第2类按键通码为两字节0xE0+0xXX形式,断码为0xE0+0xF0+0xXX形式.如Right Ctrl键,其通码为0xE0 0x14;断码为0xE0 0xF0 0x14.第3类特殊按键有两个,Print Screen键,其通码为0xE0 0x12 0xE0 0x7C;断码为0xE0 0xF0 0x7C 0xE0 0xF0 0x12.Pause键,其通码为0xE1 0x14 0x77 0xE1 0xF0 0xl4 0xF0 0x77;断码为空.组合按键扫描码的发送是按照按键发生的次序,如按下面顺序按左Shift十A键:①按下左Shift键;②按下A键;③释放A键;④释放左Shift键,那么计算机上接收到的一串数据为0x12 0x1C 0xF0 0x1C 0xF0 0x12. 在文中的驱动程序设计中,就是根据按键的分类对其分别进行处理.2.2 PS/2键盘的命令集主机可通过向PS/2键盘发送命令对键盘进行设置或者获得键盘的状态等操作.每发送一个字节,主机都会从键盘获得一个应答0xFA(“重发resend”和“回应echo”命令例外).驱动程序在键盘初始化过程中所用的指令:0xED,主机在该命令后跟随发送一个参数字节,用于指示键盘上Num Lock,Caps Lock,Scroll Lock Led的状态;0xF3,主机在这条命令后跟随发送一个字节参数定义键盘机打的速率和延时;0xF4,用于当主机发送0xF5禁止键盘后,重新使能键盘.4.1 单片机与键盘间PS/2通信的程序设计在PS/2通信过程中,主设备(文中是单片机)是在时钟信号为低时发送和接收数据信号.因为单片机向键盘发送的是指令,需要键盘回应,所以这部分程序采用查询方式;而单片机接收键盘数据时,数据线上的信号在时钟为低时已经稳定,所以这部分程序采用中断方式,且不需要在程序中加入延时程序. 单片机向PS/2键盘发送数据程序代码为:void ps2_sentchar(unsigned char sentchar){//ps2主设备向从设备发送数据 unsigned char sentbit_cnt= 0x00; unsigned char sentchar_chk = 0x00; EX0=0; //关外部中断0 //发起一个传送,发起始位PS2_SGN_CLOCK = 0; //将时钟线拉低并保持100 us delay100us();PS2_SGN_DATA= 0; //起始位 PS2_SGN_CLOCK = 1; //发送DATA0-7for(sentbit_cnt=0;sentbit_cnt< 8;sentbit_cnt++){ while(PS2_SGN_CLOCK) _nop_(); //等待时钟线变为低 PS2_SGN_DATA = sentchar& 0x01;//发送数据 if(PS2_SGN_DATA) sentchar_chk++; //计算校验 while(!PS2_SGN_CL0CK) _nop_(); //等待时钟线变高 sentchar>>=1; //待发送数据右移一位 }//发送校验位while(PS2_SGN_CLOCK) _nop_(); //等待时钟线变低switch(sentchar_chk){ case 0: case 2: case 4:case 6:PS2_SGN_DATA =1;break;//奇校验 case 1: case 3: case 5:case 7:PS2_SGN_DATA = 0;break;//奇校验 default;break; )while(!PS2_SGN_CLOCK) _nop_(); //等待时钟线变高 while(PS2_SGN_CLOCK) _nop_(); //等待时钟线变低 PS2_SGN_DATA =1;//发送停止位,停止位总为1while(!PS2_SGN_CLOCK) _nop_(); //等待时钟线变高 while(PS2_SGN_CLOCK) _nop_(); //等待时钟线变低 //接收ACK//if(PS2_SGN_DATA) error(); //ACK信号由键盘发出,总为低电平while(!PS2_SGN_CLOCK) _nop_(); //等待时钟线变高 EX0= 1; //开外部中断0 }单片机由PS/2键盘接收数据程序:外部中断0设置为下降沿触发 void int0() interrupt 0 using 0 {// EX0=0; //关外部中断0 switch(ps2_revchar_cnt){ case 1: ……case 8:mcu_revchar<<=1;if(PS2_SGN_DATA) mcu_revchar |= 0x01; ps2_revchar_cnt++; break;case 0:ps2_revchar_cnt++;break; //开始位,case 9:ps2_revchar_cnt++;break; //校验位,可添加校验程序 case 10: _nop_();//停止位 ps2_revchar_cnt= 0;revchar_flag=1;//置接收到数据标识位 break;default:break; }EX0=1;//开外部中断0 }4.2 键盘扫描码转换程序设计由于键盘扫描码无规律可循,因此由键盘扫描码获得相应按键的键值(字符键为其ASCII值,控制键如F1,Ctrl等为自定义值),只能通过查表的方式获得.由于按键的3种类型及部分按键对应着两个键值(如A键的键值根据Caps和Shift键状态有0x41(A)和0x61(a)两种),因此综合考虑查表转换速度和资源消耗,设计中使用4个键盘表:键盘扫描码转换基本集和切换集(kb_plain_map[NR_KEYS]与kb_shift_map[NR_KEYS]);包含E0前缀的键盘扫描码转换基本集和切换集(kbeO_plain_map[NR_KEYS]与kbe0_shiftmap[NR_KEYS]).PS/2 104键盘按键扫描码最大值为0x83,所以设置NR_KEYS为132.所有4个键盘表的定义均为如下形式:KB_MAP[MAKE CODE]=KEYVAL,如果扫描码对应的按键为空(如KB_MAP[0x00]),则定义相应键值为NULL_KEY(0x00).以下是键盘扫描码基本集的部分代码实例: kb_plain_map[NR_KEYS]={……NULL_KEY;0x2C;0x6B;0x69;0x6F;0x30;0x39; NULL_KEY; //扫描码0x40~0x47 //对应按键空,逗号,K,I,O,0,9,空//对应键值0x00,',','k','i','o','O','9',0x00…… };如此设计键盘转换表的另一个好处在于,以后如需扩展支持有ACPI、Windows多媒体按键键盘时,只需要将键表中相应处修改即可,如ACPIPower按键通码为0xE0 0x37,修改kbe0_plain_map[0x37]=KB_ACPI_PWR即可. 特殊按键Pause使用单独程序处理,如果接收到0xE1就转入这段程序.而Print Screen 键则将其看作是两个通码分别为0xE0 0x12和0xE0 0x7C的“虚键”的组合键处理.在驱动程序中设定如下全局变量:led_status记录Scroll Lock Led,Num Lock Led和Caps Lock Led的状态(关为0,开为1);agcs_status记录左右Shift Ctrl Gui Alt状态,相应键按下则对应位为1,释放为0.E0_FLAG接到0xE0置1;E1_FLAG接收到0xE1置1;F0_FLAG接收到0xF0置1.按键键值通过KeyVal提供上层程序使用.PS/2键盘扫描码键值转换程序ps2_codetrans()流程框架如图5所示.第1类按键的扫描码键值转换程序代码。
PS2键盘接口协议
PS2键盘接口协议2009-06-03 16:11一.电气特性PS/2 键盘接口为 6 针母插,外观为:上图为接口底座引脚图1DATA Key Data2n/c Not connected3GND Gnd4VCC Power , +5 VDC5CLK Clock6n/c Not connected二.数据格式1个起始位总是逻辑08个数据位(LSB)低位在前1个奇偶校验位奇校验1个停止位总是逻辑11个应答位仅用在主机对设备的通讯中表中,如果数据位中1的个数为偶数,校验位就为1;如果数据位中1的个数为奇数,校验位就为0;总之,数据位中1的个数加上校验位中1的个数总为奇数,因此总进行奇校验。
ps2设备的clock和data都是集电极开路的,平时都是高电平。
当ps2设备等待发送数据时,它首先检查clock是否为高。
如果为低,则认为PC抑制了通讯,此时它缓冲数据直到获得总线的控制权。
如果clock为高电平,ps2则开始向PC发送数据。
一般都是由ps2设备产生时钟信号。
发送按帧格式。
数据位在clock为高电平时准备好,在clock下降沿被PC读入。
数据从键盘/鼠标发送到主机或从主机发送到键盘/鼠标,时钟都是PS2设备产生.主机对时钟控制有优先权,即主机想发送控制指令给PS2设备时,可以拉低时钟线至少100μS,然后再下拉数据线,最后释放时钟线为高。
PS2设备的时钟线和数据线都是集电极开路的,容易实现拉低电平。
PC在时钟的下降沿读取数据.PS: ps2协议是现在大多数鼠标,键盘与PC通讯的标准协议,鼠标的通讯更为简单些,只是传送的数据内容不一样而已。
三.数据发送时序键盘接口时序(a) 键盘发送时序;(b) 键盘接收时序从PS/2向PC机发送一个字节可按照下面的步骤进行:(1)检测时钟线电平,如果时钟线为低,则延时50μs;(2)检测判断时钟信号是否为高,为高,则向下执行,为低,则转到(1);(3)检测数据线是否为高,如果为高则继续执行,如果为低,则放弃发送(此时PC机在向PS/2设备发送数据,所以PS/2设备要转移到接收程序处接收数据);(4)延时20μs(如果此时正在发送起始位,则应延时40μs);(5)输出起始位(0)到数据线上。
PS-2接口协议
void send(uchar x) /* function for send a char data*/ {
uchar i,temp,char_temp; bit flag_check =1; INHIBIT =1; //disable standard keyboard delay_ms(3); temp = x; for( i=0; i<8; i++) //find the number of 1 in this uchar x is odd or not {
; } CLK =1; DATA =1; //send 1 to P1 then read P1 if(CLK ==1) {
delay_us(30); }
if(CLK==1 && DATA==1) //send data {
DATA =0; //start bit 0 delay_us(10); CLK =0; delay_us(5); temp =x; for(i=0;i<8;i++) //send 8 bits LSB first {
delay_us(5); DATA = flag_check; delay_us(10); CLK = 0; delay_us(5); CLK =1; //send stop bit delay_us(5); DATA =1; dalay_us(10); CLK = 0; delay_us(5); CLK =1; delay_us(30); CLK =1; DATA =1 ; //send 1 to P1 then read P1 if(CLK ==1 && DATA == 0) {
ps/2 接口硬件 2.1 物理连接器 一般,具有五脚连接器的键盘称之为 AT 键盘,而具有六脚 mini-DIN 连接器的键盘则称之为 ps/2 键盘。其实这两种连接器都只 有四个脚有意义。它们分别是 Clock(时钟脚)、DATA(数据脚)、+5V(电源脚)和 Ground(电源地)。在 ps/2 键盘与 pc 机的物理连 接上只要保证这四根线一一对应就可以了。ps/2 键盘靠 pc 的 ps/2 端口提供+5V 电源,另外两个脚 Clock(时钟脚)和 DATA(数据 脚)都是集电极开路的,所以必须接大阻值的上拉电阻。它们平时保持高电平,有输出时才被拉到低电平,之后自动上浮到高电 平。现在比较常用的连接器如图 1 所示。 2.2 电气特性
ps2键盘协议_资料
键盘接口时序(a) 键盘发送时序;(b) 键盘接收时序从PS/2向PC机发送一个字节可按照下面的步骤进行:(1)检测时钟线电平,如果时钟线为低,则延时50μs;(2)检测判断时钟信号是否为高,为高,则向下执行,为低,则转到(1);(3)检测数据线是否为高,如果为高则继续执行,如果为低,则放弃发送(此时PC机在向PS/2设备发送数据,所以PS/2设备要转移到接收程序处接收数据);(4)延时20μs(如果此时正在发送起始位,则应延时40μs);(5)输出起始位(0)到数据线上。
这里要注意的是:在送出每一位后都要检测时钟线,以确保PC机没有抑制PS/2设备,如果有则中止发送;(6)输出8个数据位到数据线上;(7)输出校验位;(8)输出停止位(1);(9)延时30μs(如果在发送停止位时释放时钟信号则应延时50μs);通过以下步骤可发送单个位:(1)准备数据位(将需要发送的数据位放到数据线上);(2)延时20μs;(3)把时钟线拉低;(4)延时40μs;(5)释放时钟线;(6)延时20μs。
PS/2设备从PC机接收一个字节由于PS/2设备能提供串行同步时钟,因此,如果PC机发送数据,则PC机要先把时钟线和数据线置为请求发送的状态。
PC机通过下拉时钟线大于100μs来抑制通讯,并且通过下拉数据线发出请求发送数据的信号,然后释放时钟。
当PS/2设备检测到需要接收的数据时,它会产生时钟信号并记录下面8个数据位和一个停止位。
主机此时在时钟线变为低时准备数据到数据线,并在时钟上升沿锁存数据。
而PS/2设备则要配合PC机才能读到准确的数据。
具体连接步骤如下:(1)等待时钟线为高电平。
(2)判断数据线是否为低,为高则错误退出,否则继续执行。
(3)读地址线上的数据内容,共8个bit,每读完一个位,都应检测时钟线是否被PC机拉低,如果被拉低则要中止接收。
(4)读地址线上的校验位内容,1个bit。
(5)读停止位。
(6)如果数据线上为0(即还是低电平),PS/2设备继续产生时钟,直到接收到1且产生出错信号为止(因为停止位是1,如果PS/2设备没有读到停止位,则表明此次传输出错)。
键盘扫描码
键盘扫描码这里罗列了键盘上各键的扫描码,还有ALT 、CTR 、SHIFT 与部分键的组合扫描码。
这对于编写需要键盘处理的程序应该有所帮助! #define KEY_L1 0x4F #define KEY_L2 0x50 #define KEY_L3 0x51 #define KEY_L4 0x4B #define KEY_L6 0x4D #define KEY_L7 0x47 #define KEY_L8 0x48 #define KEY_L9 0x49 #define KEY_ADD 0x2B #define KEY_SUB 0x2D #define KEY_LEFT 75 #define KEY_RIGHT 77#define KEY_UP 72 #define KEY_DOWN 80 #define KEY_F1 59 #define KEY_F2 60 #define KEY_F3 61 #define KEY_F4 62 #define KEY_F5 63 #define KEY_F6 64 #define KEY_F7 65 #define KEY_F8 66 #define KEY_F9 67 #define KEY_F10 68 #define KEY_INSERT 82 #define KEY_HOME 71 #define KEY_PAGEUP 73 #define KEY_PAGEDOWN 81#define KEY_DEL 83 #define KEY_END 79 #define KEY_DASH 12 #define KEY_EQUAL 13 #define KEY_LBRACKET 26 #define KEY_RBRACKET 27 #define KEY_SEMICOLON 39#define KEY_RQUOTE 40#define KEY_LQUOTE 41 #define KEY_PERIOD 52#define KEY_COMMA 51#define KEY_SLASH 53#define KEY_BACKSLASH 43 #define KEY_ENTER 28 #define KEY_BACKSPACE 14 #define KEY_SPACE 57 #define KEY_TAB 15 #define KEY_ESC 1 #define KEY_Q 16 #define KEY_W 17 #define KEY_E 18 #define KEY_R 19 #define KEY_T 20 #define KEY_Y 21 #define KEY_U 22 #define KEY_I 23 #define KEY_O 24 #define KEY_P 25h tt p://h i.ba i d u.c o m /ba ll 648500361#define KEY_A 30 #define KEY_S 31 #define KEY_D 32 #define KEY_F 33 #define KEY_G 34 #define KEY_H 35 #define KEY_J 36 #define KEY_K 37 #define KEY_L 38 #define KEY_Z 44 #define KEY_X 45 #define KEY_C 46 #define KEY_V 47#define KEY_B 48 #define KEY_N 49 #define KEY_M 50 #define KEY_1 2 #define KEY_2 3 #define KEY_3 4 #define KEY_4 5 #define KEY_5 6 #define KEY_6 7#define KEY_7 8#define KEY_8 9#define KEY_9 10 #define KEY_0 11/+++++++++++++++++++++++++CTR+各键扫描码+++++++++++++++++++++++++/#define KEY_F1 0x5E #define KEY_F2 0x5F #define KEY_F3 0x60 #define KEY_F4 0x61 #define KEY_F5 0x62#define KEY_F6 0x63 #define KEY_F7 0x64 #define KEY_F8 0x65 #define KEY_F9 0x66#define KEY_F10 0x67 #define KEY_2 0x03 #define KEY_6 0x1E #define KEY_Q 0x11 #define KEY_W 0x17 #define KEY_E 0x05#define KEY_R 0x12 #define KEY_T 0x14 #define KEY_Y 0x19 #define KEY_U 0x15 #define KEY_I 0x09 #define KEY_O 0x0F #define KEY_P 0x10#define KEY_LBRACKET 0x1B #define KEY_RBRACKET 0x1D #define KEY_A 0x01 #define KEY_S 0x13 #define KEY_D 0x04 #define KEY_F 0x06 #define KEY_G 0x07 #define KEY_H 0x08h tt p://h i .ba i d u .c o m /ba ll 648500361#define KEY_J 0x0A #define KEY_K 0x0B #define KEY_L 0x0C #define KEY_Z 0x1A #define KEY_X 0x18 #define KEY_C 0x03 #define KEY_V 0x16 #define KEY_B 0x02 #define KEY_N 0x0E #define KEY_M 0x0D#define KEY_SPACE 0x20 #define KEY_BACKSPACE 0x7F #define KEY_ENTER 0x0A #define KEY_BACKSLASH 0x1C #define KEY_L1 0x75 #define KEY_L3 0x76 #define KEY_L4 0x73 #define KEY_L6 0x74 #define KEY_L7 0x77#define KEY_L9 0x84/+++++++++++++++++++++++++SHIFT+各键扫描码+++++++++++++++++++++++++/#define KEY_LQUOTE 0x7E#define KEY_1 0x21 #define KEY_2 0x40 #define KEY_3 0x23 #define KEY_4 0x24 #define KEY_5 0x25 #define KEY_6 0x5E #define KEY_7 0x26#define KEY_8 0x2A #define KEY_9 0x28 #define KEY_0 0x29 #define KEY_DASH 0x5F #define KEY_EQUAL 0x2B #define KEY_BACKSPACE 0x08 #define KEY_Q 0x51 #define KEY_W 0x57 #define KEY_E 0x45#define KEY_R 0x52#define KEY_T 0x54#define KEY_Y 0x59 #define KEY_U 0x55 #define KEY_I 0x49 #define KEY_O 0x4F #define KEY_P 0x50#define KEY_LBRACKET 0x7B #define KEY_RBRACKET 0x7D #define KEY_ENTER 0x0D #define KEY_A 0x41 #define KEY_S 0x53 #define KEY_D 0x44 #define KEY_F 0x46 #define KEY_G 0x47 #define KEY_H 0x48 #define KEY_J 0x4Ah tt p://h i.b a i d u .c o m /ba ll 648500361。
PC键盘扫描码
O:就是利用bioskey()得到的值。
参数为0时,bioskey()的返回值如果低八位非0,表示按下了普通键;如果低八位为0,表示按下了功能键。
参数为1时,检测有没有键被按下,如果返回值为0,表示没有键按下,相反有键按下。
参数为2时,表示获取变换键的状态,哪些是变换键呢?变换键包括双态键和控制键,双态键就是num lock、scroll lock、insert和caps lock,控制键就是左右shift、ctrl和alt,返回值的低八位反映了这些变换键的状态:0x01 右边shift0x10 scroll lock打开0x02 左边shift0x20 num lock打开0x04 ctrl键0x40 caps lock打开0x08 alt键0x80 insert打开其实bioskey直接调用bios的int 16h键盘I/O中断,直接就是int 16h 的完整翻版。
键盘扫描码大全对程序进行键盘控制时,往往要用到一些键的扫描码,以前每次用时都得先扫下试试,实在麻烦,今天又搞了个小程序,用到了扫描码,索性整了个测试程序,把所有键的扫描码全存入一个文件啦,以便以后编程时使用.在此跟大家分享一下,虽然得来非常容易,但至少可以免得大家都像我以前那样用时再查扫描码键0x011b ----- ESC0x3b00 ----- F1 0x3c00 ----- F20x3d00 ----- F30x3e00 ----- F40x3f00 ----- F50x4000 ----- F60x4100 ----- F70x4200 ----- F80x4300 ----- F90x4400 ----- F10主键盘区:0x2960 ----- ~0x0231 ----- 10x0332 ----- 20x0433 ----- 30x0534 ----- 40x0635 ----- 50x0736 ----- 60x0837 ----- 70x0938 ----- 80x0a39 ----- 90x0b30 ----- 00x0c2d ----- -0x0d3d ----- =0x2b5c ----- \0x0e08 ----- 退格键0x0f09 ----- Tab0x1071 ----- q0x1177 w0x1265 e0x1372 r0x1474 t0x1579 y0x1675 u0x1769 i0x186f o0x1970 p0x1a5b [0x1b5d ]0x1e61 a0x1f73 s0x2064 d0x2166 f0x2267 g0x2368 h0x246a j0x256b k0x266c l0x273b0x2827 '0x1c0d 回车0x2c7a z0x2d78 x0x2e63 c0x2f76 v0x3062 b0x316e n0x326d m0x332c ,0x342e .0x352f /0x3920 空格键右边数字键盘:0x5200 Insert0x4700 Home0x4900 Page UP0x5300 Delete0x4f00 End0x5100 PageDown0x4800 上箭头0x4b00 左箭头0x5000 下箭头0x4d00 右箭头0x352f /0x372a *0x4a2d - (注意,这是数字键盘的) 0x4737 70x4838 80x4939 90x4b34 40x4c35 50x4d36 60x4e2b +0x4f31 10x5032 20x5133 30x5230 00x532e DelCtrl+字母:在字母扫描码的基础上减去0x0060alt+字母: 在字母的基础上,把最后两位变成00shift+字母:在字母的基础上减去0x0020比如: a----0x1e61 Ctrl+a----0x1e01 Alt+a-----0x1e00b----0x3062 Ctrl+b----0x3002 Alt+b-----0x3000另加: Ctrl+Enter: 0x1c0a可以直接用一个程序查看的,很简单的#include “stdio.h”#include “bios.h”void main(void){int key, modifiers;while ((key=bioskey(0)) != 0 && key!=0x11b){printf("0x%x \n",key);}}*********************************************************** ********************上面列出的编码中,前面两位是“扫描码”,后面两位是ASCII码,合起来是所谓的“键盘码”比如,小键盘的数字键扫描码和大键盘的数字键是不同的,而后两位是一样的,因为那个是它们共用的ASCII码,下面就是扫描码的列表Keyboard Scan Codes (Numerical Order)---------------+---------------+---------------+---------------+---------------HEX DEC keys |HEX DEC keys |HEX DEC keys |HEX DEC keys |HEX DEC keys---------------+---------------+---------------+---------------+---------------|10 16 Q |20 32 D |30 48 B|40 64 F601 1 ESC |11 17 W |21 33 F |31 49 N |41 65 F702 2 1 |12 18 E |22 34 G |32 50 M |42 66 F803 3 2 |13 19 R |23 35 H |33 51 , |43 67 F904 4 3 |14 20 T |24 36 J |34 52 . |44 68 F1005 5 4 |15 21 Y |25 37 K |35 53 / |45 69 Num06 6 5 |16 22 U |26 38 L |36 54 R Shift |46 70 Scroll07 7 6 |17 23 I |27 39 |37 55 PrtSc |47 71 Home08 8 7 |18 24 O |28 40 ' |38 56 Alt |48 72 Up09 9 8 |19 25 P |29 41 ` |39 57 Space |49 73 PgUp0A 10 9 |1A 26 [ |2A 42 L Shift |3A 58 Caps |4A 74 -0B 11 0 |1B 27 ] |2B 43 \ |3B 59 F1 |4B 75 Left0C 12 - |1C 28 |2C 44 Z |3C 60 F2 |4C 76 Center0D 13 = |1D 29 CTRL |2D 45 X |3D 61 F3 |4D 77 Right0E 14 bs |1E 30 A |2E 46 C |3E 62 F4 |4E 78 +0F 15 Tab |1F 31 S |2F 47 V |3F 63 F5 |4F 79 End---------------+---------------+---------------+---------------+---------------50 80 Down | | | |51 81 PgDn | | | |52 82 Ins | | | |53 83 Del | | | |---------------+---------------+---------------+---------------+---------------Keyboard Scan Codes (Read from Port HEX 60 = DEC 96) (Keyboard Layout)Top number ... DECBottom number ... HEX+--+--+---+---+---+---+---+---+---+---+---+---+---+---+---+---+-------+-------+|F1|F2|ESC| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = |BkS|Num Lok|Scr Lok|| | | | | | | | | | | | | | | | | | ||59|60| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |10 |11 |12 |13 |14 | 69 | 70 ||3B|3C|01 |02 |03 |04 |05 |06 |07 |08 |09 |0A |0B |0C |0D |0E | 45 | 46 |+--+--+---+---+---+---+---+---+---+---+---+---+---+---+---+---+-------+-------+|F3|F4|TAB| Q | W | E | R | T | Y | U | I | O | P | [ | ] | | 7 3 8 | 9 3 - || | | | | | | | | | | | | | | | | 3 | 3 ||61|62|15 |16 |17 |18 |19 |20 |21 |22 |23 |24 |25 |26 |27 | |71 372 |73 374 | |3D|3E|0F |10 |11 |12 |13 |14 |15 |16 |17 |18 |19 |1A |1B | |47 348 |49 34A | +--+--+---+---+---+---+---+---+---+---+---+---+---+---+---+---+-------+-------+|F5|F6|CTR| A | S | D | F | G | H | J | K | L | | ' | ` |28 | 4 3 5 | 6 3 || | | | | | | | | | | | | | | | | 3 | 3 ||63|64|29 |30 |31 |32 |33 |34 |35 |36 |37 |38 |39 |40 |41 | |75 376 |77 3 | |3F|40|1D |1E |1F |20 |21 |22 |23 |24 |25 |26 |27 |28 |29 | |4B 34C |4D 3 | +--+--+---+---+---+---+---+---+---+---+---+---+---+---+---+---+-------+-------+|F7|F8|Shf| \ | Z | X | C | V | B | N | M | , | . | / |Shf|Prt| 1 3 2 | 3 3 + || | | | | | | | | | | | | | | | | 3 | 3 ||65|66|42 |43 |44 |45 |46 |47 |48 |49 |50 |51 |52 |53 |54 |55 |78 380 |81 378 | |41|42|2A |2B |2C |2D |2E |2F |30 |31 |32 |33 |34 |35 |36 |37 |4F 350 |51 34E | +--+--+---+---+---+---+---+---+---+---+---+---+---+---+---+---+-------+-------+|F9|F0| A|t | | | | |pac| | | | |Cap|Lok| I|s 3 D|l 3 || | | | | | | | | | | | | | | | | 3 | 3 ||67|68| 5| | | | | |57 | | | | | 5| | 8| 3 8| 3 ||43|44| 3| | | | | |39 | | | | | 3| | 5| 3 5| 3 |+--+--+---+---+---+---+---+---+---+---+---+---+---+---+---+---+-------+-------+Extended ASCII Special Key Codes (Numerical Order)... composed of 2 bytes, the 2nd byte being 00 (00 signifies that the speci al codesare to be applied.)HEX DEC keys--------------------------------------03 3 CTRL-2; same as CHR$(0)0F 15 Shift-tab10 16 Alt-Q11 17 Alt-W12 18 Alt-E13 19 Alt-R14 20 Alt-T15 21 Alt-Y16 22 Alt-U17 23 Alt-I18 24 Alt-O19 25 Alt-P 1E 30 Alt-A 1F 31 Alt-S20 32 Alt-D21 33 Alt-F22 34 Alt-G23 35 Alt-H24 36 Alt-J25 37 Alt-K26 38 Alt-L 2C 44 Alt-Z 2D 45 Alt-X 2E 46 Alt-C 2F 47 Alt-V30 48 Alt-B31 49 Alt-N32 50 Alt-M 3B 59 F13C 60 F23D 61 F3-------------------------------------- 3E 62 F43F 63 F540 64 F641 65 F742 66 F843 67 F944 68 F1047 71 Home48 72 Up49 73 PgUp4B 75 Left4D 77 Right4F 79 End50 80 Down51 81 PgDn52 82 Ins53 83 Del54 84 Shift-F155 85 Shift-F256 86 Shift-F357 87 Shift-F458 88 Shift-F559 89 Shift-F6 5A 90 Shift-F7 5B 91 Shift-F8 5C 92 Shift-F9 5D 93 Shift-F10 5E 94 Ctrl-F1 5F 95 Ctrl-F260 96 Ctrl-F361 97 Ctrl-F462 98 Ctrl-F563 99 Ctrl-F664 100 Ctrl-F765 101 Ctrl-F866 102 Ctrl-F967 103 Ctrl-F1068 104 Alt-F169 105 Alt-F2 6A 106 Alt-F3 6B 107 Alt-F46D 109 Alt-F66E 110 Alt-F76F 111 Alt-F870 112 Alt-F971 113 Alt-F1072 114 Ctrl-PrtSc73 115 Ctrl-Left74 116 Ctrl-Right75 117 Ctrl-End76 118 Ctrl-PgDn77 119 Ctrl-Home78 120 Alt-179 121 Alt-27A 122 Alt-37B 123 Alt-47C 124 Alt-57D 125 Alt-67E 126 Alt-77F 127 Alt-880 128 Alt-981 129 Alt-083 131 Alt-=84 132 Ctrl-PgUp85 133 Ctrl-Up86 134 Ctrl--(num)87 135 Ctrl-Center88 136 Ctrl-+(num)89 137 Ctrl-Down 8A 138 Ctrl-Ins8B 139 Ctrl-Del8C 140 Alt-Home 8D 141 Alt-Up8E 142 Alt-PgUp 8F 143 Alt--(num)90 144 Alt-Left91 145 Alt-Center92 146 Alt-Right93 147 Alt-+(num)94 148 Alt-End95 149 Alt-Down96 150 Alt-PgDn97 151 Alt-InsExtended ASCII Special Key Codes (Keyboard Layout)------------------+-------------------+-------------------+--------------------HEX DEC keys | HEX DEC keys | HEX DEC keys | HEX DEC keys ------------------+-------------------+-------------------+--------------------03 3 nul | 0F 15 Shift-tab | 72 114 Ctrl-PrtSc|------------------+-------------------+-------------------+--------------------47 71 Home | | 77 119 Ctrl-Home | 8C 140 Alt-Home48 72 Up | | 85 133 Ctrl-Up | 8D 141 Alt-Up49 73 PgUp | | 84 132 Ctrl-PgUp | 8E 142 Alt-PgUp 4A 74 -(num) | | 86 134 Ctrl--(nu)| 8F 143 Alt--(num) 4B 75 Left | | 73 115 Ctrl-Left | 90 144 Alt-Left4C 76 Center | | 87 135 Ctrl-Centr| 91 145 Alt-Center 4D 77 Right | | 74 116 Ctrl-Right| 92 146 Alt-Right4E 78 +(num) | | 88 136 Ctrl-+(nu)| 93 147 Alt-+(num) 4F 79 End | | 75 117 Ctrl-End | 94 148 Alt-End50 80 Down | | 89 137 Ctrl-Down | 95 149 Alt-Down51 81 PgDn | | 76 118 Ctrl-PgDn | 96 150 Alt-PgDn52 82 Ins | | 8A 138 Ctrl-Ins | 97 151 Alt-Ins53 83 Del | | 8B 139 Ctrl-Del | 98 152 Alt-Del------------------+-------------------+-------------------+--------------------3B 59 F1 | 54 84 Shift-F1 | 5E 94 Ctrl-F1 | 68 104 Alt-F13C 60 F2 | 55 85 Shift-F2 | 5F 95 Ctrl-F2 | 69 105 Alt-F23D 61 F3 | 56 86 Shift-F3 | 60 96 Ctrl-F3 | 6A 106 Alt-F33E 62 F4 | 57 87 Shift-F4 | 61 97 Ctrl-F4 | 6B 107 Alt-F43F 63 F5 | 58 88 Shift-F5 | 62 98 Ctrl-F5 | 6C 108 Alt-F540 64 F6 | 59 89 Shift-F6 | 63 99 Ctrl-F6 | 6D 109 Alt-F641 65 F7 | 5A 90 Shift-F7 | 64 100 Ctrl-F7 | 6E 110 Alt-F742 66 F8 | 5B 91 Shift-F8 | 65 101 Ctrl-F8 | 6F 111 Alt-F843 67 F9 | 5C 92 Shift-F9 | 66 102 Ctrl-F9 | 70 112 Alt-F944 68 F10 | 5D 93 Shift-F10 | 67 103 Ctrl-F10 | 71 113 Alt-F10 ------------------+-------------------+-------------------+--------------------1E 30 Alt-A | 31 49 Alt-N | 78 120 Alt-1 |30 48 Alt-B | 18 24 Alt-O | 79 121 Alt-2 |2E 46 Alt-C | 19 25 Alt-P | 7A 122 Alt-3 |20 32 Alt-D | 10 16 Alt-Q | 7B 123 Alt-4 |12 18 Alt-E | 13 19 Alt-R | 7C 124 Alt-5 |21 33 Alt-F | 1F 31 Alt-S | 7D 125 Alt-6 |22 34 Alt-G | 14 20 Alt-T | 7E 126 Alt-7 |23 35 Alt-H | 16 22 Alt-U | 7F 127 Alt-8 |17 23 Alt-I | 2F 47 Alt-V | 80 128 Alt-9 |24 36 Alt-J | 11 17 Alt-W | 81 129 Alt-0 |25 37 Alt-K | 2D 45 Alt-X | 82 130 Alt-- |26 38 Alt-L | 15 21 Alt-Y | 83 131 Alt-= |32 50 Alt-M | 2C 44 Alt-Z | |------------------+-------------------+-------------------+--------------------。
表二101、102、104键键盘(第二套扫描码集)
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
表二101、102、104键键盘(第二套扫描码集):
键 名
通 码
断 码
-
键 名
通 码
断 码
-
键 名
通 码
断 码
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
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
各种USB引脚定义
USB 是Universal Serial Bus 的缩写,由Compaq, Digital, IBM, Intel, Microsoft, NEC, Northern Telecom 联合推出。
外观上计算机一侧为4 针公插,设备一侧为 4 针母插。
usb引脚定义Pin Name Description1VCC+5 VDC2D-Data -3D+Data +4GND Ground一般而言:红(Vcc),白(D-),绿(D+),黑(GND)mini usb引脚定义引脚功能颜色备注1 V BUS 红电源+5V2 DATA- 白数据-3 DATA+ 绿数据+A型:与地相连4 IDB型:不接地(空)5 GND 黑地其中ID脚在OTG功能中才使用。
由于Mini-USB接口分Mini-A、B和AB接口。
如果你的系统仅仅是用做Slave,那么就使用B接口。
系统控制器会判断ID脚的电平判断是什么样的设备插入,如果是高电平,则是B接头插入,此时系统就做主模式(master mode) 如果ID为低,则是A接口插入,然后系统就会使用HNP对话协议来决定哪个做Master,哪个做Slave。
从左往右依次为:miniUSB公口(A型插头)、miniUSB公口(B型插头)、USB公口(B型)、USB母口(A型插座)、USB公口(A型插头) PC 并行接口外观是25 针母插座:引脚定义Pin Name Dir Description1/STROBE Strobe2D0Data Bit 03D1Data Bit 14D2Data Bit 25D3Data Bit 36D4Data Bit 47D5Data Bit 58D6Data Bit 69D7Data Bit 710/ACK Acknowledge11BUSY Busy12PE Paper End13SEL Select14/AUTOFD Autofeed15/ERROR Error16/INIT Initialize17/SELIN Select In18GND Signal Ground19GND Signal Ground20GND Signal Ground21GND Signal Ground22GND Signal Ground23GND Signal Ground24GND Signal Ground25GND Signal GroundECP 并行口定义ECP 是Extended Capabilities Port 的缩写,外观同并行口,是25 针母插座:引脚定义Pin Name Dir Description1nStrobe Strobe2data0Address, Data or RLE Data Bit 03data1Address, Data or RLE Data Bit 14data2Address, Data or RLE Data Bit 25data3Address, Data or RLE Data Bit 36data4Address, Data or RLE Data Bit 47data5Address, Data or RLE Data Bit 58data6Address, Data or RLE Data Bit 69data7Address, Data or RLE Data Bit 710/nAck Acknowledge11Busy Busy12PError Paper End13Select Select14/nAutoFd Autofeed15/nFault Error16/nInit Initialize17/nSelectIn Select In18GND Signal Ground19GND Signal Ground20GND Signal Ground21GND Signal Ground22GND Signal Ground23GND Signal Ground24GND Signal Ground25GND Signal GroundIDE 是Integrated Drive Electronics 的缩写,由Compaq 和Western Digital 公司开发,新版的IDE 命名为ATA 即AT bus Attachment,IDE 接口在设备和主板侧的外观为40 脚插针:IDE 电缆外观为:引脚定义Pin Name Dir Description1/RESET Reset2GND Ground3DD7Data 74DD8Data 85DD6Data 66DD9Data 97DD5Data 58DD10Data 109DD4Data 410DD11Data 1111DD3Data 312DD12Data 1213DD2Data 214DD13Data 1315DD1Data 116DD14Data 1417DD0Data 018DD15Data 1519GND Ground20KEY-Key21n/c-Not connected 22GND Ground23/IOW Write Strobe24GND Ground25/IOR Read Strobe26GND Ground27IO_CH_RDY28ALE Address Latch Enable29n/c-Not connected30GND Ground31IRQR Interrupt Request32/IOCS16?IO ChipSelect 1633DA1Address 134n/c-Not connected35DA0Address 036DA2Address 237/IDE_CS0(1F0-1F7)38/IDE_CS1(3F6-3F7)39/ACTIVE Led driver40GND GroundPS/2 PC键盘编程的参考资料一.电气特性1DATA Key Data2n/c Not connected3GND Gnd4VCC Power , +5 VDC5CLK Clock6n/c Not connected二.数据格式1个起始位总是逻辑08个数据位(LSB)低位在前1个奇偶校验位奇校验1个停止位总是逻辑11个应答位仅用在主机对设备的通讯中表中,如果数据位中1的个数为偶数,校验位就为1;如果数据位中1的个数为奇数,校验位就为0;总之,数据位中1的个数加上校验位中1的个数总为奇数,因此总进行奇校验。
PS_2键盘接口电路设计论文
课程设计(报告)任务书(理工科类)Ⅰ、课程设计(报告)题目:PS/2接口键盘的输入识别电路设计Ⅱ、课程设计(论文)工作内容一、课程设计目标《硬件描述语言》是一门技术性、应用性很强的学科,实验课教学是它的一个极为重要的环节。
不论理论学习还是实际应用,都离不开实验课教学。
如果不在切实认真地抓好学生的实践技能的锻炼上下功夫,单凭课堂理论课学习,势必出现理论与实践脱节、学习与应用脱节的局面。
《HDL项目设计》的目的就是让同学们在理论学习的基础上,通过完成一个涉及时序逻辑、组合逻辑、声光输出的,具有实用性、趣味性的小系统设计,使学生不但能够将课堂上学到的理论知识与实际应用结合起来,而且能够对分析、解决实际的数字电路问题进一步加深认识,为今后能够独立进行某些数字应用系统的开发设计工作打下一定的基础。
二、研究方法及手段应用1、将任务分成若干模块,查阅相关论文资料,分模块调试和完成任务;2、使用Verilog HDL语言编写程序;3、使用Modesim6.0和Quartus II软件进行仿真。
三、课程设计预期效果(1) 以通用的PS/2键盘为输入,设计一个能够识别PS/2键盘输入编码的电路,并把键值通过数码管显示;(2) 至少能够识别0~9的数字键。
学生姓名:专业年级:摘要键盘是嵌入式系统的最重要的输入设备之一,是实现人机交互的重要途径。
除了可以自行设计扫描式矩阵键盘之外,还可以选择标准PS/2键盘实现人机交互。
扫描式矩阵键盘虽然电路简单,但不具有通用性,当需要使用较多的按键输入时,则会占用较多的I/O端口,在软件上则要进行上电复位、按键扫描及通信的处理,而且还要加上按键的去抖动处理,增大了系统软、硬件的开销,开发周期较长。
标准PS/2键盘由于接口通信协议简单,在系统中占用软硬件资源少,高可靠性,表达信息量大而得到了越来越广泛的应用本设计根据PS/2键盘的通信时序,利用Verilog HDL硬件描述语言来设计PS/2接口键盘的输入识别电路,并在CPLD/FPGA上实现,避免了硬件电路的焊接与测试。
PS2接口协议和键盘扫描码
PS2接口协议1.PS/2接口标准的发展过程随着计算机工业的发展,作为计算机最常用输入设备的键盘也日新月异。
1983年IBM推出了IBM PC/XT键盘及其接口标准。
该标准定义了83键,采用5脚DIN连接器和简单的串行协议。
实际上,第一套键盘扫描码集并没有主机到键盘的命令。
为此,1984年IBM推出了IBM AT键盘接口标准。
该标准定义了84~101键,采用5脚DIN连接器和双向串行通讯协议,此协议依照第二套键盘扫描码集设有8个主机到键盘的命令。
到了1987年,IBM又推出了PS/2键盘接口标准。
该标准仍旧定义了84~101键,但是采用6脚mini-DIN连接器,该连接器在封装上更小巧,仍然用双向串行通讯协议并且提供有可选择的第三套键盘扫描码集,同时支持17个主机到键盘的命令。
现在,市面上的键盘都和PS/2及AT键盘兼容,只是功能不同而已。
2.PS/2接口硬件2.1 物理连接器一般,具有五脚连接器的键盘称之为AT键盘,而具有六脚mini-DIN连接器的键盘则称之为PS/2键盘。
其实这两种连接器都只有四个脚有意义。
它们分别是Clock(时钟脚)、Data(数据脚)、+5V(电源脚)和Ground(电源地)。
在PS/2键盘与PC机的物理连接上只要保证这四根线一一对应就可以了。
PS/2键盘靠PC的PS/2端口提供+5V电源,另外两个脚Clock(时钟脚)和Data(数据脚)都是集电极开路的,所以必须接大阻值的上拉电阻。
它们平时保持高电平,有输出时才被拉到低电平,之后自动上浮到高电平。
现在比较常用的连接器如图1所示。
2.2 电气特性PS/2通讯协议是一种双向同步串行通讯协议。
通讯的两端通过Clock(时钟脚)同步,并通过Data(数据脚)交换数据。
任何一方如果想抑制另外一方通讯时,只需要把Clock(时钟脚)拉到低电平。
如果是PC机和PS/2键盘间的通讯,则PC机必须做主机,也就是说,PC机可以抑制PS/2键盘发送数据,而PS/2键盘则不会抑制PC机发送数据。
三相整流计算
摘要:电压型变频器直流环节并入电容对整流电路的输出进行滤波,理论上电容值越大,电压纹波越小,但是从空间和成本上考虑并不能如此。
详细论述了三相输入和单相输入变频器滤波电容的计算方法,为电压型变频器不同功率的负载所需滤波电容的选择提供了理论依据。
最后通过实验证明了该算法可行、可靠,不仅保证了产品的性能,更节约了成本。
关键词:整流电路;电压型变频器:纹波0 引言虽然利用整流电路可以将交流电变换成直流电,但是在三相电路中这种直流电压或电流含有频率为电源频率6倍的电压或电流纹波。
此外,变频器逆变电路也将因输出和载波频率等原因而产生纹波电压或电流,并反过来影响直流电压或电流的品质。
因此,为了保证逆变电路和控制电路能够得到高质量的直流电压或电流,必须对直流电压或电流进行滤波,以减少电压或电流的脉动。
直流环节是指插在直流电源和逆变电路之间的滤波电路,其结构的差异将对变换器的性能产生不同的影响:凡是采用电感式结构,其输入电流纹波较小,类似电流源性质;凡是采用电容式结构,其输入端电压纹波较小,类似电压源性质。
对电压型变频器米说,整流电路的输出为直流电压,直流中间电路则通过大电解电容对该电压进行滤波;而对于电流型变频器米说,整流电路的输出为直流电流,中间电路则通过大电感对该电流进行滤波。
l 三相变频器直流中间电路电解电容的计算1.1 变频器及直流中间电路结构框图变频器及直流中间电路结构图如图1所示。
三相输入及整流后的电压波形三相输入线电压220V及整流后的电压波形如图2所示。
图2中,Ua、Ub、Uc是三相三线制的三相输入相电压;uc是电容电压,ur是整流之后未加电容时的电压。
1.3 分析过程整流后电压的计算对于三相三线制输入线电压为220V系列变频器(以下简称220V系列)来说U=220V;对于440V系列,U=440V。
1.3.2 等效电阻的计算为计算方便,对于输出功率为P的逆变器,将其直流侧输入端阻抗用一个纯电阻R等效,则电容的充放电过程分析由于整流后的直流电压有波动,假设ur的波动幅度为a%,则假设电路工作已经处于稳态,电容两端的电压如图2所示,在t2时刻,电容电压达到最大值。
Delphi下利用WinIo模拟鼠标键盘详解
[原创]Delphi下利用WinIo模拟鼠标键盘详解前言一日发现SendInput对某程序居然无效,无奈只好开始研究WinIo。
上网查了很多资料,发现关于Wi nIo模拟鼠标键盘的资料很少,有的也只是支言片语讲的不是很详细,而且大部分都是关于模拟键盘的。
自己写了一些程序研究一方,经历了无数次的键盘死锁、鼠标满屏乱飞、复位重启,总算小有结果。
现在将研究结果写出来与大家分享。
另外,本人的水平有限文中有出错的地方欢迎根贴讨论。
(PS:关于Send Input的使用可以参考我写的另一篇贴子《Delphi下利用SendInput模拟鼠标键盘》http://programbbs. com/bbs/view12-17219-1.htm)我已经将主要的模拟功能写在了一个单元文件中:MouseKeyboard.pas,调用该单元文件中的相关函数就可以实现鼠标键盘的模拟。
该单元文件的下载和使用方法请参考2楼的内容。
在本楼的末尾有一个中英文对译PS/2鼠标键盘协议的下载,这个协议对编写模拟鼠标键盘的程序很有帮助。
另外我还提供了一个鼠标移动速度测试程序、一个使用MouseKeyboard.pas的简单示范程序的下载。
一、WinIo简介WinIo通过加载一个内核模式的设备驱动程序,利用几种底层编程技巧,使得Windows应用程序可以直接对I/O端口和物理内存进行存取,从而绕过了Windows系统的保护机制。
WinIo包含了3个文件:Win Io.dll、WinIo.sys和WINIO.VXD,其中WINIO.VXD驱动程序用在Win95/98系统上,WinIo.sys驱动程序用在WinNT/2000/XP系统上,WinIo.dll提供了功能函数的调用。
在WinIo.dll中有两个函数最重要:Ini tializeWinIo用来初始化WinIo的驱动程序,必须在调用所有其它功能函数之前调用该函数;ShutdownWi nIo用来卸载WinIo的驱动程序,在中止应用函数之前或者不再需要使用WinIo时调用。