键盘扫描 分类

合集下载

键盘扫描码——精选推荐

键盘扫描码——精选推荐

键盘扫描码
键盘上除了ASCII码外,还有非ASCII码(如左移键“←”对应的编码),叫扩充键盘码。

我们把扩充键盘码放在高八位,ASC II码放在低八位所组成的代码称为扫描码。

对于某一特定的扫描码,若其低8位不为零,则此8位就是相应字符的ASCII码值;若低8位是零,则高8位是扩充键盘码,需要再读取人第二个字节,根据它的值来判断它是那一个功能键。

下表给出了单功能键和组合功能键的键值,表中代码系指第二个字节键值的十进制数。

例如,“←”的扫描码低8位应为零,而高8位是0x4b,所以,“←”键的扫描码为O x4b00;而“回车键”有对应的ASCII码,故其扫描码的低8位是回车键的ASCII码值0xod。

测试键盘扫描码
调用标准库函数b ioskey()读取键盘扫描码。

注意要使用b io skey()函数,应在文件头部加上#includ e “b ios.h”。

函数b io skey()的功能是用于识别用户按键和获得按键值。

函数原
型是:
int b ioskey(int cmd);
在<b ios.h>中定义,在使用它时,应用include命令将b ios.h文件包含进来。

其中参数cmd可取值0或1。

①当cmd=1时,检测键盘是否有击键,如果没有击键,函数将返回0,否则返回非零;
②当cmd=0时,返回从键盘输入的扫描码。

语句key=b ioskey(0);读取键盘输入的扫描码,并存储在变量k ey 中。

PC键盘第二套扫描码集

PC键盘第二套扫描码集

PC键盘第二套扫描码集编程 2008-06-01 01:17 阅读1094 评论0字号:大中小来源:/web/pckey/scancode.htmPC键盘扫描码参考资料键盘的处理器如果发现有键被按下、释放、或按住键盘不放将发送扫描码的信息包到计算机,扫描码有两种不同的类:型通码和断码,当一个键被按下或按住,就发送通码,当一个键被释放就发送断码,每个按键被分配了唯一的通码和断码,这样主机通过查找唯一的扫描码就可以测定是哪个按键,通码和断码组成了键盘的扫描码集,有三套标准的扫描码集,分别是第一套、第二套和第三套,下面给出的现在通行的第二套扫描码集。

虽然多数按键只有一个字节宽,但也有少数扩展按键的通码是两字节或四字节宽,这类按键的通码第一个字节总是为E0h。

正如键按下通码就被发往计算机一样,只要键一释放断码也会被发送到计算机,每个键都有它自己唯一的通码和断码。

幸运的是,你不用总是通过查表来确定按键的断码,在通码和断码之间存在着必然的联系,多数断码有两字节长,其第一个字节是F0h 第二个字节是这个键的通码,扩展按键的断码通常有三个字节,它们前两个字节是E0h,F0h 最后一个字节是这个按键通码的最后一个字节,下面举一个例子,先列出了几个按键的通码和断码一个按键发送的例子(以按G键为例):通码和断码是以什么样的序列发送到你的计算机,然后使得字符G出现在你的字处理软件里的呢,因为这是一个大写字母需要发生这样的事件次序:按下左Shift- 键-按下G键-释放G-键释放左Shift键,左Shift 键的通码12h,G键的通码34h G键的断码F0h 34h,左Shift键的断码F0h 12h 因此发送到你的计算机的数据应该是:12h 34h F0h 34h F0h 12h。

第二套扫描码:(实用于标准PC的101、102和104 键的键盘):ACPI 扫描码:Windows 多媒体扫描码: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 Prt Sc |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 Spa ce |49 73 PgUp0A 10 9 |1A 26 [ |2A 42 LShift|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|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 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 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-F10 5E 94 Ctrl-F15F 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-Down8A 138 Ctrl-Ins8B 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 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-PgUp4A 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-Center4D 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 | | ------------------+-------------------+-------------------+--------------------1.htm。

矩阵键盘翻转扫描

矩阵键盘翻转扫描

矩阵键盘反转扫描
扫描原理: 1、行线输出全为 0 2、
读入列线值3、列线输出上次读入的值
4、读入行线值
5、组合 2种读入值
优点:m*n个按键值需要一次反转(2次输入输出)就可以检测到结果,比行列扫描简单方
便。

详细说明:
先读行值,置P1口为0xf0,假如有按键按下(设按键9按下),P1.6(1)被P1.2(0)拉低P1不再是0xf0,而是0xb0,读出行值0xb0
再读列值,保值行值不变,列值置一。

即将上面行值0xb0与0x0f相或得到0xbf赋给P1口,由于按键9按下P1.2(置1了)被P1.6(读行值时被拉低为0)拉低为0,P1口变为0xbb,再把高位清零得到0x0b
最后将行值与列值相加得到键值0xbb.再用开关函数对照键值写出相应的操作函数。

c语言键盘扫描码大全

c语言键盘扫描码大全

c语言键盘扫描码大全对程序进行键盘控制时,往往要用到一些键的扫描码,以前每次用时都得先扫下试试,实在麻烦,今天又搞了个小程序,用到了扫描码,索性整了个测试程序,把所有键的扫描码全存入一个文件啦,以便以后编程时使用.在此跟大家分享一下,c语言键盘扫描码 扫描码键 0x011bESC 0x3b00F1 0x3c00F2 0x3d00F3 0x3e00F4 0x3f00F5 0x4000F6 0x4100F7 0x4200F8  0x4300F9  0x4400F10  主键盘区:  0x2960~  0x02311  0x03322  0x04333  0x05344  0x06355  0x07366  0x08377  0x09388 0x0a399 0x0b300 0x0c2d- 0x0d3d= 0x2b5c\ 0x0e08退格键  0x0f09Tab 0x1071q 0x1177w 0x1265e 0x1372r 0x1474t 0x1579y  0x1675u  0x1769i  0x186fo  0x1970p  0x1a5b[  0x1b5d]  0x1e61a  0x1f73s  0x2064d  0x2166f  0x2267g  0x2368h 0x246aj 0x256bk 0x266cl 0x273b; 0x2827’ 0x1c0d回车  0x2c7az 0x2d78x 0x2e63c 0x2f76v 0x3062b 0x316en 0x326dm 0x332c, 0x342e. 0x352f/ 0x3920空格键 右边数字键盘:  0x5200Insert 0x4700Home 0x4900Page UP  0x5300Delete 0x4f00End 0x5100PageDown  0x4800上箭头 0x4b00左箭头 0x5000下箭头 0x4d00右箭头 0x352f/ 0x372a* 0x4a2d- (注意,这是数字键盘的)  0x47377 0x48388 0x49399 0x4b344 0x4c355 0x4d366 0x4e2b+ 0x4f311 0x50322 0x51333 0x52300 0x532eDel 以上就是由为您提供的c语言键盘扫描码,希望给您带来帮助! 。

键盘扫描码

键盘扫描码

键盘上的每一个键都有两个唯一的数值进行标志。

为什么要用两个数值而不是一个数值呢?这是因为一个键可以被按下,也可以被释放。

当一个键按下时,它们产生一个唯一的数值,当一个键被释放时,它也会产生一个唯一的数值,我们把这些数值都保存在一张表里面,到时候通过查表就可以知道是哪一个键被敲击,并且可以知道是它是被按下还是被释放了。

这些数值在系统中被称为键盘扫描码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码----汉字输入软件----汉字内码。

键盘工作原理

键盘工作原理

键盘工作原理 键盘是计算机输入设备的一种,用于输入文字、数字和命令等信息。它是计算机与用户之间的重要交互工具之一。键盘的工作原理是指键盘如何将用户按下的按键转化为计算机可以识别的信号。下面将详细介绍键盘的工作原理。

1. 按键结构 键盘的按键结构通常由按键帽、按键弹簧、触点和按键底座等组成。按键帽是按键的外部部份,通常有字母、数字或者符号等标记。按键弹簧提供了按键的弹性,使得按键可以恢复原状。触点是按键底座上的金属片,当按键被按下时,触点会与电路板上的触点接触,形成电路通路。

2. 矩阵罗列 键盘上的按键通常采用矩阵罗列的方式连接到电路板上。矩阵罗列是指将按键按行和列的方式连接到电路板上,以减少所需的引脚数量。例如,一个标准的键盘通常由8行和16列的按键组成,共计128个按键。通过按下某个按键,可以在电路板上的相应行和列形成一个闭合电路,从而产生一个特定的信号。

3. 扫描过程 键盘的扫描过程是指键盘通过扫描电路不断地检测按键的状态,以确定用户按下的是哪个按键。扫描过程通常包括两个阶段:行扫描和列扫描。

- 行扫描:键盘控制器会挨次给每一行的按键行发送扫描信号,然后检测每一列的触点接触情况。如果有按键被按下,对应的行和列的交叉点会形成一个闭合电路,键盘控制器会检测到这个闭合电路,并记录下对应的按键。

- 列扫描:键盘控制器会挨次给每一列的按键列发送扫描信号,然后检测每一行的触点接触情况。如果有按键被按下,对应的行和列的交叉点会形成一个闭合电路,键盘控制器会检测到这个闭合电路,并记录下对应的按键。 4. 编码和传输 键盘控制器会将检测到的按键转换为计算机可以识别的信号。这个过程通常包括编码和传输两个步骤。

- 编码:键盘控制器会根据按键的位置和布局,将按键转换为一个惟一的编码。例如,按下键盘上的字母“A”键,键盘控制器会将其转换为一个ASCII码,比如65。不同的键盘布局和语言设置可能会使用不同的编码方式。

简述矩阵式键盘的查询扫描流程

简述矩阵式键盘的查询扫描流程

简述矩阵式键盘的查询扫描流程下载温馨提示:该文档是我店铺精心编制而成,希望大家下载以后,能够帮助大家解决实际的问题。

文档下载后可定制随意修改,请根据实际需要进行相应的调整和使用,谢谢!并且,本店铺为大家提供各种各样类型的实用资料,如教育随笔、日记赏析、句子摘抄、古诗大全、经典美文、话题作文、工作总结、词语解析、文案摘录、其他资料等等,如想了解不同资料格式和写法,敬请关注!Download tips: This document is carefully compiled by theeditor. I hope that after you download them,they can help yousolve practical problems. The document can be customized andmodified after downloading,please adjust and use it according toactual needs, thank you!In addition, our shop provides you with various types ofpractical materials,such as educational essays, diaryappreciation,sentence excerpts,ancient poems,classic articles,topic composition,work summary,word parsing,copy excerpts,other materials and so on,want to know different data formats andwriting methods,please pay attention!1. 初始化:设置键盘的行线和列线为输入或输出模式。

初始化变量,如行号、列号、按键状态等。

键盘扫描方法

键盘扫描方法

键盘扫描方法传统的键盘扫描方法如图1所示,该方法虽然被广泛应用于很多场合,但有一个不足的地方,如果按键一直没有释放,或者按键坏了,一直处于闭合状态,则程序一直处于检测按键是否释放,系统将无法运行。

只要对其稍加改进,就可以避免产生这个问题。

假设键盘接口电路采用独立式键盘接口,所有按键公共端接地,而且没有按键按下时IO口为高电平。

当按键没有按下时,IO口为高电平;当按键按下时,IO口为低电平;当按键释放时,IO口为高电平。

一个完整的按键过程是——按键未按下,按键按下,按键释放,而对应的IO口的电平变化为——高电平,低电平,高电平。

所以,可以通过判断IO口电平变化的变化顺序是否满足高电平→低电平→高电平,来判断是否有按键按下,而对于其它的电平变化顺序都是无效的。

那么该如何实现呢?在键盘扫描过程中,如果IO口为高电平,则需要判断是由于未按键,还是按键按下后释放引起的;如果IO口为低电平,则需要判断是由于未按键还是扫描之前本来就是低电平引起的。

所以我们需要引入一个全局位变量KEY_EN,来标志按键的状态, KEY_EN=0表示按键未按下;KEY_EN=1表示按键按下。

另外,我们还需引入一个全局字节变量KEY_TP来暂存键值,这是因为只有当IO口电平变化满足高电平→低电平→高电平,才表示一个按键有效,而只有在IO口为低电平的时候才能够读取到键值。

具体的键盘扫描流程如图2所示,键盘初始化KEY_EN=0。

图1 传统键盘扫描图2 改进后键盘扫描接下来我们介绍一种代码效率极高的键盘扫描方法。

键盘接口电路同样采用独立式,假设有8个按键,所有按键公共端接地,键盘扫描口为P0.7~P0.0,而且没有按键按下时为高电平,键盘扫描程序如下:unsigned char Trigger;unsigned char Continue;void delayms(unsigned char n){……}void key_scan(){unsigned char ReadData;if (P0!=0xff&&Trigger==0x00) delayms(20);ReadData = P0 ^ 0xff;Trigger = ReadDate & (ReadData ^ Continue);Continue = ReadData;}程序中的Trigger就是键值。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

一、概述 键盘在单片机应用系统中,实现输入数据、传送命令的功能,是人工干预的主要手段。键盘分两大类:编码键盘和非编码键盘。 编码键盘:由硬件逻辑电路完成必要的键识别工作与可靠性措施。每按一次键,键盘自动提供被按键的读数,同时产生一选通脉冲通知微处理器,一般还具有反弹跳和同时按键保护功能。这种键盘易于使用,但硬件比较复杂,对于主机任务繁重之情况,采用8279可编程键盘管理接口芯片构成编码式键盘系统是很实用的方案。 非编码键盘:只简单地提供键盘的行列与矩阵,其他操作如键的识别,决定按键的读数等仅靠软件完成,故硬件较为简单,但占用CPU较多时间。有:独立式按键结构、矩阵式按键结构。 二、键盘系统设计 首先,确定键盘编码方案:采用编码键盘或非编码键盘。随后,确定键盘工作方式:采用中断或查询方式输入键操作信息。然后,设计硬件电路。非编码键盘系统中,键闭合和键释放的信息的获取,键抖动的消除,键值查找及一些保护措施的实施等任务,均由软件来完成。 (一)非编码键盘的键输入程序应完成的基本任务 1.监测有无键按下;键的闭合与否,反映在电压上就是呈现出高电平或低电平,所以通过电平的高低状态的检测,便可确认按键按下与否。 2.判断是哪个键按下。一.编程扫描方式:当单片机空闲时,才

调用键盘扫描子程序,反复的扫描键盘,等待用户从键盘上输入命令或数据,来响应键盘的输入请求。二.定时扫描工作方式:单片机对键盘的扫描也可用定时扫描方式,即每隔一定的时间对键盘扫描一次。三.中断工作方式:只有在键盘有键按下时,才执行键盘扫描程序并执行该按键功能程序,如果无键按下,单片机将不理睬键盘 3.完成键处理任务。

(二)从电路或软件的角度应解决的问题 1.消除抖动影响。键盘按键所用开关为机械弹性开关,利用了机械触点的合、断作用。由于机械触点的的弹性作用,一个按键开关在闭合和断开的瞬间均有一连串的抖动、 抖动时间的长短由按键的机械特性决定,一般为5~10ms,这是一个很重要的参数。抖动过程引起电平信号的波动,有可能令CPU误解为多次按键操作,从而引起误处理。 为了确保CPU对一次按键动作只确认一次按键,必须消除抖动的影响。按键的消抖,通常有软件,硬件两种消除方法。 这种方法只适用于键的数目较少的情况。 软件消抖:如果按键较多,硬件消抖将无法胜任,常采用软件消抖。通常采用软件延时的方法:在第一次检测到有键按下时,执行一段延时10ms的子程序后,再确认电平是否仍保持闭合状态电平,如果保持闭合状态电平,则确认真正有键按下,进行相应处理工作,消除了抖动的影响。(这种消除抖动影响的软件措施是切实可行的。) 2.采取串键保护措施。串键:是指同时有一个以上的键按下,串键会引起CPU错误响应。 通常采取的策略:单键按下有效,多键同时按下无效。 3.处理连击。连击:是一次按键产生多次击键的效果。要有对按键释放的处理,为了消除连击,使得一次按键只产生一次键功能的执行(不管一次按键持续的时间多长,仅采样一个数据)。否则的话,键功能程序的执行次数将是不可预知,由按键时间决定。连击是可以利用的。连击对于用计数法设计的多功能键特别有效。 三、键盘工作方式 单片及应用系统中,键盘扫描只是CPU的工作内容之一。CPU忙于各项任务时,如何兼顾键盘的输入,取决于键盘的工作方式。考虑仪表系统中CPU任务的份量,来确定键盘的工作方式。 键盘的工作方式选取的原则是:既要保证能及时响应按键的操作,又不过多的占用CPU的工作时间。 键盘的工作方式有:查询方式(编程扫描,定时扫描方式)、中断扫描方式。 四、键盘电路结构 (一)独立式按键接口设计 独立式按键就是各按键相互独立,每个按键单独占用一根I/O口线,每根I/O口线的按键工作状态不会影响其他I/O口线上的工作状态。因此,通过检测输入线的电平状态可以很容易判断哪个按键被按下了。 优点:电路配置灵活,软件结构简单。 缺点:每个按键需占用一根I/O口线,在按键数量较多时,I/O口浪费大,电路结构显得复杂。 因此,此键盘是用于按键较少或操作速度较高的场合。

中断方式 查询方式 也可以用扩展I/O口搭接独立式按键接口电路,可采用8255扩展I/O口,用三态缓冲器扩展。这两种配接方式,都是把按键当作外部RAM某一工作单元的位来对待,通过读片外RAM 的方法,识别按键的工作状态。 上电路中独立式按键电路,各按键开关均采用了上拉电阻,是为了保证在按键断开时,各I/O有确定的高电平。如输入口线内部已有上拉电阻,则外电路的上拉电阻可省去。 (二)矩阵式键盘接口设计 矩阵式键盘适用于按键数量较多的场合,由行线和列线组成,按键位于行列的交叉点上。节省I/O口。 矩阵键盘工作原理:行线通过上拉电阻接到+5V上。无按键,行线处于高电平状态,有键按下,行线电平状态将由与此行线相连的列线电平决定。列线电平为低,则行线电平为低;列线电平为高,则行线电平为高。 五、双功能及多功能键设计 在单片机应用系统中,为简化硬件线路,缩小整个系统的规模,总希望设置最少的按键,获得最多的控制功能。 矩阵键盘与独立式按键键盘相比,硬件电路大大节省。可通过软件的方法让一键具有多功能。方法:选择一个RAM工作单元,对某一个按键进行按键计数,根据不同计数值,转到子程序。这种计数多功能键最好与显示器结合用,以便知道当前计数值,同时配合一个启动键。 复合键是使用软件实现一键多功能的另一个途径。所谓复合键,就是两个或两个以上的键的联合,当这些键同时按下时,才能执行相应的功能程序。实际情况做不到“同时按下”,他们的时间差别可以长到50ms,解决策略是:定义一个或两个引导键,这些引导键按下时没什么意义,执行空操作。引导键的例子:微机键盘上的CTRL、SHIFT、ALT。 缺点:一是操作变得复杂,二是操作时间变长。 多功能键的利用,应具体情况具体分析。要求速度的场合最好做一键一功能。如果系统功能很多,一键一功能不现实,可采取一键多功能。 六、功能开关及拨码盘接口设计 设计原因:键盘输入灵活性大,操纵方便。但某些重要功能或数据由键盘输入,误操作将产生一些不良后果。因此常设定静态开关的方法来执行这些功能或输入数据。静态开关一经设定,将不再改变,一直维持设定的开关状态。通常这些开关状态是在单片机系统加电时由CPU读入内存RAM的,以后CPU将不再关注这些开关的状态,因此,即使加电后,这些开关的状态发生变化,也不会影响CPU的正常工作,只有在下一次加电时,这些新状态才能生效。 第一,功能开关:主要是根据开关的状态执行一些重要的功能。 第二,拨码盘:单片机应用系统中,有时要输入一些控制参数,这些参数一经设定,将维持不变,除非给系统断电后重新设定。这时使用数字拨码盘既简单直观,又方便可靠。 七、按键介绍 常用的按键有三种:机械触点式按键、导电橡胶式和柔性按键(又称触摸式键盘)。 机械触点式按键是利用弹性使键复位,手感明显,连线清晰,工艺简单,适合单件制造。但是触点处易侵入灰尘而导致接触不良,体积相对较大。 导电橡胶按键是利用橡胶的弹性来复位,通过压制的方法把面板上所有的按键制成一块,体积小,装配方便,适合批量生产。但是时间长了,橡胶老化而使弹力下降,同时易侵入灰尘。 柔性按键是近年来迅速发展的一种新型按键,可以分为凸球型和平面型两种。凸球型动作幅度触感明显,富有立体感,但制造工艺相对复杂;平面型幅度微小,触感较弱,但工艺简单,寿命长。柔性按键最大特点是防尘、防潮、耐蚀,外形美观,装嵌方便。而且外形和面板的布局、色彩、键距可按照整机的要求来设计。 八、单片机系统键盘设计实例 本次设计中,键盘结构采用非编码键盘系统中的独立式按键结构。用三态缓冲器573扩展I/O口搭接独立式按键接口电路,按键状态由573锁存。 键盘工作方式采用定时扫描方式。采用定时器T0定时,CPU每隔200ms扫描键盘一次,即通过读取573的输出数据,识别按键的工作状态。 设计中对于重键和连击的处理:对于重键(串键:指同时有一个以上的键按下),采用软件提供保护,当判断为一个以上的键按下,则不处理,返回重新进行监测。只有监测到一个键按下时,才判断键值,执行相应键处理工作。 键盘对液晶显示的控制是通过显示画面的页码作为接口参数来完成的。在每一页中,键盘对数据的修改是通过对按键次数的计算作为接口参数来实现的。 具体例程如下: void keyscan() /*键盘扫描*/ {ucher data newz ,temp,pat; if(time_out) {ACC=MJP; /*读取573数据*/ temp=ACC&0x0f, /*取低四位*/ if(temp!=0x0f) /*有键按下*/ {msec(10); /*延时10MS*/ ACC=MJP; /*读取573数据*/ temp=ACC&0x0f if(temp=0x0f) {newz=temp; /*读取新键值*/ pat=newz^old; /*键值有无变化*/ if(pat)>0) /*有变化*/ {old=newz; /*原键值等于新键值*/ keymana(); /*调键散转程序*/ }

(下转第66页) (上接第64页) else;

相关文档
最新文档