㈠ USB暖手鼠标的电路图和作法
你指的应该是鼠标垫
用的是散热材料
通过U口供电发热
U口5V电 所以是非常安全地
通常能保持温度在45度左右
至于电路图 这个是专利 你可以买一个研究一下
㈡ 有些鼠标芯片是同时支持USB和PS/2接口的,两种接口的外围电路一样么
你需要研究芯片的手册啦。应该有外围电路的
㈢ usb鼠标怎么接线
老大,,我教你 一个方法,,保证成功...鼠标里面不知你会不会看点简单的电路,,,那四个接点你看一下哪个是地线,,,确定好地线后,,安装上黑色线,,黑色过来就是绿色线,,绿色过来就是白色线,,白色过来就是红色线,,保证OK..不行联系我!!
㈣ 鼠标线接法(定义)
主板USB接口供电方式汇总2006年09月20日 星期三 09:03主板板载的USB接口使用方便,可提供5V/500mA电源(其实在USB的设计规范中已指出了USB系统中允许的最小电压。对于主板上板载的USB接口,这个值为4.75V)。主板USB接口提供的+5V电源一般有两个来源:电脑电源的+5V或+5VStandBy,当选用+5V(红色线,电流最大可达25A)时,供电电流可达数安倍;如果使用+5VSB(紫色线),因一般是用集成电路7805稳压,理论最大输出电流为1.5A,实际生产中厂家为节约成本,都不加散热片或散热片很小,供电电流就限制在500mA左右,因为该路电源的主要设计功能是为键盘开机,调制解调器远程唤醒,网卡启动,定时开机供电用,500mA足够用了。
不同的主板因设计不同,其板载USB口供电的方式也不同,一般有如下几种:
一、USB的供电部分与键盘/鼠标相同
1、由跳线选择使用+5V或+5VStandBy,当使用+5VStandBy时USB接口的供电能力十分有限(但是好处是即使关机时USB接口也可供电,可用来给一些手持设备充电)。这个跳线通常就是“允许/禁止键盘开机”。
2、由+5V电源通过一只三极管为接口供电,供电方式可控,电流有限制(通常是三极管自身功率限制了输出能力)。输出端一般有自恢复保险丝,该保险丝的熔断电流应小于三极管的极限电流。
3、直接与+5V电源相连,由串联的自恢复保险丝提供过流保护,能提供的电流通常较大,例如:在技嘉GA-6OXT主板上,自恢复保险丝正常工作电流为2.5A,过载保护电流为4.7A。
4、通过跳线选择是“通过三极管与+5V连接”还是“直接与+5V连接”,选择通过三极管与+5V连接时,情况与第2点相同(受限于三极管的输出功率,串联的自恢复保险丝是与三极管匹配的);选择直接连接时,还要看是不是与前者使用同一个自恢复保险丝,如果是的话,供电电流也不会大。如果是独立的,那情况与第3点类似。
5、键盘,鼠标与USB供电不在一起,键盘和鼠标通过保险电阻直接与电源+5V相连,而前后USB接口供电由三极管供给。如:捷波PR22-S。
二、USB的供电部分是独立的
1、由+5V电源通过一只三极管供电,供电方式可控,电流有限制(通常是三极管自身功率限制了输出能力)。输出端一般有自恢复保险丝,该保险丝的熔断电流应小于三极管的极限电流。
2、直接与+5V电源相连,由串联的自恢复保险丝提供过流保护,能提供的电流通常较大。
在USB接口独立供电的设计下,“允许/禁止键盘开机”的跳线跟USB口的供电能力就没什么关系了。正常情况下不应该出现的设计是:USB独立供电,但是连接的是+5VStandBy;USB供电电路中没有串接自恢复保险丝(一旦出现短路,影响面极大)。
电脑的前置USB接口也是从主板上接出来的,一般来讲前置USB口的供电方式有两种选择:一是和后置口的供电方式一样,二是直接与+5V相连(要串联自恢复保险丝)。不过前置接口真实的供电能力、包括实际的传输速度,还要受制于连接线和中间各环节插接头的质量。
从外在现象判断USB供电类型的一些方法:板载USB接口如果是可控供电,在刚开机时或机器休眠后,USB光电鼠标的灯是熄灭状态。只有当开始载入系统或进入正常工作模式时,光电鼠标的灯才会亮;而USB接口采用+5V直供的主板,只要一开机上电,USB光电鼠标的灯就会亮,在休眠状态下也不会熄灭;USB接口采用+5VSB直供电的主板,无法是否关机开机或休眠,USB接口的光电鼠标和PS/2接口的键盘鼠标的灯都会始终常亮。
三、USB扩展卡的接口供电方式
1、通过可控制、带过流保护的电源模块供电。我手里有一块USB2.0扩展卡,提供四个USB口,使用两个AIC1526芯片供电,查了一下资料,该芯片专用于USB通道的供电,每片可提供两个通道、每通道500mA的电流。
2、直接与+5V电源相连,由串联的自恢复保险丝提供过流保护。市面上不少廉价的扩展卡都是这样做的。
四、使用另一个USB接口作为辅助供电口
按一般的联想,每个接口500mA,我接上了两个接口,就应该有1000mA左右的供电能力,随便接哪两个USB口都是相同的表现——但实际并不如此。通常USB接口的供电为一个USB Host Hub支持两个USB接口,使用同一路电源供应。主板后置(或前置)的板载USB接口如果只有两个,供电应该是取自同一路电源,无论使用一个或两个USB设备,其总的供电电流被限制在一定范围之内,特别是在PC的电源性能较差或使用功率偏小的电源时表现更为明显。如果我们使用的是耗电大的外置USB设备(大容量、高转速的2.5寸移动硬盘),即使两个USB接口都接上了,未必能达到500mA+500mA的效果。
不过,对于后置(或前置)的板载USB接口为四个或六个的情况,就可以避免这个问题,但是要注意不要接在同一个USB Host Hub出来的两个口上。当已经接在了某两个USB口上,却不能正常工作,可以尝试调换一下辅助供电接口的位置,或许就可以解决。
在使用USB2.0扩展卡时,通常也可以参照上述原则。但有时候也有不同情况:上面说的使用AIC1526供电的卡,第一片1526供应给Port1、Port2,第二片1526供应给Port3、Port4,在将某外置硬盘盒接到Port2、Port3时,会出现供电不足,但是如果接到Port1、Port3就一切正常,按理说一片AIC1526上的两个通道都能提供500mA的电流,何况接到Port2、Port3时是两个1526芯片一起供电,不存在同一片芯片总供应电流大了导致发热的问题——特别是换接为Port1、Port3时仍是两个芯片供电,只不过使用芯片一的另一个通道。只能解释为该供电芯片的两个通道可能在设计上就有供电不对称,不过未对该卡电路深入分析。
下面有几个实际例子可参考分析:
1.一只爱国者USB接口的10G移动硬盘,客户买回家后,在后置的USB接口上能够使用,而在前置的USB接口上根本找不到硬盘。最后客户认为是主板有问题,所以找到公司,要求换主板,最后向客户解释了其中的原委:因USB接口引线的长短不同,其供电电流会受到影响。后置USB接口直接由主板焊接,而前置USB接口经过多次连接,其接触电阻较大,损耗也大,所以引起前置USB接口供电不足,造成如此现象,这并不是主板的问题。要不,移动硬盘都带有一个键盘/鼠标接口,这是当USB接口供电不足时,可从键盘/鼠标接口提供部分辅助电流。所以后面的USB接口我们一般用于不经常更换的USB设备,一般也是耗电量大的设备,如USB接口的扫描仪和移动硬盘等,而前置接口用于经常拔插的设备,如U盘,MP3播放机等。
2.移动硬盘在其他机子上使用正常,而在客户自己的机子后置USB接口上却不能使用,即使关机了,硬盘也会哗哗的响,硬盘指示灯常亮。 (注:这款机子没有前置USB接口)。在WIN ME系统下能够发现“Unknown USB Device”,“我的电脑”属性里USB设备前面有个黄色叹号,不能够安装使用。实际上这也是USB接口供电不足的问题。这款主板的USB接口后面有一个JP3跳线,是用来允许键盘开关机的,其功能的实现就是通过改变键盘,鼠标和USB接口的供电方式,是选择+5V还是+5VSB的副电源。最后改变一下跳线,由副电源的5VSB改为主电源5V供电后,就没有问题了。不过如果想用USB接口给你的手机或掌上电脑充电时最好还是使用副电源供电,因为无论你是否开机都可以进行充电。
3.一台USB接口扫描仪(紫光3880),在销售商那里试机时正常,但客户拿回家后,在前置USB接口上工作正常,而在后置USB接口上却无法工作。当客户拿来后,非说主板有问题,公司的小伙子们也忙了老长时间,不知其所以然。其实这款主板的前后置USB接口供电方法不一样,前置的USB接口直接使用+5V主电源供电,而后置的USB接口与键盘,鼠标在一起供电,并且有一跳线可选择供电来源。最后把跳线帽一换位置,问题就解决了。
4、某兼容机前置USB接口能够使用移动硬盘,后置USB接口不能使用。客户反映新买了一个20G的移动硬盘,在自己的电脑上使用时出现了问题,在前置的USB接口上使用时硬盘的读写正常,没有问题。但插在后置的 USB接口上使用时,只能听见硬盘“哗哗”的声音,有盘符出现,但无法读写硬盘数据。此问题就是因为前置的USB接口的供电是直接取自+5V电源,而后置的USB接口和键盘,鼠标接口使用的是同一组电源,在键盘接口旁边有一跳线帽,可以用来改变键盘和USB接口的供电来源。当移动硬盘出现问题时,主板跳线所置的位置使用的是+5VSB供电,所以就出现了上述的故障现象。只要把跳线变一下位置就可以了,同时也会解决客户打电话反映的关机后光电鼠标或键盘的指示灯常亮的问题。
5、前后置USB接口不能使用移动硬盘。这种情况一般出现在前后置硬盘都使用副电源或者是主板的USB接口被严格限制的主板上,对于此问题,主板上如果没有跳线帽时,只能通过辅助电流接口从PS/2或者USB接口取电,或者使用单独的外接电源供电。
6、蓝天使WX-218移动硬盘(USB2.0)拷贝大文件时容易丢失文件尾部数据。客户反映该硬盘在拷贝大文件时总丢失,拷贝不全,拷贝小文件没有问题。这种故障也属于因为USB供电不足,在大文件拷贝时所需电流大,造成 USB接口的+5V供电电压不稳,从而导致数据传输过程中信号电平离散性加大,错误率上升,也就表现为文件拷贝过程中丢失或死机,长时间拷贝不能结束。我把该硬盘接到我的主机(主板为微星MS6309)启动计算机,硬盘发出“咔咔”的声音,在系统中不能发现新硬件;在关机接入辅助电流接口 PS/2,再开机,仍然和刚才一样的表现,还是不能发现硬盘。当把该移动硬盘接入笔记本的USB接口时,拷贝三四百兆的大文件没有发现问题,播放电影也没有问题。这种故障其实根本就不是故障,其原因就是因为台式机主板的USB接口的电流输出限制才造成了移动硬盘的使用不正常。
㈤ 键盘鼠标接口电路跑线路
PS/2(键盘鼠标复)接口:
1.紫色为制键盘Keyboard,绿色为鼠标MOUSE
2.阵脚功能:1:数据脚data
5:时钟脚clk
4:5v供电脚power
3:接地脚gnd
6、2:空脚nc
3.PS/2电路简图:(见图)
4.PS/2接口故障检修:
(1)查4#5V供电有无电压,没有则追线;
(2)1#和5#对地阻值在400—700欧,误差在10欧内;
阻值偏小:拆除与1#和5#相连的排容(多数为此问题);
换I/O或SB(南桥)。
阻值偏大:查偏大脚相连电阻或电感有无损坏;
追接口到I/O或SB的线路有无open;
换I/O或SB。
(3)确定PS/2接口有无损坏;(可放在第一时间)
(4)换I/O或SB;
(5)刷Bios。
基本知识点就这些,具体报告还要你自己整理。(手工辛苦啊)
㈥ 键盘和鼠标的工作原理
太复杂了额~~~~~
原理:鼠标器按其工作原理可分为机械式和光电式两种,最常见的是机械式鼠标器。现在的机械鼠标器实际上是光机鼠标器,即将滚轮的机械转动转换成光信号,再变为电信号。下面以这种鼠标器为例说明其工作原理。
在机械式鼠标器底部有一个露出一部分的塑胶小球,当鼠标器在操作桌面上移动时,小球随之转动,在鼠标器内部装有三个滚轴与小球接触,其中有两个分别是X轴方向和Y轴方向滚轴,用来分别测量X轴方向和Y轴方向的移动量,另一个是空轴,仅起支撑作用。拖动鼠标器时,由于小球带动三个滚轴转动,X轴方向和Y轴方向滚轴又各带动一个转轴(称为译码轮)转动。译码轮的两侧分别装有红外发光二极管和光敏传感器,组成光电耦合器。光敏传感器内部沿垂直方向排列有两个光敏晶体管A和B。由于译码轮有间隙,故当译码轮转动时,红外发光二极管发出的红外线时而照在光敏传感器上,时而被阻断,从而使光敏传感器输出脉冲信号。光敏晶体管A和B被安放的位置使得其光照和阻断的时间有差异,从而产生的脉冲A和脉冲B有一定的相位差,利用这种方法,就能测出鼠标器的拖动方向。也就是说,脉冲A比脉冲B的相位提前时,表示一个移动方向;反之,脉冲B比脉冲A的相位提前时,表示另一个移动方向。同时,脉冲信号周期也能反映出移动速度。检测到的X轴方向和Y轴方向移动的合成即代表了鼠标器的移动方向。将上述电信号重新编码后形成串行信号,再通过串行口COM1或COM2输入计算机,计算机即可判断鼠标器的移动方向。由以上的叙述可以得出结论:如果给X轴方向和Y轴方向光敏传感器的输出端送入两组脉冲信号,控制每一组脉冲的相位差即能达到与拖动鼠标器相同的作用。
无线鼠标实现原理
DRF(Digital radio frequency,数字无线电频率)技术能够对短距离通讯提供充足的带宽,非常适合鼠标和键盘这样的外围设备使用,其原理非常简单,鼠标部分工作与传统鼠标相同,再用无线发射器把鼠标在X或Y轴上的移动,按键按下或抬起的信息转换成无线信号并发送出去,无线接收器收到信号后经过解码传递给主机,驱动程序告诉操作系统鼠标的动作,该把鼠标指针移向哪个方向或是执行何种指令。
采用高频无线电(射频)技术,只要在限定距离以内,就可以在任何位置使用,几乎不受障碍物的影响。一般传输的距离达10~20米,已经足够用户使用。
无线电的最大特点是可以进行360度全方位无线射频遥控,而且耗电量较低,具有触发工作待机休眠。无线设备的接受端已经内置接收器,发射器装在主机的设备口上,均不会影响产品外观。
无线电接收器本身所具有的接口是USB或PS2的,可以从计算机的PS/2接口取电,不需要另加电池。它具有双或多波段,如果有多个无线设备,均可以通过这一个接收器进行管理,键盘工作频率一般占用通道1(如:27.185M和27.035M),鼠标工作频率占用通道2(如:27.085M和27.135M),工作时鼠标和键盘或多个鼠标之间干扰性较低,而且不会影响无线电话等数字无线设备。
无线鼠标具有节能模式,采用低功耗芯片之余,还有多重省电措施,在运行模式下LED闪烁速度是1500次/s,而在最省电的模式下闪烁速度只有2次/s,移动鼠标或是按下鼠标按键,鼠标再迅速恢复到正常模式。此外,有的鼠标支持手动唤醒节能技术,在鼠标的两侧装配有导电橡胶,通过鼠标上的触摸开关来随意控制电源,当用户的手离开鼠标2秒钟后,鼠标就马上进入睡眠状态,用户需要使用鼠标时,只要手一触到导电橡胶,鼠标立即被激活,效率比多重节能模式更高。以上种种方式,都延长了电池的使用寿命,接近一般无线滚球鼠标的水平,约为三至六个月。当然,其耗电量再小也小不过传统鼠标。
键盘的工作原理
键盘是计算机中使用最普遍的输入设备,它一般由按键、导电塑胶、编码器以及接口电路等组成。
在键盘上通常有上百个按键,每个按键负责一个功能,当用户按下其中一个时,键盘中的编码器能够迅速将此按键所对应的编码通过接口电路输送到计算机的键盘缓冲器中,由CPU进行识别处理。通俗地说也就是当用户按下某个按键时,它会通过导电塑胶将线路板上的这个按键排线接通产生信号,产生了的信号会迅速通过键盘接口传送到CPU中
很复杂吧......
㈦ 鼠标中的光敏传感器有十二个接口,该如何接入其他电路中
晕死。。。直接买一个。。。
㈧ 鼠标接口的电学引脚
1: 数据
2: 空
3:地
4:+5V
5:时钟
6: 空
PS/2接口是目前最常见的鼠标接口,最初是IBM公司的专利,俗称“小口”。这是一种鼠标和键盘的专用接口,是一种6针的圆型接口。但鼠标只使用其中的4针传输数据和供电,其余2个为空脚。PS/2接口的传输速率比COM接口稍快一些,而且是ATX主板的标准接口,是目前应用最为广泛的鼠标接口之一,但仍然不能使高档鼠标完全发挥其性能,而且不支持热插拔。在BTX主板规范中,这也是即将被淘汰掉的接口。
需要注意的是,在连接PS/2接口鼠标时不能错误地插入键盘PS/2接口(当然,也不能把PS/2键盘插入鼠标PS/2接口)。一般情况下,符合PC99规范的主板,其鼠标的接口为绿色、键盘的接口为紫色,另外也可以从PS/2接口的相对位置来判断:靠近主板PCB的是键盘接口,其上方的是鼠标接口
摘 要分析PS/2协议;介绍PS/2标准健盘的第二套扫描码和命令集,并给出在单片机系统中支持PS/2健盘的硬件连接方式和利用Keil C51语言实现的驱动程序设计及部分代码。该驱动程序可以方便地移植到其他单片机或嵌入式系统中。
关健词 PS/2协议 PS/2健盘 单片机 驱动程序
在单片机系统中,经常使用的键盘都是专用键盘。这类键盘都是单独设计制作的,成本高,连线多,且可靠性不高。这些问题在那些要求键盘按键较多的应用系统中显得更加突出。与此相比,在 PC系统中广泛使用的PS/2键盘具有价格低、通用可靠,且使用的连线少(仅使用2根信号线)的特点,并可满足多数系统的要求。因此,在单片机系统中应用PS/2键盘是一种很好的选择。
本文在分析PS/2协议和PS/2键盘工作原理与特点的基础上,给出在AT89C51单片机上实现对PS/2键盘支持的硬件连接方法以及驱动程序的设计实现。
1 PS/2协议
现在PC机广泛采用的PS/2接口为mini - DIN 6引脚的连接器。其引脚如图1所示。
740)this.width=740" border=undefined>
PS/2设备有主从之分,主设备采用female插座,从设备采用male插座。现在广泛使用的PS/2键盘鼠标均工作在从设备方式下。PS/2接口的时钟与数据线都是集电
极开路结构的,必须外接上拉电阻。一般上拉电阻设置在主设备中。主从设备之间数据通信采用双向同步串行方式传输,时钟信号由从设备产生。
(1)从设备到主设备的通信
当从设备向主设备发送数据时,首先会检查时钟线,以确认时钟线是否是高电平。如果是高电平,从设备就可以开始传输数据;否则,从设备要等待获得总线的控制权,才能开始传输数据。传输的每一帧由11位组成,发送时序及每一位的含义如图2所示。
740)this.width=740" border=undefined>
每一帧数据中开始位总是为0,数据校验采用奇校验方式,停止位始终为1。从设备到主设备通信时,从设备总是在时钟线为高时改变数据线状态,主设备在时钟下降沿读人数据线状态。
(2)主设备到从设备的通信
主设备与从设备进行通信时,主设备首先会把时钟线和数据线设置为“请求发送”状态。具体方式为:首先下拉时钟线至少100 us来抑制通信,然后下拉数据线“请求发送”,最后释放时钟线。在此过程中,从设备在不超过 10us的间隔内就要检查这个状态。当设备检测到这个状态时,将开始产生时钟信号。
此时数据传输的每一帧由12位构成,其时序和每一位含义如图3所示。
740)this.width=740" border=undefined>
与从设备到主设备通信相比,其每帧数据多了一个ACK位。这是从设备应答接收到的字节的应答位,由从
设备通过拉低数据线产生,应答位ACK总是为。。主设备到从设备通信过程中,主设备总是在时钟为低电平时改变数据线的状态,从设备在时钟的上升沿读入数据线状态。
2 PS/2键盘的编码与命令集
(1) PS/2扭盘的编码
现在PC机使用的PS/2键盘都默认采用第二套扫描码集。该扫描码集可参考文献[1]。扫描码有两种不同的
类型:通码(make code)和断码(break code)。当一个键被按下或持续按住时,键盘会将该键的通码发送给主机;而当一个键被释放时,键盘会将该键的断码发送给主机。
根据键盘按键扫描码的不同,在此可将按键分为如下几类:
第一类按键,通码为1字节,断码为OxFO+通码形式。如A键,其通码为Ox1C,断码为OxFO Ox1C, 第二类按键,通码为2字节0 xEO + 0 xXX形式,断码为OxEO+OxFO+OxXX形式。如 right ctrl键,其通码为OxEO 0x14,断码为OxEO OxFO 0x14, 第三类特殊按键有两个,print screen键通码为OxEO 0x12 OxEO Ox7C,断码为 OxEO OxFO Ox7C OxEO OxFO 0x12; pause键通码为Ox El 0x14 0x77 OxEl OxFO 0x14 OxFO 0x77,断码为空。
组合按键的扫描码发送按照按键发生的次序,如以下面顺序按左SHIFT+A键:1按下左SHIFT键,2按下 A
键,3释放A键,4释放左SHIFT键,那么计算机上接收到的一串数据为0x12 Ox1C OxFO Ox1C OxFO 0x12, 在驱动程序设计中,就是根据这样的分类来对不同的按键进行不同处理的。
(2) PS/2键盘的命令集
主机可以通过向PS/2键盘发送命令来对键盘进行设置或者获得键盘的状态等操作。每发送一个字节,主机都会从键盘获得一个应答0 xFA“重发resend"和“回应echo',命令例外)。下面简要介绍驱动程序在键盘初始化过程中所用的指令(详细键盘命令集见参考文献[1]): OxED主机在本命令后跟随发送一个参数字节,用于指示键盘上num lock, caps lock, scroll lock led的状态; OxF3主机在这条命令后跟随发送一个字节参数来定义键盘机打的速率和延时; OxF4用于在当主机发送OxF5禁止键盘后,重新使能键盘。
3 PS/2键盘与单片机的连接电路
PS/2键盘与AT89C51单片机的连接方式如图4所示。Pi. 0接 PS/2数据线,P3. 2 (INTO)接 PS/2时钟线。
因为单片机的P1,P3口内部是带上拉电阻的,所以PS/2的时钟线和数据线可以直接与单片机的P1,P3相连接。
740)this.width=740" border=undefined>
4 驱动程序设计
驱动程序使用Keil C51语言,Keil uVision2编程环境。PS/2 104键盘驱动程序的主要任务,是实现单片机与键盘间PS/2通信,以及将接收到的按键扫描码转换为该按键的键值KeyVal,提供给系统上层软件使用。
(1)单片机与健盘间PS/2通信的程序设计
在PS/2通信过程中,主设备(单片机)是在时钟信号为低时发送和接收数据信号的。因为单片机到键盘发送的是指令,需要键盘回应,所以这部分程序采用查询方式;而单片机接收键盘数据时,数据线上的信号在时钟为低时已经稳定,所以这部分程序采用中断方式,且不需要在程序中加人延时程序。
(2)健盘扫描码转换程序设计
由于键盘扫描码无规律可循,因此由键盘扫描码获得相应按键的键值(字符键为其ASCII值,控制键如Fl,
CTRL等为自定义值),只能通过查表的方式。由于按键的三种类型及部分按键对应着两个键值(如A键的键值
根据CAPS和 SHIFT键状态有 0x41 (A)和 Ox61(a)两种),因此综合考虑查表转换速度和资源消耗,设计中使用4个键盘表:键盘扫描码转换基本集和切换集kb-plain_map[ NR_ KEYS]与kb- shift- map[ NR_ KEYS];包含EO前缀的键盘扫描码转换基本集和切换集kbe0_plain_map[N又KEYS〕与kbe0_ shift-map [ NR_ KEYS]。PS/2 104键盘按键扫描码最大值为0x83,所以设置NR_ KEYS为132。所有四个键盘表的定义均为如下形式:KB_ MAP
[ MAKE CODE] = KEYVAL,如果扫描码对应的按键为空,如KB_MAP[0x00],则定义相应键值为NULL-KEY(0x00)。以下是键盘扫描码基本集的部分代码实例:
kb_plain_map[NIZKEYS] ={……
NULL- KEY; Ox2C; Ox6B; 0x69;Ox6F;Ox3O;0x39;NULL_
KEY;//扫描码Ox4O-Ox47
刀对应按键 空,逗号,K,I,0,0,9,空
//对应键值0x00,’,’,'k','i','o','0','9',0x00
……};
如此设计键盘转换表的另一个好处在于,以后如需扩展支持有ACPI, Windows多媒体按键键盘时,只需要将键表中相应处修改即可。如ACPI power按键通码为OxEO 0x37,修改 kbeO _ plain- map [ 0x37 ] = KB _ACPI_PWR即可。
特殊按键PAUSE使用单独程序处理,如果接收到OxEl就转入这段程序;而print screen键则将其看作是两
个通码分别为OxEO 0x12和OxEO Ox7C的“虚键,,的组合键来处理。
在驱动程序中声明如下全局变量:led-status其bit0一scroll lock led关0、开 1; bitl一num lock led关为。,开为1; bit2一caps lock led关为0,开为1; bit3-bit?总是。;agcs_status记录左右shift ctrl gui alt状态,bit0一左shift键,bitl一左。trl键,bit2一左gui键, bit3一左alt键,bit4-右shift键,bit5一右ctrl键,bit6一右gui键,bit7一右alt键,相应键按下则对应位为I,释放为。。EO_FLAG接到
OxEO置1; El FLAG接收到OxEl置1; FO-FLAG接收到OxFO置1。按键键值通过Keyval提供给上层使用。
PS/2键盘扫描码键值转换程序ps2_codetrans()流程如图5所示。
第一类按键的扫描码键值转换程序代码:
if (FO-FLAG) t//接收扫描码为断码
switch (mcu_revchar){//处理控制键
case 0x11:agcs_status& = OxF7;break;//左alt释放
case 0x12:agcs_status & =0xFE; break; //左shift释放
case 0x14:agcs_status&=OxFD; break;//左ctrl释放
case 0x58:if (1e走status&0x04)
le走status&二0x03; //caps lock键
else led_statusl =0x04;
ps2_ledchange();
break;
case 0x59; agcs_status&二OxEF;break;//右shift释放
case 0x77:if (led status&0x02 )
led_status& = 0x05; //num lock键
else led_status{ =0x02;
ps2_ledchange();
break;
case Ox7E; if(led_status&0x01)
led_status&=0x06; //scroll lock键
else led_statusI =0x01;
ps2_ledchange();
break;
default; break;
}
FO-FLAG = 0;lse { //接收扫描码为通码
if (1e走status衣0x04) caps flag=1;else caps-flag二0;
if (led-status & 0x02) num_flag=1;else num-flag二0;
if (scga_status&0x11) shift flag=1;else shift flag=0;
刀扫描码键值转换
if ((caps flag==shift-flag)}1(!num_flag)) KeyVal=b_plain_map[mciLrevchar];
else KeyVal二 kb-shift map[mcu_revcha];
switch (mcu-revchar){ //处理控制键或状态键
case 0x11: agcs_statusl二0x08;//左alt按下
case 0x12: ages-status}二0x01;//左shift按下
case 0x14: ages-status}二0x02;//左ctrl按下
case 0x59:agcs_status}二0x10;//右shift按下
default: break;
}
}
740)this.width=740" border=undefined>
第二类按键的扫描码键值转换程序与上相似。要注意的是在退出该程序段时对EO- FLAG和FO_FLAG标志的清0。
PAUSE键的处理程序:如果接收到OxEl,置El-FLAG= 1,然后顺次将后续接收到的7个字节数据和PAUSE的通码后7个字节比较,一致则返回KeyVal =KB PAUSE。在比较完所有 7个字节后清除El_ FLAG标志。
键盘初始化程序kb_init()流程:
① 上电后,接收键盘上电自检通过信号0 xAA,或者自检出错信号OxFC。单片机接收为OxAA,进人下一步,否则,进行出错处理。
② 关 LED指示,单片机发送 OxED,然后接收键盘回应0 xFA,接着发送0x00接收O xFA,
③ 设置机打延时和速率。单片机发送 0xF3,接收0 xFA,发送OxOO(250ms,2. Ocps),接收OxFA,
④ 检查LED,发送 0 xED,接收0 xFA,发送0x07开所有 LED),接收 OxFA。发送 0 xED,接收 0 xFA,发送0x00(关 LED),接收OxFA,
⑤允许键盘发送OxF4,接收0 xFA,键盘LED改变ps2_ledchange()函数流程:发送0 xED ~接收0 xFA~发送led-status~接收。xFA.
结 语
该驱动程序经Keil uVision2编译,在AT89C51单片机上运行通过,实现了对 PS/2 104键盘的支持,以及对字符按键大小写切换,num lock切换,控制键及组合按键的支持。该程序对其他嵌入式或单片机系统中PS/2键盘的应用也有借鉴意义。