键盘基本工作原理

键盘基本工作原理
键盘基本工作原理

PS/2协议,键盘基本工作原理,键盘模拟器

upsdn首页> 嵌入式开发> 电路与通信系统

摘要:先简要介绍普通PC机的键盘,然后分析PS/2协议,最后实现了一个键盘仿真器,可利用其开发真正的键盘.

PC机键盘简介

随着IBM PC机的发展,键盘也分为XT, AT, PS/2键盘以至于后来的USB键盘. PC系列机使用的键盘有83键、84键、101键、102键和104键等多种。XT和AT机的标准键盘分别为83键和84键,而286机以上微机的键盘则普遍使用101键、102键或104键。83键键盘是最早使用的一种PC机键盘,其键号与扫描码是一致的。这个扫描码被直接发送到主机箱并转换为ASCII码;随着高档PC机的出现,键盘功能和按键数目得到了扩充,键盘排列也发生了变化,产生的扫描码与83键键盘的扫描码不同。为了保持PC系列微机的向上兼容性,需将84/101/102/104键键盘的扫描码转换为83键键盘的扫描码,一般将前者叫作行列位置扫描码,而将后者称为系统扫描码。显然,对于83键键盘,这两种扫描码是相同的。

键盘是由一组排列成矩阵方式的按键开关组成,通常有编码键盘和非编码键盘两种类型,IBM系列个人微型计算机的键盘属于非编码类型。微机键盘主要由单片机、译码器和键开关矩阵三大部分组成。其中单片机采用了INTEL8048单片微处理器控制,这是一个40引脚的芯片,内部集成了8位CPU、1024×8位的ROM、64×8位的RAM、8位的定时器/计数器等器件。由于键盘排列成矩阵格式,被按键的识别和行列位置扫描码的产生,是由键盘内部的单片机通过译码器来实现的。单片机在周期性扫描行、列的同时,读回扫描信号线结果,判断是否有键按下,并计算按键的位置以获得扫描码。当有键按下时,键盘分两次将位置扫描码发送到键盘接口;按下一次,叫接通扫描码;释放时再发一次,叫断开扫描码。因此可以用硬件或软件的方法对键盘的行、列分别进行扫视,去查找按下的键,输出扫描位置码,通过查表转换为ASCII码返回。

键盘是与主机箱分开的一个独立装置,通过一根5芯电缆与主机箱连接,系统主板上的键盘接口按照键盘代码串行传送的应答约定,接受键盘发送来的扫描码;键盘在扫描过程中,7位计数器循环计数。当高5位(D6一D2)状态为全“0”时,经译码器在O列线上输出一个“0”,其余均为“1”;而计数器的低二位(D1D0)通过4选1多路选择器控制0—3行的扫描。计数器计一个数则扫描一行,计4个数全部行线扫描一遍,同时由计数器内部向D2进位,使另一列线1 变低,行线再扫描一遍。只要没有键按下,多路选择器就一直输出高电平,则时钟一直使计数器循环计数,对键盘轮番扫描。当有一个键被按下时,若扫描到该键所在的行和列时,多路选择器就会输出一个低电平,去封锁时钟门,使计数器停止计数。这时计数器输出的数据就是被按键的位置码(即扫描码)。8048利用程序读取这个键码后,在最高位添上一个“O”,组成一个字节的数据,然后从P22引脚以串行方式输出。在8048检测到键按下后,还要继续对键盘扫描检测,以发现该键是否释放。当检测到释放时,8048在刚才读出的7位位置码的前面(最高位)加上一个“1”,作为“释放扫描码”,也从P22引脚串行送出去,以便和“按下扫描码”相

区别。送出“释放扫描码”的目的是为识别组合键和上、下档键提供条件。

同时,主机还向键盘发送控制信号,主机CPU响应键盘中断请求时,通过外围接口芯片8255A一5的PA口读取键盘扫描码并进行相应转换处理和暂存;通过PB口的PB6和PB7来控制键盘接口工作。

从用途上看,键盘可分为台式机键盘、笔记本电脑键盘和工控机键盘三大类;其中台式机键盘从按键结构上又可分为两类,即机械键盘和电容键盘(又称有触点键盘和无触点键盘)。机械键盘存在着开关容易损坏、易污染、易老化的缺点,现已基本淘汰。电容键盘在可靠性上比前者有质的飞跃,使用寿命较长,目前大多为电容键盘。

早期的键盘是由美国IBM公司推出的,当时采用的计算机键盘为83键键盘。不久IBM 又推出了84键的键盘设计标准,将键盘分为三个区,即功能区、打字键区及负责光标控制和编辑的副键盘区,这种键盘主要区域的划分标准一直沿用至今。随着微软Windows视窗操作系统的广泛应用,IBM公司于1986年首次推出了101键的标准键盘,除添加了F11、F12两个功能键之外,还在键盘的中部多加了一组专用的光标控制和编辑的键,使键盘功能得到了进一步扩充,成为当时业界的标准键盘。后来,为与微软的Win95操作系统相配合,IBM又推出了104键键盘,新增了3个功能键(亦称Windows快捷键或热键),使以前需要打开好几个窗口才能完成的某些功能,通过快捷键的设定直接启动菜单完成,而不必再点击鼠标,这样就使计算机的操作更加便易。目前,这种104键的键盘(亦称Win95键盘)的设计已成为业界和市场上最为普遍、最为流行的一种标准,业界通称为标准键盘。实际上,所谓的标准键盘并没有标准,只因其应用较为广泛而被业界通称为标准键盘。由于软件的不断升级更新,为配合软件的需要,所谓的标准键盘的键数也在随之扩增,并因其又被业界所通常采纳而又被业界通称为标准键盘。

但是,无论是机械键盘或者电容键盘,还是从早期的83键键盘发展到目前通称的标准键盘104键键盘,其应用都是主要依赖于硬件CPU和软件操作系统。以下就键盘的构造及工作原理等问题进行介绍。

(一)键盘构造及工作原理

PS/2设备履行一种双向同步串行协议。换句话说,每次数据线上发送一位数据并且每在时钟线上发一个脉冲就被读入。设备可以发送数据到主机,而主机也可以发送数据到设备,但主机总是在总线上有优先权,它可以在任何时候抑制来自设备的通信,只需把

时钟线电平拉低即可。

键盘的内部结构主要包括控制电路板、按键、底板和面板等。电路板是整个键盘的控制核心,位于键盘的内部,主要担任按键扫描识别、编码和传输接口工作;它将各个键所表示的数字或字母转换成计算机可以识别的信号,是用户和计算机之间主要的沟通者之一。

键盘主要由键开关矩阵、单片机和译码器三大部分组成。键开关矩阵即键盘按键由一组排列成矩阵方式的按键开关组成,所输入的信号由按键所在的位置决定。单片机即键盘内部采用的Intel8048单片机微处理器,这是一个40引脚的芯片,内部集成了8位CPU、1024×8位的ROM、64×8位的RAM以及8位的定时器/计数器等。译码器即信号编码转译装置,把键盘的字符信号通过编码翻译转换成相应的二进制码。由于键盘排列成矩阵格式,被按键的识别和行列位置扫描码的产生,是由键盘内部的单片机通过译码器来实现的。根据键盘向主机送入的二进制代码类型,可把键盘分为编码键盘和非编码键盘两种。IBM PC机的键盘属于非编码键盘,其特点是不直接提供所按键的编码信息,而是用较为简单的硬件和一套专用程序来识别所按键的位置,并提供与所按键相对应的中间代码,然后再把中间代码转换成要对应的编码。这样,非编码键盘就为系统软件在定义键盘的某些操作功能上提供了更大的灵活性。

计算机键盘通常采用行列扫描法来确定按下键所在的行列位置。所谓行列扫描法是指,把键盘按键排列成n行×m列的n*m行列点阵,把行、列线分别连接到两个并行接口双向传送的连接线上,点阵上的键一旦被按动,该键所在的行列点阵信号就被认为已接通。按键所排列成的矩阵,需要用硬件或软件的方法轮转顺序地对其行、列分别进行扫描,以查询和确认是否有键按动。如有键按动,键盘就会向主机发送被按键所在的行列点阵的位置编码,称为键扫描码。单片机通过周期性扫描行、列线,读回扫描信号结果,判断是否有键按下,并计算按键的位置以获得扫描码。键被按下时,单片机分两次将位置扫描码发送到键盘接口:按下一次,叫接通扫描码;按完释放一次,叫断开扫描码。这样,通过硬件或软件的方法对键盘分别进行行、列扫视,就可以确定按下键所在位置,获得并输出扫描位置码,然后转换为ASCII码,经过键盘I/O电路送入主机,并由显示器显示出来。

键盘要增加键数是很容易的,任何矩阵键盘通过增加键盘的行或列便可实现增加按键数。如64 键的键盘排列成8行×8列的行列点阵,128键的键盘排列成8行×16列的行列点阵,256键的键盘排列成16行×16列的行列点阵,这在1992年7月出版的《微处理机为基础之设计》出版物上已作介绍(此对比文献在2001年12月13日已递交)。因此,键盘结构采用矩阵式早已是公有技术。

(二)键盘的按键增加及功能改进

随着计算机CPU(硬件)和Windows操作系统(软件)的不断升级换代,计算机的发展进入到了包括多媒体在内的高速多功能时代。与此相适应,计算机键盘也出现了一些新的变化,主要表现在键盘键数的增加及功能的整合。美国苹果(Apple)公司早在1992年就曾推出过设有调整音量按键的键盘。时下流行的多媒体键盘,也叫多功能键盘,

其特征是增加了一些快捷键(或功能键),通过设定主板BIOS或软件设定,使这些新增的键可以实现开关电脑、休眠启动、CD播放、音量调整、一键上网等特殊功能。此外还出现了一些多功能集成的键盘,如将扫描仪、录音设备或手写板、鼠标等整合为一体的键盘,以及带有文字编辑或指纹识别功能的智能键盘等。

如前所述,IBM定义的101键键盘与微软(Microsoft)所定义的三键共同形成的104 键Win95键盘一般被称作标准键盘,那么标准键盘的104键之外如何增加按键扩充功能呢?从目前键盘发展情况看,可以有多种方法。单就增加键盘按键的设定技术看,一般来讲,按键的增加取决于三个方面的因素:一是CPU能识别,二是操作系统能响应,三是键盘内部电路结构能安排。从前面的介绍可知,CPU和操作系统这两个因素是计算机必备的现成技术,不成问题。这样,增加键盘按键的关键就在于键盘的内部结构。以下两种方法可以直接简便地增加键盘按键。

目前PC机键盘按键一直沿用IBM的行列矩阵方式布局排列,称为扫描矩阵,其内部电路结构的核心是8048(包括其后续升级系列)单片机微处理器。根据单片机微处理器特定的I/O(即Input/Output输入/输出)电路,IBM将键盘按键的行列矩阵定义为8行×16列=128键,而现行的标准键盘只使用了其中的104键,故尚有128-104=24键的阵点闲余,尚未定义。因此,增加按键的方法之一是,直接在这尚未定义的24个闲余按键阵点中继续定义新键以扩增新的功能键。方法之二是,通过改变单片机微处理器I/O电路的配线方式,可以把IBM的原8行×16列扫描矩阵变为(8+n)行×16列,如(8+1)行×16列=144键等,这样就会在128键之外获得新增加的一行16个键位,再根据需要为其定义功能。以上两种方法都可以达到增加104键的标准键盘的按键数的目的。简而言之,第一种方法是在原扫描矩阵8行×16列的行列点阵中尚未利用的24个点上,根据需要可任意增加1至24个新键;第二种方法是在单片机微处理器原扫描矩阵8行×16列基础上再增加一行,变为9行×16列扫描矩阵,再根据需要任意增加新键,并不会带来单片机微处理器本身原有功能的更新。如IBM 的83键盘发展到原来的标准键盘101键,其要增加的键数只要通过增加键盘的行或列,并在增加的行列阵点上进行定义便可实现;而原来的101键的标准键盘后发展到目前的104键的标准键盘,其增加的3个键数可以不增加键盘的行和列,只要在原扫描矩阵中尚未定义的点上直接定义就可以。无论是第一种方法还是第二种方法,都已经属于公有技术领域的技术。

什么是键盘的键位冲突?

简单的说,也就是当你同时按下键盘上的几个键的时候,这几个键不能同时反映出来,这就叫做键盘的键位冲突。例如说,你能想象当你按下Ctrl-Alt-Del时,系统只能接收到前两个键,而死活不承认你按了Del键吗?

当然,现实中是不会有这样的键盘的,按不下Ctrl-Alt-Del的键盘根本就没法出厂,但其他一些常见的键位冲突就不稀奇了。例如,经常有一些键盘不能同时对例如

A-S-空格这样的按键组合作出反应,这样在FPS游戏中,使用者就会大为吃亏。

对于键位冲突问题,电脑用户中有两种完全不同的态度,绝大多数人根本意识不到键位冲突问题的存在,直到遇到冲突的时候才叫苦不迭,并且大呼“为什么他就能做这个动作?”;而另一部分人,特别是一些游戏高手,又在孜孜不倦的寻找“没有键位冲突的键盘”。这两种人都是对键位冲突的原因认识不清楚的。

键位冲突的直接起因,是键盘的非编码结构。在2月号的专题中,我们提到过现在的键盘几乎都是非编码的薄膜接触式键盘,那么什么是非编码键盘呢?在专题里我们没有详细的解释,下面我们就来详细说明一下非编码键盘的原理与结构。

传统的键盘,是编码式键盘,它的每个键按下时都会产生唯一的按键编码,并且通过专有的一组导线传输到键盘接口电路,由于其线路和编码的唯一性,这种键盘是不存在键位冲突的问题的,但是编码键盘结构复杂,现在已经很少使用了。

而现代的薄膜接触式键盘,任何一个按键都有上下两层薄膜的触点,我们将它拆开来仔细看一看(如图),就会发现在任何一层薄膜上,导线数都远少于按键数,而且每一条导线都同时连通多个按键的触点,而且,上层和下层的任何两条导线都最多只在一个按键上重合。也就是说,上层的1号导线可能会同时经过1、2、3、4、5……等按键,而下层的1号导线可能同时经过1、Q、A、Z……等按键,且两条导线只在1键上重合。

什么是键盘的键位冲突?简单的说,也就是当你同时按下键盘上的几个键的时候,这几个键不能同时反映出来,这就叫做键盘的键位冲突。例如说,你能想象当你按下Ctrl-Alt-Del时,系统只能接收到前两个键,而死活不承认你按了Del键吗?

当然,现实中是不会有这样的键盘的,按不下Ctrl-Alt-Del的键盘根本就没法出厂,但其他一些常见的键位冲突就不稀奇了。例如,经常有一些键盘不能同时对例如

A-S-空格这样的按键组合作出反应,这样在FPS游戏中,使用者就会大为吃亏。

对于键位冲突问题,电脑用户中有两种完全不同的态度,绝大多数人根本意识不到键位冲突问题的存在,直到遇到冲突的时候才叫苦不迭,并且大呼“为什么他就能做这个动作?”;而另一部分人,特别是一些游戏高手,又在孜孜不倦的寻找“没有键位冲突的键盘”。这两种人都是对键位冲突的原因认识不清楚的。

键位冲突的直接起因,是键盘的非编码结构。在2月号的专题中,我们提到过现在的键盘几乎都是非编码的薄膜接触式键盘,那么什么是非编码键盘呢?在专题里我们没有详细的解释,下面我们就来详细说明一下非编码键盘的原理与结构。

传统的键盘,是编码式键盘,它的每个键按下时都会产生唯一的按键编码,并且通过专有的一组导线传输到键盘接口电路,由于其线路和编码的唯一性,这种键盘是不存在键位冲突的问题的,但是编码键盘结构复杂,现在已经很少使用了。

在一种情况下,例如同时按下“Q”、“D”、“B”时,此时,从表中我们可以看出,上层导线1-下层导线2、上层导线3-下层导线3、上层导线5-下层导线4都分别连通,此时系统完全可以正常识别出按下了这三个按键。

但当按下的第三个按键不是“B”,而是“E”呢?

此时,我们可以发现,由于第三组连通的导线变成了上层导线3-下层导线2,所以,此时反映到接口控制芯片的信号是:上层导线1-下层导线2-上层导线3-下层导线3统统被连通到了一起。

但是,问题就在于,除了按下的第三个按键是“E”以外,如果按下的第三个键是用来连通上层导线1和下层导线3的“A”,也会有同样的信号组合?事实上,“Q”、“E”、“A”、“B”四个按键中按下任何三个都会有同样的信号组合,那么此时接口电路怎么判断呢?究竟是按下了哪三个按键或者是同时把四个按键都按下了呢?

这个时候,大多数键盘选择的方式,就是按照一个固定的规则输出固定的按键组合代码,对于其他可能的组合方式统统予以忽略,换句话说,在上面的键盘中,可能无论你怎么按这四个按键,它可能永远只会输出“Q”-“E”-“D”的组合,尽管可能你按下的实际是“Q”-“A”-“D”(这里只是一个假设,实际上为了避免误码,大多数键盘根本只输出两个按键而已)。于是,“键位冲突”就出现了。

由于非编码键盘的固有结构,“键位冲突”是不可避免的。于是就需要键盘的设计者绞尽脑汁修改键盘的线路排列和待查表格,尽量使可能会有的常用组合按键避开冲突键位——尽管要做到所有的按键都不发生冲突是不可能的,但你总不能让Ctrl-Alt-Del 相互冲突吧?那这样的键盘还怎么用?还有如果四个方向键相互冲突,那赛车类的游戏还怎么玩?

不过,由于市场上的游戏实在太多,每个游戏都可能会有自己常用的按键组合,甚至每个人都有自己的习惯按键,键盘的设计者当然不可能面面俱到,有经验的设计师可能会考虑得多一些,至少对最常见的游戏和最常见的按键设置能够保证不出现问题,但要考虑到所有情况当然是不可能的。

所以,当你购买键盘的时候,绝对不要忽略“键位冲突”的问题,一定要把键盘装到电脑上,试一试自己常玩的游戏是否能够正常使用(只有实际试用才能试出键位冲突问题,由于它与键位表相关,所以看外表是看不出来的)。同时,一些游戏高手朋友也不要白费心机去寻找什么“没有键位冲突的键盘”了,只要它依然是非编码键盘,那么键位冲突就是不可避免的,只要它的键位冲突不对你所玩的游戏构成影响,这就足够了。

PS/2协议分析

The PS/2 mouse and keyboard implement a bidirectional synchronous serial protocol. PS/2鼠标和键盘执行一个双向同步串行协议。

The bus is "idle" when both lines are high (open-collector).

总线空闲时,两条线都是高电平(集电极开路)。

This is the only state where the keyboard/mouse is allowed begin transmitting data. 在这种状态下,键盘/鼠标才允许开始传输数据。

The host has ultimate control over the bus and may inhibit communication at any time by pulling the Clock line low.

主机对总线有最高的控制权,在任何时候通过将时钟线拉低就可以禁止通信。

The device always generates the clock signal.

时钟信号总是由设备端生成的。

If the host wants to send data, it must first inhibit communication from the device by pulling Clock low.

如果主机想发送数据,它必须先将时钟拉低来禁止来自设备端的通信。

The host then pulls Data low and releases Clock.

然后主机再拉低数据线,释放时钟。注释:释放时钟,就是再恢复时钟为高

This is the "Request-to-Send" state and signals the device to start generating clock pulses.

这就是"请求发送(Request-to-Send)"状态,提示设备端开始生成时钟信号。

Summary: Bus States

Data = high, Clock = high: Idle state.

Data = high, Clock = low: Communication Inhibited.

Data = low, Clock = high: Host Request-to-Send

总结:总线状态

数据0 1

0 ---------通信禁止-----------

时钟

1 主机要求发送总线空闲

The clock and data pins are bidirectional, open-collector

signals that are pulled to 5 V by pullup resistors in the keyboard.

时钟和数据引脚时双向集电极开路的信号,可以被键盘内部的上拉电阻拉高到5V Data sent from the device to the host is read on the falling edge of the clock signal;

data sent from the host to the device is read on the rising edge.

从设备发送给主机的数据时在时钟信号的下降沿读取的;从主机发给设备的数据是在上升沿读取的。

The clock frequency must be in the range 10 - 16.7 kHz. This means clock must be high for 30 - 50 microseconds and low for 30 - 50 microseconds..

时钟频率必须在10-16.7KHz之间。这意味着时钟必须是高电平持续30~50毫秒,低电平持续

30~50毫秒。

If you're designing a keyboard, mouse, or host emulator, you should modify/sample the Data line in the middle of each cell. I.e. 15 - 25 microseconds after the appropriate clock transition.

如果你设计一个键盘鼠标或者主机模拟器,你必须在每个单元的中间时刻(也就是,在时钟跳变之后的15~25毫秒后)修改/取样数据线.

Again, the keyboard/mouse always generates the clock signal, but the host always has ultimate control over communication.

重复一遍,键盘/鼠标总是生成时钟信号,而主机控制着整个通信过程。

Timing is absolutely crucial. Every time quantity I give in this article must be followed exactly.

时序是非常重要的。在本文中给出的时间数必须严格遵循。

设备发送数据到主机

The Data and Clock lines are both open collector.

数据和时钟线都是集电极开路的。

A resistor is connected between each line and +5V, so the idle state of the bus is high. 在+5V 和每根线之间连接着一个电阻,所以总线的空闲状态是高电平。

When the keyboard or mouse wants to send information, it first checks the Clock line to make sure it's at a high logic level.

当键盘或者鼠标想发送数据时,它首先必须检查时钟线,确认它处于高电平。

If it's not, the host is inhibiting communication and the device must buffer any

to-be-sent data until the host releases Clock.

如果不是,主机禁止通信,设备必须缓冲任何要发送的数据,直到主机释放时钟。

The Clock line must be continuously high for at least 50 microseconds before the device can begin to transmit its data.

在设备开始传输数据之前,时钟线必须持续为高电平的时间必须至少50ms

The keyboard/mouse writes a bit on the Data line when Clock is high, and it is read by the host when Clock is low.

当时钟为高电平时,键盘/鼠标写一个bit到数据线上;当时钟为低电平时,主机从数据线上读取这个bit 。

The Data line changes state when Clock is high and that data is valid when Clock is low.

当时钟位高时,数据线改变状态;

当时钟位低时,(数据线上的)数据是有效的。

The clock frequency is 10-16.7 kHz.

时钟频率是10-16.7KHz

The time from the rising edge of a clock pulse to a Data transition must be at least 5 microseconds.

从时钟脉冲的上升沿到数据跳变的时间必须至少5ms

The time from a data transition to the falling edge of a clock pulse must be at least 5 microseconds and no greater than 25 microseconds.

从数据跳变到时钟脉冲的下降沿必须至少5ms,且不超过25ms

The host may inhibit communication at any time by pulling the Clock line low for at least 100 microseconds.

主机可在任何时间禁止通信,只需要将时钟线下拉位低电平超过100ms即可

If a transmission is inhibited before the 11th clock pulse, the device must abort the

current transmission and prepare to retransmit the current "chunk" of data when host releases Clock.

如果在第11个脉冲时禁止传输,设备必须中止当前的传输,准备重新传输当前的数据"chunk(块)"当主机释放时钟时

A "chunk" of data could be a make code, break code, device ID, mouse movement packet, etc.

一个数据块可能时通码,断码,设备ID,鼠标移动包等等。

For example, if a keyboard is interrupted while sending the second byte of a two-byte break code, it will need to retransmit both bytes of that break code, not just the one that was interrupted.

举个例子,如果当发送一个两字节断码的第2个字节时,键盘被中断,它将需要重新发送

此断码的两个字节,而不仅仅时被中断掉的那个字节。

If the host pulls clock low before the first high-to-low clock transition, or after the falling edge of the last clock pulse, the keyboard/mouse does not need to retransmit any data.

如果在第一个高->低时钟跳变时,(或者在最后一个时钟脉冲的下降沿之后)主机将时钟拉低,键盘/鼠标不必重新传输任何数据。

However, if new data is created that needs to be transmitted, it will have to be buffered until the host releases Clock.

但是,如果新产生的数据需要传输,它必须将数据缓冲,知道主机释放时钟。

Keyboards have a 16-byte buffer for this purpose. If more than 16 bytes worth of keystrokes occur, further keystrokes will be ignored until there's room in the buffer. 键盘有一个16字节的缓冲区。如果有超过16个字节的击键存在,更多的击键将被忽略。直到

缓冲区有空地。

Mice only store the most current movement packet for transmission.

鼠标只能缓冲最近的一个要传输的(移动)数据包。

时间参数最大值/最小值

T1数据跳变到时钟的下降沿5/25 us

T2时钟的上升沿到数据跳变5/T4 - 5 us

T3时钟inactive 30-50 us

T4时钟active 30-50 us

T5 >0/50 us

Time to auxiliary device inhibit after clock 11 to ensure the auxiliary device does not start another transmission

The auxiliary device checks the 'clock' line. If the line is inactive, output from the device is not allowed.

辅助设备(指键盘) 检查时钟线,如果时低电平,禁止发送数据

The auxiliary device checks the 'data' line. If the line is inactive, the controller receives data from the system.

设备检查数据线,如果是低电平,那么控制器从系统接收数据

The auxiliary device checks the 'clock' line during the transmission at intervals not exceeding 100 microseconds. If the device finds the system holding the 'clock' line inactive, the transmission is terminated. The system can terminate transmission anytime during the first 10 clock cycles.

设备在传输过程中检查时钟线间隔不超过100us。如果设备发现主机系统将电平拉低,就终止传输。在传输过程的前10个时钟周期的任何时候,主机系统可以中止传输。

A final check for terminated transmission is performed at least 5 microseconds after the 10th clock.

终止传输的最后一个检查要持续至少5us

The system can hold the 'clock' signal inactive to inhibit the next transmission.

系统拉低时钟线,将禁止下一次传输

The system can set the 'data' line inactive if it has a byte to transmit to the device. The 'data' line is set inactive when the start bit (always 0) is placed on the 'data' line.

系统如果有一个字节要传输给设备,可以拉低数据线。当开始位(总是0)放置到数据线时,数据线被拉低。

The system raises the 'clock' line to allow the next transmission.

系统拉高时钟将允许下一次传输

Host-to-Device主机到设备的通信

First of all, the PS/2 device always generates the clock signal.

首先,PS/2设备总是产生时钟信号

If the host wants to send data, it must first put the Clock and Data lines in a "Request-to-send" state as follows:

如果主机想发送数据,它必须先将时钟线和数据线设置成"Request-to-send"状态:

1) Inhibit communication by pulling Clock low for at least 100 microseconds.

拉低时钟线至少100us来禁止通信

2) Apply "Request-to-send" by pulling Data low, then release Clock.

拉低数据线,请求"Request-to-send", 然后释放时钟 .

The device should check for this state at intervals not to exceed 10 milliseconds.

设备应该在不超过10ms(注意,是毫秒)的间隔内就要检查一次这个状态。

When the device detects this state, it will begin generating Clock signals and clock in eight data bits and one stop bit.

当设备检测到这个状态,它将开始产生时钟信号,

The host changes the Data line only when the Clock line is low, and data is read by the device when Clock is high.

只有当时钟线为低的时候,主机才可以改变数据线(也就是将数据写入到数据线)。数据将在时钟为高电平的时候被设备读取。

After the stop bit is received, the device will acknowledge the received byte by bringing the Data line low and generating one last clock pulse.

在收到停止位之后,设备将通过拉低数据线,生成最后一个时钟脉冲来应答收到的字节

If the host does not release the Data line after the 11th clock pulse, the device will continue to generate clock pulses until the the Data line is released (the device will then generate an error.)

在第11个时钟脉冲之后,如果主机并没有释放数据线,设备将继续产生时钟脉冲,直到数据线被释放(然后设备将产生一个错误)

The host may abort transmission at time before the 11th clock pulse (acknowledge bit) by holding Clock low for at least 100 microseconds.

在第11个脉冲之前(回应位),主机可以随时中止传输,只要拉低时钟持续100us即可

时间参数最大值/最小值

T7 时钟低电平30-50 us

T8 时钟高电平30-50 us

T9 30-50 us

T9 == Time from inactive to active CLK transition, used to time when the auxiliary device samples DATA

FreeScale(Moto)提供的时序图

主机到键盘的数据传输

1.主机通过拉低时钟线来启动一个主机到键盘的数据传输。大约35us后,主机拉低数据线

。这个事件序列就是通知键盘,主机要传输一个命令了。在数据信号的下降沿大约125us 后时钟信号释放,就被键盘内部的上拉电阻拉为高电平。

2. 在时钟信号的上升沿约1ms ,数据传输开始。这个期间,数据线保持低电平。键盘拉低时钟线,clocking in the low data line. 这个就做传输的起始位。

3. 键盘用时钟驱动8个数据位从主机传输到自己这边。这个时钟有50%的占空比(duty cycle).高电平和低电平的时间都在30~50us之间。主机在每个周期的低电平的时候改变数据线上的数据。在每个时钟的上升沿5~25us之后键盘开始从数据线上取样,取出主机发来的数据。

4.数据位之后是一个奇偶校验位(采用奇校验)

5.最后是停止位

6.如果键盘读到一个高电平的停止位,键盘就在取样停止位的那个时钟的下降沿之后的低电平期间拉低数据线。这个行为叫做键盘给主机的应答信号。

键盘拉高时钟之后,也拉高数据线。

7.在收到一个字节后,键盘对接收的数据执行一个奇偶校验。如果奇偶校验错误,或者

接收的数据无法识别为有效的命令,那么键盘请求重新发送(发送0xFE给主机)

1. 键盘发送数据前,首先必须让时钟和数据线都在键盘内部的上拉电阻作用下拉成高电平。然后键盘拉低数据线,5-25us之后,键盘拉低时钟线。在时钟的下降沿,开始传输起始位The falling edge of the clock line clocks in the transfer’s start

bit.

2. 键盘用时钟驱动8个数据位到主机。这个时钟有50%的占空比(duty cycle).高电平和低电平的时间都在30~50us之间。键盘在每个周期的高电平的时候改变数据线上的数据。这个改变出现在时钟的上升沿的5us后和下降沿的5us前。键盘的数据在时钟的下降沿被锁存进主机。

3.数据位之后是一个奇校验位

4.最后是停止位。在时钟的下降沿0~50us之间主机拉低时钟来锁存停止位。这就告诉键盘主机现在忙,不能在接收其他的键盘传输数据。在处理完接收的数据,准备好接收下一个数据之前,主机释放时钟。

6.在键盘传输数据到主机的过程中,主机任何时候都可以中断这个传输,发送一个命令到键盘。主机拉低时钟和数据线即可中止传输。所以,键盘在时钟为低电平的时候必须取样数据线。(无论什么时候输出高数据位的时候)。在产生时钟的上升沿时,必须

读取时钟。

在任何时候发现这两个条件不满足,就拉高时钟和数据线,放弃这次传输,并准备从主机接收命令。

Moto 香港公司的Derek Lau

当时钟高电平是,发送给主机的数据被主机读取。在空闲状态,时钟和数据线都被拉为高电平。主机拉低时钟最少100ms(?还是us)开始发送数据给键盘:

1.主机等待,直到没有外部设备传输被处理

2.主机拉低时钟

3.主机拉低数据作为开始位

4 .主机释放时钟

5.设备拉低时钟

6.主机发送数据

7.设备释放时钟,读取数据

8.设备检查时钟线,如果时钟为低,中止传输

9.重复5-7步,发送数据1-到数据0,以及奇校验位

10. 设备拉低时钟

11. 主机释放数据

12.设备时钟时钟

13.设备读取数据线,想得到停止位,如果数据线为低(不是停止位),产生错误

14.设备拉低时钟和数据线

15.设备释放时钟和数据线

从设备发送到主机的数据,在时钟的下降沿被读取。在发送数据前,设备检查通过检测时钟信号为高来得知主机是否贮备好:

1.键盘(设备)等待时钟为高(约50ms?us)

2.如果数据为低,终止

3.键盘发送数据

4.键盘拉低时钟为低

5.键盘释放时钟为高

6.键盘读取时钟线,如果时钟为低,中止传输

7.重复4-6步,传输数据0-数据7,奇校验位和停止位

8.键盘释放时钟为高

作者:Gavin 刘功民毕振柯更新日期:2006-10-22

来源:https://www.360docs.net/doc/e618733933.html, 浏览次数:

相关文章

?PS/2接口协议解析及应用

?用单片机设计制作PS/2键盘接收器

?基于Small RTOS51的PS/2键盘驱动程序开发

相关评论发表评论

?No Comments

键盘输入原理

基础知识 1. 键盘的基本原理 键盘是一组按键的组合,它是最常用的输入设备,操作人员可以通过键盘输入数据或命令,实现简单的人机对话。 键盘是一种常开型的开关,通常键的两个触点处于断开状态,按下键时它们才闭合。键盘的识别有两种方案:一是采用现有的一些芯片实现键盘扫描;再就是用软件实现键盘扫描。目前有很多芯片可以用来实现键盘扫描,如有Intel8279、CH451、ICM7218、PCF8574等。但是键盘扫描的软件实现方法有助于缩减系统的重复开发成本,且只需要很少的CPU 开销。嵌入式控制器的功能很强,可以充分利用这一资源,这里就介绍一下用软件实现键盘扫描的方案。 键盘从结构上分为独立式键盘与矩阵式键盘。一般按键较少时采用独立式键盘,按键较多时采用矩阵式键盘。 (1)独立式键盘。在由单片机组成的测控系统及智能化仪器中,用的最多的是独立式键盘。这种键盘具有硬件与软件相对简单的 特点,其缺点是按键数量较多时,要占用大量口线。当按键没 按下时,CPU对应的I/O接口由于内部有上拉电阻,其输入为

高电平;当某键被按下后,对应的I/O接口变为低电平。只要 在程序中判断I/O接口的状态,即可知道哪个键处于闭合状态。 (2) 矩阵式键盘。矩阵式键盘使用于按键数量较多的场合,它由行线与列线组成,按键位于行、列的交叉点上。一个3*3的行列结构可以构成一个有9个按键的键盘。同理,一个4*4的行列可以构成一个16按键的键盘。很明显,在按键数量较多的场合,与独立式键盘相比,矩阵式键盘要节省很多I/0接口。

2、键盘按键识别方法 (1)扫描法。扫描法有行扫描和列扫描两种,无论采用哪种,其效果是一样的,只是在程序中的处理方法有所区别。下面以行扫描法为例来介绍扫描法识别按键的方法。先向键盘4根行线输出其中某一行为低电平,其它行为高电平,然后读取列值,若某一列值为低电平,则表明同时为低电平的行和列的交叉处按键被按下,如果没有某列为低电平,则继续扫描下一行。因为输入低电平的行是从第一行开始逐行遍历的,故称为行扫描法。行与列是相对的,可以将行按列对待,同时将列按行对待,所实现的扫描法效果是一样的。

单片机矩阵式键盘连接方法及工作原理

矩阵式键盘的连接方法和工作原理 什么是矩阵式键盘?当键盘中按键数量较多时,为了减少I/O 口线的占用,通常将按键排列成矩 阵形式。在矩阵式键盘中,每条水平线和垂直线在交叉处不直接连通,而是通过一个按键加以连接。这样做有什么好处呢?大家看下面的电路图,一个并行口可以构成4*4=16 个按键,比之直 接将端口线用于键盘多出了一倍,而且线数越多,区别就越明显。比如再多加一条线就可以构成20 键 的键盘,而直接用端口线则只能多出一个键(9 键)。由此可见,在需要的按键数量比较多时,采用矩 阵法来连接键盘是非常合理的。 矩阵式结构的键盘显然比独立式键盘复杂一些,识别也要复杂一些,在上图中,列线通过电阻接 电源,并将行线所接的单片机4 个I/O 口作为输出端,而列线所接的I/O 口则作为输入端。这样,当按 键没有被按下时,所有的输出端都是高电平,代表无键按下,行线输出是低电平;一旦有键按下,则输 入线就会被拉低,这样,通过读入输入线的状态就可得知是否有键按下了,具体的识别及编程方法如下 所述: 二.矩阵式键盘的按键识别方法 确定矩阵式键盘上任何一个键被按下通常采用“行扫描法”或者“行反转法”。行扫描法又称为 逐行(或列)扫描查询法,它是一种最常用的多按键识别方法。因此我们就以“行扫描法”为例介绍矩 阵式键盘的工作原理: 1.判断键盘中有无键按下 将全部行线X0-X3 置低电平,然后检测列线的状态,只要有一列的电平为低,则表示键盘中有键 被按下,而且闭合的键位于低电平线与4 根行线相交叉的4 个按键之中;若所有列线均为高电平,则表 示键盘中无键按下。 2.判断闭合键所在的位置 在确认有键按下后,即可进入确定具体闭合键的过程。其方法是:依次将行线置为低电平(即在 置某根行线为低电平时,其它线为高电平),当确定某根行线为低电平后,再逐行检测各列线的电平状 态,若某列为低,则该列线与置为低电平的行线交叉处的按键就是闭合的按键。 下面给出一个具体的例子: 单片机的P1 口用作键盘I/O 口,键盘的列线接到P1 口的低4 位,键盘的行线接到P1 口的高4

矩阵键盘的工作原理和扫描确认方式

9.3.1 矩阵键盘的工作原理和扫描确认方式 来源:《AVR单片机嵌入式系统原理与应用实践》M16华东师范大学电子系马潮 当键盘中按键数量较多时,为了减少对I/O 口的占用,通常将按键排列成矩阵形式,也称为行列键盘,这是一种常见的连接方式。矩阵式键盘接口见图9-7 所示,它由行线和列线组成,按键位于行、列的交叉点上。当键被按下时,其交点的行线和列线接通,相应的行线或列线上的电平发生变化,MCU 通过检测行或列线上的电平变化可以确定哪个按键被按下。 图9-7 为一个 4 x 3 的行列结构,可以构成12 个键的键盘。如果使用 4 x 4 的行列结构,就能组成一个16 键的键盘。很明显,在按键数量多的场合,矩阵键盘与独立式按键键盘相比可以节省很多的I/O 口线。 矩阵键盘不仅在连接上比单独式按键复杂,它的按键识别方法也比单独式按键复杂。在矩阵键盘的软件接口程序中,常使用的按键识别方法有行扫描法和线反转法。这两种方法的基本思路是采用循环查循的方法,反复查询按键的状态,因此会大量占用MCU 的时间,所以较好的方式也是采用状态机的方法来设计,尽量减少键盘查询过程对MCU 的占用时间。 下面以图9-7 为例,介绍采用行扫描法对矩阵键盘进行判别的思路。图9-7 中,PD0、PD1、PD2 为3 根列线,作为键盘的输入口(工作于输入方式)。PD3、PD4、PD5、PD6 为4根行线,工作于输出方式,由MCU(扫描)控制其输出的电平值。行扫描法也称为逐行扫描查询法,其按键识别的过程如下。 √将全部行线PD3-PD6 置低电平输出,然后读PD0-PD2 三根输入列线中有无低电平出现。只要有低电平出现,则说明有键按下(实际编程时,还要考虑按键的消抖)。如读到的都是高电平,则表示无键按下。 √在确认有键按下后,需要进入确定具体哪一个键闭合的过程。其思路是:依

按键控制键盘检测原理与应用

按键控制键盘检测原理与应用 一、任务目标: 认知目标 1、 掌握按键分类及工作原理 2、 掌握IF 条件选择结构和使用方法 3、 掌握循环结构和使用原理 4、 掌握独立按键子函数的编写原理及方法 1、独立键盘 在简单的单片机应用系统中,往往只需要几个功能键就能满足要求, 此时,可采用独立 式按键结构。 独立式按键是直接用 I/O 口线构成的单个按键电路,其特点是每个按键单独占用一根 I/O 口线,每个按键的工作不会影响其它 I/O 口线的状态。独立式按键的典型应用如图 1.2.1 所示。 独立式按键示意图 独立式按键电路配置灵活,软件结构简单,但每个按键必须占用一根 I/O 口线,因此, 在按键较多时,I/O 口线浪费较大,不宜采用。 程序开始,检测按键是否被按下,若按下,则移动机器人启动,未被按下,继续检测。 这里将程序分成三个部分,分别是延时子函数、按键子函数、主函数。 延时子函数,通过参数 t 设置延时时间;按键模块子函数需用到延时函数,对按键进行 消抖;主函数主要调用按键检测程序,实现对移动机器人的控制。程序流程图如图 1.2.2所 示 xnu Lnu Jnu L] iu lu o 1 3 4 5 6 - IL I 」 IL IL IL IL IL IL- PPPPFFPP 3 S-I

程序示例: 在编写程序开始的部分,将系统头文件“STC89C52RC.H ”包含进来,对常用的变量类 型进行宏定义,规划各函数和变量,对变量进行定义和初始化,对自定义子函数进行声明并添加相应标注,程序开始部分如下 sbit IN仁P1A0; sbit IN2=P1A1; Void key(); 编写主函数,在主函数中就是调用按键检测函数。 Void mai n() { key(); } 编写key()按键检测函数,按键按下,输出低电平,通过if语句检测低电平,延时10ms 后,再次检测,若检测为高电平,则表示为机械抖动,若检测到低电平表示按键按下。 Void key() { if(IN1==0) { delay_ms(10); if(IN 仁=0) { while(IN 仁=0); IN2=~IN2 ; } } } 在上面的程序中,就只有一个检查按键扫描的函数key(),key()函数是检查有没有按键

发动机的基本工作原理

发动机的基本工作原理 发动机(Engine)是一种能够把其它形式的能转化为机械能的机器,包括如内燃机(汽油发动机等)、外燃机(斯特林发动机、蒸汽机等)、电动机等。下面是收集的发动机的基本工作原理,欢迎阅读。 我们以单缸汽油发动机为例,讲解一下汽油机的工作原理。 气缸内装有活塞,活塞通过活塞销、连杆与曲轴相连接。活塞 在气缸内做往复运动,通过连杆推动曲轴转动。为了吸入新鲜气体和排出废气,设有进气门和排气门。 活塞顶离曲轴中心最远处,即活塞最高位置,称为上止点。活 塞顶部离曲轴中心最近处,即活塞最低位置,称为下止点。上、下止点间的距离称为活塞行程,曲轴与连杆下端的连接中心至曲轴中心的距离称为曲轴半径。活塞每走一个行程相应于曲轴转角180°。对于气缸中心线通过曲轴中心线的发动机,活塞行程等于曲柄半径的两倍。 活塞从上止点到下止点所扫过的容积称为发动机的工作容积或 发动机排量,用符号VL表示。 四冲程发动机的工作循环包括四个活塞行程,既进气行程、压 缩行程、膨胀行程(作功行程)和排气行程。 进气行程 化油器式汽油机将空气与燃料先在气缸外部的化油器中进行混合,然后再吸入气缸。进气行程中,进气门打开,排气门关闭。随着活塞从上止点向下止点移动,活塞上方的气缸容积增大,从而气缸内

的压力降低到大气压力以下,即在气缸内造成真空吸力。这样,可燃混合气便经进气管道和进气门被吸入气缸。 压缩行程 为使吸入气缸内可燃混合气能迅速燃烧,以产生较大的压力,从而使发动机发出较大功率,必须在燃烧前将可燃混合气压缩,使其容积缩小、密度加大、温度升高,即需要有压缩过程。在这个过程中,进、排气门全部关闭,曲轴推动活塞由下止点向上止点移动一个行程称为压缩行程。 压缩终了时,活塞到达上止点,活塞上方形成很小空间,称为燃烧室。压缩前气缸中气体的最大容积与压缩后的最小容积之比称为压缩比,以ε表示: 压缩比愈大,在压缩终了时混合气的压力和温度便愈高,,燃烧速度也愈快,因而发动机发出的功率愈大,经济性愈好。但压缩比过大时,不仅不能进一步改善燃烧情况,反而会出现爆燃和表面点火等不正常燃烧现象。爆燃是由于气体压力和温度过高,在燃烧室内离点燃中心较远处的末端可燃混合气自燃造成的一种不正常燃烧。爆燃时火焰以极高的速率向外传播,甚至在气体来不及膨胀的情况下,温度和压力急剧升高。同时,还会引起发动机过热,功率下降,燃油消耗量增加等一系列不良后果。表面点火是由于燃烧室内炽热表面与炽热处(如排气门头,火花塞电极,积炭处)点燃混合气产生的另一种不正常燃烧(也称为炽热点火或早燃)。表面点火发生时,也伴有强烈的敲击声(较沉闷),产生的高压会使发动机件负荷增加,寿命降低。

鼠标工作原理以及流程(版权所有)

2.4 GHz无线鼠标键盘接收器的设计 ?随着无线通信技术的不断发展,近距离无线通信领域出现了蓝牙、RFID、WIFI等技术。 这些技术不断应用在嵌入式设备及PC外设中。2.4 GHz无线鼠标键盘使用24~2.483 5 GHz无线频段,该频段在全球大多数国家属于免授权使用,这为无线产品的普及扫清了最大障碍。用户可迅速地进入与世界同步的无线设计领域,最大限度地缩短设计和生产时间,并且具有完美性能,能够替代蓝牙技术。 1 系统硬件结构 ?2.4 GHz无线鼠标键盘接收器主要实现鼠标、键盘等HID类设备在PC机上的枚举识别过程和接收无线鼠标或键盘发送的数据(包括按键值、鼠标的上下左右移动等),并将接收到的数据通过USB接口传送给PC机,实现鼠标键盘的无线控制功能。接收器主要由USB接口部分、MCU和无线接收部分组成。系统硬件框图如图l所示。 1. 1 USB接口部分 系统采用H OLT EK公司生产的8位USB多媒体键盘编码器HT82K95E作为系统核心。鼠标、键盘等HID类设备为低速设备,所以接收器要能同时实现鼠标和键盘数据同PC机的双向传输。MCU首先必须具有低速的USB接口,并且最少支持3个端点(包括端点O)。综合考虑选用了 HT82K95E作为本系统的主控芯片。 本系统的USB接口部分电路图如图2所示,其中电阻R100、R101、R102、R103、R104和电容C102、C114和C115用于EMC。由于鼠标和键盘设备属于从设备,所以应在USB-信号线上加1.5 k?的上拉电阻。

1.2 MCU部分 MCU的复位电路采用由R108和C105组成的RC积分电路实现上电复位功能。上电瞬间,由于电容电压不能突变,所以复位引脚为低电平,然后电容开始缓慢充电,复位引脚电位开始升高,最后变为高电平,完成芯片的上电复位。HT82K95E微控制器内部还包含一个低电压复位电路(LVR),用于监视设备的供电电压。如果设备的供电电压下降到0.9 V~VLVR的范围内并且超过1 ms的时间,那么LVR就会自动复位设备。 应当注意的是对于该设备的复位电路,还应加1个二极管1N4148,接法如图2中的VD100。如果不加此二极管,设备在第一次使用时能够正常复位,但在以后的使用却无法正常复位,原因是电容中的电荷无法释放掉,而该二极管可以通过整个电路快速释放掉电容中的电荷。 由于n RF24L01的数据包处理模式支持与单片机低速通信而无线部分高速通信,并且nRF24L01内部有3个不同的RX FIFO寄存器和3个不同的TX FIFO寄存器,在掉电模式下、待机模式下和数据传输的过程中MCU可以随时访问FIFO寄存器。这就允许SPI接口低速传送数据,并且可以应用于MCU 硬件上没有SPI接口的情况下。因此在设计中使用HT82K95E 的PA口模拟SPI总线与nRF42L01的SPI接口通信。

键盘工作原理

键盘工作原理 一、PS/2键盘 PS/2键盘是遵循IBM PS/2键盘协议,通过PS/2的接口与主机相连。PS/2接口共有4条信号线。如下所示: 5-Pin DIN Connector 6-Pin Mini DIN Connector 如上图所示,PS/2接口四条信号线分别为“电源,地线,数据,时钟”。键盘通电后,所有数据都是通过“时钟/数据”两条信号线与主机进行沟通的。键盘与主机之间的沟通每次传送的数据为11位:1个起始位/8个数据位/1个校验位/1个停止位。键盘上每个按键都会进行编码称之为扫描码(Scan Code),每个键都有按下去的码称为通码(Make Code)与弹起来的码称为断码(Break Code)。扫描码又分为两种Code Set 1(简称为CS1)与Code Set2(简称为CS2)。这两种编码方式不同,CS1中“断码=通码+80(十六进制)”;CS2中“断码=F0 + 通码”。举例来说,如字母“A”,CS1码为通码=1E、断码= 9E;CS2码为通码=1C、断码=F0 1C。键盘是按CS2的方式将码传送至电脑主板的上键盘控制口8042,8042再将码转换成CS1的方式再传给操作系统。操作系统收到码后再转换成其相应的功能。

二、USB键盘 USB键盘是随着USB协议的推出而设计出来的。其通讯方式是遵循USB1.1与HID 1.1规范的。HID中文称之为人机接口设备,HID的规范主要定义了如键盘、鼠标、游戏杆等由人直接控制跟电脑相连的一些输入输出设备。 USB键盘的原理较为复杂,这里只能做简单介绍: 1、信号线:分为四条,按顺序依次为“VCC(红色)、DATA-(白色)、DATA+ (绿色)、GND(黑色)。 2、编码:USB编码跟PS/2不同,相对PS/2来讲要复杂。USB键盘编码是根据 功能不同而分成了不同的“Usage Page”,每个Page里再对各个按键进行编码。普通的按键如A、B、C….等Page为07,电源控制部分为01,多媒体控制部分为0C。 3、工作原理:USB键盘是通过主板上USB控制器上的USB接口进行沟通的。 在通电后,主机会侦测其USB接口上是否连有设备,如果有的话,会送出控制数据包到设备。设备厂收到后,会回应相关的数据包到主机。主机再解析收到的数据包,再判断此设备是哪类设备。如果是键盘的话,主机会再送键盘相应的数据包过来,键盘再回应过去,双方沟通完毕后,键盘就能正常使用了。在尚未进入Windows操作系统之前,是由BIOS控制键盘工作的,只做一些简单的沟通双方就能工作,但一些复杂的功能也不能使用,如电源与多媒体控制等功能是没法在DOS下使用的。在进入Windows操作系统后,操作系统会重新初始化键盘,会对键盘所有的数据进行解析。如用户按下字母“A”,键盘会送出含有字母“A”编码的数据包送给系统。系统收到后会解析此数据包,从中寻找其对应的Usage Page 07,再在07中寻找其对应的编码,然后再翻译成相应的功能再在屏幕上显示字母“A”等。

矩阵式键盘的结构与工作原理

矩阵式键盘的结构与工作原理 在键盘中按键数量较多时为了减少I/O 口的占用通常将按键排列成矩阵形式如图1 所 示在矩阵式键盘中每条水平线和垂直线在交叉处不直接连通而是通过一个按键加以连 接这样一个端口如P1 口就可以构成4*4=16 个按键比之直接将端口线用于键盘 多出了一倍而且线数越多区别越明显比如再多加一条线就可以构成20 键的键盘而 直接用端口线则只能多出一键9 键由此可见在 需要的键数比较多时采用矩阵法来做键盘是合理的 矩阵式结构的键盘显然比直接法要复杂一些识别也要复杂一些上图中列线通过电 阻接正电源并将行线所接的单片机的I/O 口作为输出端而列线所接的I/O 口则作为输入这样当按键没有按下时所有的输出端都是高电平代表无键按下行线输出是低电平 一旦有键按下则输入线就会被拉低这样通过读入输入线的状态就可得知是否有键按下 了具体的识别及编程方法如下所述 矩阵式键盘的按键识别方法 确定矩阵式键盘上何键被按下介绍一种行扫描法 行扫描法 行扫描法又称为逐行或列扫描查询法是一种最常用的按键识别方法如上图所示 键盘介绍过程如下 判断键盘中有无键按下将全部行线Y0-Y3 置低电平然后检测列线的状态只要有一 列的电平为低则表示键盘中有键被按下而且闭合的键位于低电平线与4 根行线相交叉的4 个按键之中若所有列线均为高电平则键盘中无键按下 判断闭合键所在的位置在确认有键按下后即可进入确定具体闭合键的过程其方法 是依次将行线置为低电平即在置某根行线为低电平时其它线为高电平在确定某根行 线位置为低电平后再逐行检测各列线的电平状态若某列为低则该列线与置为低电平的 行线交叉处的按键就是闭合的按键 下面给出一个具体的例子 图仍如上所示8031 单片机的P1 口用作键盘I/O 口键盘的列线接到P1 口的低4 位 键盘的行线接到P1 口的高4 位列线P1.0-P1.3 分别接有4 个上拉电阻到正电源+5V 并把列线P1.0-P1.3 设置为输入线行线P1.4-P.17 设置为输出线4 根行线和4 根列线形成16 个相交点 检测当前是否有键被按下检测的方法是P1.4-P1.7 输出全0 读取P1.0-P1.3 的状态 若P1.0-P1.3 为全1 则无键闭合否则有键闭合 去除键抖动当检测到有键按下后延时一段时间再做下一步的检测判断 若有键被按下应识别出是哪一个键闭合方法是对键盘的行线进行扫描P1.4-P1.7 按下 述4 种组合依次输出 P1.7 1 1 1 0 P1.6 1 1 0 1 P1.5 1 0 1 1 P1.4 0 1 1 1 在每组行输出时读取P1.0-P1.3 若全为1 则表示为0 这一行没有键闭合否则 有键闭合由此得到闭合键的行值和列值然后可采用计算法或查表法将闭合键的行值和列值转换成所定义的键值 为了保证键每闭合一次CPU 仅作一次处理必须却除键释放时的抖动__

!发动机基本工作原理

!发动机基本工作原理

发动机基本工作原理 一、基本理论 汽油发动机将汽油的能量转化为动能来驱动汽车,最简单的办法是通过在发动机内部燃烧汽油来获得动能。因此,汽车发动机是内燃机----燃烧在发动机内部发生。 有两点需注意: 1.内燃机也有其他种类,比如柴油机,燃气轮机,各有各的优点和缺点。 2.同样也有外燃机。在早期的火车和轮船上用的蒸汽机就是典型的外燃机。燃料(煤、木头、

油)在发动机外部燃烧产生蒸气,然后蒸气进入发动机内部来产生动力。内燃机的效率比外燃机高不少,也比相同动力的外燃机小很多。所以,现代汽车不用蒸汽机。 相比之下,内燃机比外燃机的效率高,比燃气轮机的价格便宜,比电动汽车容易添加燃料。这些优点使得大部分现代汽车都使用往复式的内燃机。 二、燃烧是关键 汽车的发动机一般都采用4冲程。4冲程分别是:进气、压缩、燃烧、排气。完成这4个过程,发动机完成一个周期(2圈)。 理解4冲程活塞,它由一个活塞杆和曲轴相联,过程如下: 1.活塞在顶部开始,进气阀打开,活塞往下运动,吸入油气混合气 2.活塞往顶部运动来压缩油气混合气,使得爆炸更有威力。

直列4缸V6 水平对置4缸 不同的排列方式使得发动机在顺滑性、制造费用和外型上有着各自的优点和缺点,配备在相应的汽车上。 四、排量 混合气的压缩和燃烧在燃烧室里进行,活塞往复运动,你可以看到燃烧室容积的变化,最大值和最小值的差值就是排量,用升(L)或毫升(CC)来度量。汽车的排量一般在1.5L~4.0L之间。每缸排量0.5L,4缸的排量为2.0L,如果V型排列的6汽缸,那就是V6 3.0升。一般来说,排量表示发动机动力的大小。 所以增加汽缸数量或增加每个汽缸燃烧室的容

电脑键盘工作原理

电脑键盘工作原理 随着IBM PC机的发展,键盘也分为XT, A T, PS/2键盘以至于后来的USB键盘. PC系列机使用的键盘有83键、84键、101键、102键和104键等多种。XT和AT机的标准键盘分别为83键和84键,而286机以上微机的键盘则普遍使用101键、102键或104键。83键键盘是最早使用的一种PC机键盘,其键号与扫描码是一致的。这个扫描码被直接发送到主机箱并转换为ASCII码;随着高档PC机的出现,键盘功能和按键数目得到了扩充,键盘排列也发生了变化,产生的扫描码与83键键盘的扫描码不同。为了保持PC系列微机的向上兼容性,需将84/101/102/104键键盘的扫描码转换为83键键盘的扫描码,一般将前者叫作行列位置扫描码,而将后者称为系统扫描码。显然,对于83键键盘,这两种扫描码是相同的。 键盘是由一组排列成矩阵方式的按键开关组成,通常有编码键盘和非编码键盘两种类型,IBM系列个人微型计算机的键盘属于非编码类型。微机键盘主要由单片机、译码器和键开关矩阵三大部分组成。其中单片机采用了INTEL8048单片微处理器控制,这是一个40引脚的芯片,内部集成了8位CPU、1024×8位的ROM、64×8位的RAM、8位的定时器/计数器等器件。由于键盘排列成矩阵格式,被按键的识别和行列位置扫描码的产生,是由键盘内部的单片机通过译码器来实现的。单片机在周期性扫描行、列的同时,读回扫描信号线结果,判断是否有键按下,并计算按键的位置以获得扫描码。当有键按下时,键盘分两次将位置扫描码发送到键盘接口;按下一次,叫接通扫描码;释放时再发一次,叫断开扫描码。因此可以用硬件或软件的方法对键盘的行、列分别进行扫视,去查找按下的键,输出扫描位置码,通过查表转换为ASCII码返回。 键盘是与主机箱分开的一个独立装置,通过一根5芯电缆与主机箱连接,系统主板上的键盘接口按照键盘代码串行传送的应答约定,接受键盘发送来的扫描码;键盘在扫描过程中,7位计数器循环计数。当高5位(D6一D2)状态为全“0”时,经译码器在O列线上输出一个“0”,其余均为“1”;而计数器的低二位(D1D0)通过4选1多路选择器控制0—3行的扫描。计数器计一个数则扫描一行,计4个数全部行线扫描一遍,同时由计数器内部向D2进位,使另一列线1 变低,行线再扫描一遍。只要没有键按下,多路选择器就一直输出高电平,则时钟一直使计数器循环计数,对键盘轮番扫描。当有一个键被按下时,若扫描到该键所在的行和列时,多路选择器就会输出一个低电平,去封锁时钟门,使计数器停止计数。这时计数器输出的数据就是被按键的位置码(即扫描码)。8048利用程序读取这个键码后,在最高位添上一个“O”,组成一个字节的数据,然后从P22引脚以串行方式输出。在8048检测到键按下后,还要继续对键盘扫描检测,以发现该键是否释放。当检测到释放时,8048在刚才读出的7位位置码的前面(最高位)加上一个“1”,作为“释放扫描码”,也从P22引脚串行送出去,以便和“按下扫描码”相区别。送出“释放扫描码”的目的是为识别组合键和上、下档键提供条件。 同时,主机还向键盘发送控制信号,主机CPU响应键盘中断请求时,通过外围接口芯片8255A 一5的PA口读取键盘扫描码并进行相应转换处理和暂存;通过PB口的PB6和PB7来控制键盘接口工作。 从用途上看,键盘可分为台式机键盘、笔记本电脑键盘和工控机键盘三大类;其中台式机键

修订矩阵键盘的工作原理

修订矩阵键盘的工作原 理 TPMK standardization office【 TPMK5AB- TPMK08- TPMK2C- TPMK18】

4×4矩阵键盘的工作原理与编程51/AVR单片机学习开发系统上使用数码管显示4×4矩阵键盘的键值。 一、硬件工作原理的简单介绍 该实验使用的8位数码管显示电路和4×4矩阵键盘电路。现将这二部分的电路工作原理进行简单的介绍: 1、4×4矩阵键盘的工作原理 矩阵键盘又称为行列式键盘,它是用4条I/O线作为行线,4条I/O线作为列线组成的键盘。在行线和列线的每一个交叉点上,设置一个按键。这样键盘中按键的个数是4×4个。这种行列式键盘结构能够有效地提高单片机系统中I/O口的利用率。 图1为矩阵键盘电路图,行线接P1.4-P1.7,列线接P1.0-P1.3。 图1 矩阵键盘电路 图2 按键排列 2、数码管动态扫描显示电路 在ME300B开发系统中,采用了8位数码管动态扫描显示。它将所有数码管的8个段线相应地并接在一起,并接到 AT89S51的P0口,由P0口控制字段输出。而

各位数码管的共阳极由AT89S51的P2口控制Q20-Q27来实现8位数码管的位输出控制。 这样,对于一组数码管动态扫描显示需要由两组信号来控制:一组是字段输出口输出的字形代码,用来控制显示的字形,称为段码;另一组是位输出口输出的控制信号,用来选择第几位数码管工作,称为位码。 由于各位数码管的段线并联,段码的输出对各位数码管来说都是相同的。因此,同一时刻如果各位数码管的位选线都处于选通状态的话,8位数码管将显示相同的字符。若要各位数码管能够显示出与本位相应的字符,就必须采用扫描显示方式。即在某一时刻,只让某一位的位选线处于导通状态,而其它各位的位选线处于关闭状态。同时,段线上输出相应位要显示字符的字型码。这样同一时刻,只有选通的那一位显示出字符,而其它各位则是熄灭的,如此循环下去,就可以使各位数码管显示出将要显示的字符。 虽然这些字符是在不同时刻出现的,而且同一时刻,只有一位显示,其它各位熄灭,但由于数码管具有余辉特性和人眼有视觉暂留现象,只要每位数码管显示间隔足够短,给人眼的视觉印象就会是连续稳定地显示。 图3 数码管电路 数码管不同位显示的时间间隔可以通过调整延时程序的延时长短来完成。数码管显示的时间间隔也能够确定数码管显示时的亮度,若显示的时间间隔长,显示时数码管的亮度将亮些,若显示的时间间隔短,显示时数码管的亮度将暗些。若显示

4×4矩阵键盘的工作原理

4×4矩阵键盘的工作原理与编程 51/AVR单片机学习开发系统上使用数码管显示4×4矩阵键盘的键值。 一、硬件工作原理的简单介绍 该实验使用的8位数码管显示电路和4×4矩阵键盘电路。现将这二部分的电路工作原理进行简单的介绍: 1、4×4矩阵键盘的工作原理 矩阵键盘又称为行列式键盘,它是用4条I/O线作为行线,4条I/O线作为列线组成的键盘。在行线和列线的每一个交叉点上,设置一个按键。这样键盘中按键的个数是4×4个。这种行列式键盘结构能够有效地提高单片机系统中I/O口的利用率。 图1为矩阵键盘电路图,行线接P1.4-P1.7,列线接P1.0-P1.3。 图1矩阵键盘电路 图2按键排列 2、数码管动态扫描显示电路 在ME300B开发系统中,采用了8位数码管动态扫描显示。它将所有数码管的8个段线相应地并接在一起,并接到AT89S51的P0口,由P0口控制字段输出。而各位数码管的共阳极由AT89S51的P2口控制Q20-Q27来实现8位数码管的位输出控制。 这样,对于一组数码管动态扫描显示需要由两组信号来控制:一组是字段输出口输出的字形代码,用来控制显示的字形,称为段码;另一组是位输出口输出的控制信号,用来选择第几位数码管工作,称为位码。 由于各位数码管的段线并联,段码的输出对各位数码管来说都是相同的。因此,同一时刻如果各位数码管的位选线都处于选通状态的话,8位数码管将显示相同的字符。若要各位数码管能够显示出与本位相应的字符,就必须采用扫描显示方式。即在某一时刻,只让某一位的位选线处于导通状态,而其它各位的位选线处于关闭状态。同时,段线上输出相应位要显示字符的字型码。这样同一时刻,只有选通的那一位显示出字符,而其它各位则是熄灭的,如此循环下去,就可以使各位数码管显示出将要显示的字符。 虽然这些字符是在不同时刻出现的,而且同一时刻,只有一位显示,其它各位熄灭,但由于数码管具有余辉特性和人眼有视觉暂留现象,只要每位数码管显示间隔足够短,给人眼的视觉印象就会是连续稳定地显示。 图3数码管电路 数码管不同位显示的时间间隔可以通过调整延时程序的延时长短来完成。数码管显示的时间间隔也能够确定数码管显示时的亮度,若显示的时间间隔长,显示时数码管的亮度将亮些,若显示的时间间隔短,显示时数码管的亮度将暗些。若显示的时间间隔过长的话,数码管显示时将产生闪烁现象。所以,在调整显示的时间间隔时,即要考虑到显示时数码管的亮度,又要数码管显示时不产生闪烁现象。

汽车发动机原理课后习题答案

汽车发动机原理(第二版吴建华主编) 第一章发动机的性能 1.简述发动机的实际工作循环过程。 答:1)进气过程:为了使发动机连续运转,必须不断吸入新鲜工质,即是进气过程。此时进气门开启,排气门关闭,活塞由上止点向下止点移动。2)压缩过程:此时进排气门关闭,活塞由下止点向上止点移动,缸内工质受到压缩、温度。压力不断上升,工质受压缩的程度用压缩比表示。3)燃烧过程:期间进排气门关闭,活塞在上止点前后。作用是将燃料的化学能转化为热能,使工质的压力和温度升高,燃烧放热多,靠近上止点,热效率越高。4)膨胀过程:此时,进排气门均关闭,高温高压的工质推动活塞,由上止点向下至点移动而膨胀做功,气体的压力、温度也随之迅速下降。(5)排气过程:当膨胀过程接近终了时,排气门打开,废气开始靠自身压力自由排气,膨胀过程结束时,活塞由下止点返回上止点,将气缸内废气移除。3.提高发动机实际工作循环热效率的基本途径是什么?可采取哪些基本措施? 答:提高实际循环热效率的基本途径是:减小工质传热损失、燃烧损失、换气损失、不完全燃烧损失、工质流动损失、工质泄漏损失。提高工质的绝热指数κ。可采取的基本措施是:⑴减小燃烧室面积,缩短后燃期能减小传热损失。⑵. 采用最佳的点火提前角和供油提前角能减小提前燃烧损失或后燃损失。⑶采用多气门、最佳配气相

位和最优的进排气系统能减小换气损失。⑷加强燃烧室气流运动,改善混合气均匀性,优化混合气浓度能减少不完全燃烧损失。⑸优化燃烧室结构减少缸内流动损失。⑹采用合理的配缸间隙,提高各密封面的密封性减少工质泄漏损失。 4.什么是发动机的指示指标?主要有哪些? 答:以工质对活塞所作之功为计算基准的指标称为指示性能指标。它主要有:指示功和平均指示压力.指示功率.指示热效率和指示燃油消耗率。 5.什么是发动机的有效指标?主要有哪些? 答:以曲轴输出功为计算基准的指标称为有效性能指标。主要有:1)发动机动力性指标,包括有效功和有效功率.有效转矩.平均有效压力.转速n和活塞平均速度;2)发动机经济性指标,包括有效热效率.有效燃油消耗率;3)发动机强化指标,包括升功率PL.比质量me。强化系数P meCm. 6.总结提高发动机动力性能和经济性能的基本途径。 答:①增大气缸直径,增加气缸数②增压技术③合理组织燃烧过程④提高充量系数⑤提高转速⑥提高机械效率⑦用二冲程提高升功率。 7.什么是发动机的平均有效压力、油耗率、有效热效率?各有什么意义? 答:平均有效压力是指发动机单位气缸工作容积所作的有效功。平均有效压力是从最终发动机实际输出转矩的角度来评定气缸工作

基于人因工程学原理的键盘设计

学生课程设计(论文) 题目:基于人因工程学原理的键盘设计 学生姓名:学号: 所在院(系):机械工程学院 专业:工业工程 班级:2010级 指导教师:职称: 2013年6 月25 日 教务处制 摘要 随着科学技术的发展,特别是计算机技术的推广和普及,计算机越来越多的应用在人们的日常生活中的各个领域;无论实在工作方面,还是在娱乐休闲方面,

计算机都扮演着重要的角色,在计算机的配件中当然有个重要的配件,那便是计算机重要的输入设备之一---键盘;键盘是人和计算机交互的一个主要界面,它集成了计算机的操作的功能;然而标准的键盘并不符合人机系统高效、舒适的要求不利于提高信息输入的效率;随着日常生活中使用键盘的时间和频率的增加以及键盘设计的不合理性,一些不健康的隐患也随之而来,比如称为“累积性骨骼肌肉损伤”这种职业病;另一个方面,键盘不合理的设计也会降低工作效率。因此最需要的是设计出符合高效、舒适、安全等要求的键盘。 在科学技术不断提高的背景下,我们所使用的产品就需要不断地改善和创新,从一定程度上来讲,每一次的设计应该都是一次创新的过程,作为科学技术载体的产品创新,是改进人类工作、生活方式进而促进社会进步的重要推动力,产品的创新是理性分析产生的,从设计变量来看,工业产品的材料、形态、尺寸、色彩、机理、技术原理等方面都可以成为创新的突破点。产品在设计过程中需要注意的是要依据“以人为本”的设计思想,充分考虑人的因素,并依据人因工程的理论为依据;注重人机交互,注重人与工具的和谐性。 关键词高效,舒适,人机系统,创新,以人为本,交互 目录 摘要 ..............................................................................................................................

4X4矩阵式键盘输入程序

4*4键盘程序 readkeyboard: begin: acall key_on jnz delay ajmp readkeyboard delay:acall delay10ms acall key_on jnz key_num ajmp begin key_num:acall key_p anl a,#0FFh jz begin acall key_ccode push a key_off:acall key_on jnz key_off pop a ret key_on: mov a,#00h orl a,#0fh mov p1,a mov a,p1 orl a,#0f0h cpl a ret key_p: mov r7,#0efh l_loop:mov a,r7 mov p1,a mov a,p1 orl a,#0f0h mov r6,a cpl a jz next ajmp key_c next: mov a,r7 jnb acc.7,error rl a mov r7,a ajmp l_loop error:mov a,#00h ret key_c:mov r2,#00h mov r3,#00h mov a,r6 mov r5,#04h again1:jnb acc.0,out1 rr a inc r2 djnz r5, again1 out1: inc r2 mov a,r7 mov r5,#04h again2:jnb acc.4,out2 rr a inc r3 djnz r5,again2 out2: inc r3 mov a, r2 swap a add a,r3 ret key_ccode:push a swap a anl a,#0fh dec a rl a ;行号乘 4 rl a mov r7,a pop a anl a,#0fh dec a add a,r7 ret delay10ms: anl tmod,#0f0h orl tmod,#01h mov th0,#0d8h mov tl0,#0f0h setb tr0 wait:jbc tf0,over ajmp wait clr tr0 over:ret 单片机键盘设计 (二)从电路或软件的角度应解决的问题 软件消抖:如果按键较多,硬件消抖将无法胜任,常采用软件消抖。通常采用软件延时的方法:在第一次检测到有键按下时,执行一段延时10ms的子程序后,再确认电平是否仍保持闭合状态电平,如果保持闭合状态电平,则确认真正有键按下,进行相应处理工作,消除了抖动的影响。(这种消除抖动影响的软件措施是切实可行的。) 2.采取串键保护措施。串键:是指同时有一个以上的键按下,串键会引起CPU错误响应。 通常采取的策略:单键按下有效,多键同时按下无效。 3.处理连击。连击:是一次按键产生多次击键的效果。要有对按键释放的处理,为了消除连击,使得一次按键只产生一次键功能的执行(不管一次按键持续的时间多长,仅采样一个数据)。否则的话,键功能程序的执行次数将是不可预知,由按键时间决定。连击是可以利用的。连击对于用计数法设计的多功能键特别有效。 三、键盘工作方式 单片及应用系统中,键盘扫描只是CPU的工作内容之一。CPU忙于各项任务时,如何兼顾键盘的输入,取决于键盘的工作方式。考虑仪表系统中CPU任务的份量,来确定键盘的工作方式。 键盘的工作方式选取的原则是:既要保证能及时响应按键的操作,又不过多的占用CPU的工作时间。 键盘的工作方式有:查询方式(编程扫描,定时扫描方式)、中断扫描方式。

矩阵键盘电路设计

课程设计 题目矩阵键盘电路设计教学院计算机学院 专业计算机应用技术班级 姓名 指导教师 2010 年01 月12 日

前言.................................................................... 第一章需求分析......................................................... 功能描述......................................................... 功能分析......................................................... 第二章系统的原理及分析................................................. 用到的知识点的介绍,知识点使用的总体思路 第三章详细设计......................................................... 硬件设计 系统结构图,元器件的选择等 软件设计 所设计的软件关键模块的程序流程 第四章测试............................................................ 运行结果分析等 第五章总结............................................................. 参考文献................................................................ 附录 关键程序代码........................................................

汽车发动机、变速箱基本工作原理(图文版)

汽车发动机、变速箱基本工 作原理(图文版) -标准化文件发布号:(9556-EUATWK-MWUB-WUNN-INNUL-DDQTY-KII

发动机基本工作原理 一、基本理论 汽油发动机将汽油的能量转化为动能来驱动汽车,最简单的办法是通过在发动机内部燃烧汽油来获得动能。因此,汽车发动机是内燃机----燃烧在发动机内部发生。 有两点需注意: 1.内燃机也有其他种类,比如柴油机,燃气轮机,各有各的优点和缺点。 2.同样也有外燃机。在早期的火车和轮船上用的蒸汽机就是典型的外燃机。燃料(煤、木头、油)在发动机外部燃烧产生蒸气,然后蒸气进入发动机内部来产生动力。内燃机的效率比外燃机高不少,也比相同动力的外燃机小很多。所以,现代汽车不用蒸汽机。 相比之下,内燃机比外燃机的效率高,比燃气轮机的价格便宜,比电动汽车容易添加燃料。这些优点使得大部分现代汽车都使用往复式的内燃机。 二、燃烧是关键 汽车的发动机一般都采用4冲程。(马自达的转子发动机在此不讨论,汽车画报曾做过介绍) https://www.360docs.net/doc/e618733933.html,/leonhou

4冲程分别是:进气、压缩、燃烧、排气。完成这4个过程,发动机完成一个周期(2圈)。 理解4冲程活塞,它由一个活塞杆和曲轴相联,过程如下 1.活塞在顶部开始,进气阀打开,活塞往下运动,吸入油气混合气2.活塞往顶部运动来压缩油气混合气,使得爆炸更有威力。 3.当活塞到达顶部时,火花塞放出火花来点燃油气混合气,爆炸使得活塞再次向下运动。 4.活塞到达底部,排气阀打开,活塞往上运动,尾气从汽缸由排气管排出。 注意:内燃机最终产生的运动是转动的,活塞的直线往复运动最终由曲轴转化为转动,这样才能驱动汽车轮胎。 https://www.360docs.net/doc/e618733933.html,/leonhou 三、汽缸数 发动机的核心部件是汽缸,活塞在汽缸内进行往复运动,上面所描述的是单汽缸的运动过程,而实际应用中的发动机都是有多个汽缸的(4缸、6缸、8缸比较常见)。我们通常通过汽缸的排列方式对发动机分类:直列、V或水平对置(当然现在还有大众集团的W型,实际上是

键盘输入工作原理

键盘输入工作原理 作者:飄lá┽蕩去来源:博客园发布时间:2007-11-12 14:37 阅读:1809 次原文链接[收藏] Windows 窗体编程 键盘输入工作原理 Windows 窗体通过引发键盘事件来处理键盘输入以响应 Windows 消息。大多数Windows 窗体应用程序都通过处理键盘事件来以独占方式处理键盘输入。但是,必须了解键盘消息的工作方式,才能实现更高级的键盘输入方案(如在按键到达控件之前截获它们)。本主题描述 Windows 窗体能够识别的按键数据的类型,并概述键盘消息的传送方式。有关键盘事件的信息,请参见使用键盘事件。 按键的类型 Windows 窗体将键盘输入标识为由按位Keys枚举表示的虚拟键代码。使用Keys枚举,可以综合一系列按键以生成单个值。这些值与 WM_KEYDOWN 和 WM_SYSKEYDOWN Windows 消息所伴随的值相对应。可通过处理KeyDown或KeyUp事件来检测大多数物理按键操作。字符键是Keys枚举的子集,它们与WM_CHAR 和 WM_SYSCHAR Windows 消息所伴随的值相对应。如果通过组合按键得到一个字符,则可以通过处理KeyPress事件来检测该字符。或者,可以使用由Visual Basic 编程接口公开的Keyboard来发现已按下的键并发送它们。有关更多信息,请参见访问键盘。 键盘事件的顺序 正如上面列出的那样,在一个控件上可能出现三个与键盘相关的事件。以下顺序是发生这些事件的常规顺序: 1.用户按“a”键,该键将被预处理和调度,而且会发生KeyDown事件。 2.用户按住“a”键,该键将被预处理和调度,而且会发生KeyPress事件。 在用户按住某个键时,此事件会发生多次。 3.用户松开“a”键,该键将被预处理和调度,而且会发生KeyUp事件。 键的预处理 像其他消息一样,键盘消息是在窗体或控件的WndProc方法中处理的。但是,在处理键盘消息之前,PreProcessMessage方法会调用一个或多个方法,这些方法可被重写以处理特殊的字符键和物理按键。您可以重写这些方法,以便在控件

相关文档
最新文档