键盘接口
- 格式:doc
- 大小:25.50 KB
- 文档页数:8
键盘 : 接口类型接口类型是指键盘与电脑主机之间相连接的接口方式或类型。
目前市面上常见的键盘接口有三种:老式AT接口、PS/2接口以及USB接口。
老式AT接口,俗称大口,目前已经基本淘汰,因此不作介绍。
不同的键盘有不同的接口,了解了键盘的接口就不会发现买回来的键盘无法使用的情况。
其中PS/2接口可以说是现在每一款主板都配备的鼠标接口,是目前最通用的,有时我们也把它称为“圆口”;与“圆口”相对应的是“大口”,它多见于一些老式主板上,即AT接口方式(已经很少见了)。
而USB接口则是相对于前两者出现较晚的产品,而且主板的USB接口不仅可以用来接鼠标,还可以连接其它USB设备,并且传输速度更高,也节省了主板的PS/2口。
现在的主板一般都具备PS/2和USB两种接口。
PS/2接口最早出现在IBM的PS/2的机子上,因而得此名称。
这是一种鼠标和键盘的专用接口,是一种6针的圆型接口,但键盘只使用其中的4针传输数据和供电,其余2个为空脚。
PS/2接口的传输速率比COM接口稍快一些,而且是ATX主板的标准接口,是目前应用最为广泛的键盘接口之一。
键盘和鼠标都可以使用PS/2接口,但是按照PC'99颜色规范,鼠标通常占用浅绿色接口,键盘占用紫色接口。
虽然从上面的针脚定义看来二者的工作原理相同,但这两个接口还是不能混插,这是由它们在电脑内部不同的信号定义所决定的。
USB接口USB的全称是Universal Serial Bus,USB支持热插拔,即插即用的优点,所以USB接口已经成为MP3的最主要的接口方式。
USB有两个规范,即USB1.1和USB2.0。
PS/2接口和USB接口的键盘在使用方面差别不大,由于USB接口支持热插拔,因此USB接口键盘在使用中可能略方便一些。
但是计算机底层硬件对PS/2接口支持的更完善一些,因此如果电脑遇到某些故障,使用PS/2接口的键盘兼容性更好一些。
主流的键盘既有使用PS/2接口的也有使用USB接口的,购买时需要根据需要选择。
键盘接口出现故障怎么办键盘接口内部的弹性接触片由于长时间的使用或者是经常性的弯曲拉动,有时候就会出现扩张现象,从而也就导致了键盘插头的针跟接口中的弹性接触片接触不良或者是没法接触。
一起来看看键盘接口出现故障怎么办,欢迎查阅!键盘的常见故障及处理方法一、键盘的个别按键不能输入这个时候计算机启动时自检正常,但启动后,大多数按键是可以正常输入,有个别的按键不能输入。
这种情况说明键盘上的电路、主机键盘控制接口是正常工作的。
个别按键不能输入的原因可能是该按键座内的弹片失效或者是键内被灰尘污染。
这个时候只要打开键盘,用干的毛巾擦擦按键与金属接触的地方,如果弹片损坏,就小心的拨正它,实在不行就换一个就可以了。
二、按键输入的不是想要的信息当正常启动机器后,在输入框中输入某个按键的字符时时,显示出来的并不是本位按键上的字符,而显示其它键位的字符。
这种情况大多数按键是正常,有几个键位输入时不显示键位本身的字符,而显示其它按键位的字符,一般是按键的连线松动或脱落,造成按键码串位所致。
解决这种情况只要打开键盘,查看键位连接线,查出故障位置,调整正确后,然后拧紧螺丝就可以了。
三、键盘的灰尘清理使用久了,无论是键盘表面还是键盘的内部,都可能积满了灰尘。
这个时候怎么清理呢。
可以把键盘反过来轻轻拍打,让其内的灰尘落出;也可以用湿布清洗键盘表面,但注意湿布一定要拧干,以防水进入键盘内部。
使用时间较长的键盘需要拆开进行维护。
拆卸键盘比较简单,拔下按键盘与主机连接的电缆插头,然后把键盘正面向下放到桌子上,卸下底板上的螺钉,即可取下按键盘后盖板。
如果是清理键盘的内部,一定记着不要用水来清洗,因为水很容易腐蚀按键盘里面的金属。
可以用酒精清洗。
也可以可以用油漆刷或者油画笔扫除电路板和键盘按按键上的灰尘。
四、键盘接口损坏有些时候,键盘的接口损坏,怎么输入也不管用。
这种情况,就要把按键盘拆开。
把按键帽取下,滴入酒精,装上按键帽,反复敲击几次。
键盘、鼠标接口针脚图
主板背面键盘接口针脚图
主板背面鼠标接口针脚图
键盘、鼠标接口的各针脚功能
时钟脚(CLOCK)同步,并通过数据脚(DA TA)交换数据。
主板中键盘、鼠标的接口电路主要由PS/2接口、电容、电感、排阻、跳线、南桥芯片或I/O芯片等组成,主板键盘、鼠标接口电路的时钟信号和数据信号一般由南桥或I/O芯片控制。
检测键盘/鼠标接口时,可以测量以下关键测试点
1、测量键盘、鼠标接口的供电引脚(第4脚)对地阻值,正常阻
值应为180~380Ω。
2、测量键盘、鼠标接口的数据线(第1脚)和时钟脚(第5脚)
的对地阻值,正常阻值应为600Ω左右。
键盘接口键盘接口第十章键盘接口知识目标:掌握独立式与行列式键盘的工作原是理解键盘接口程序的编制方法掌握按键抖动的原因及处理方法。
技能目标:能设计两种键盘电路会编写简单的独立式键盘程序。
素质目标:养成扩展嵌入式系统芯片外围相关知识的习惯。
项目四数字万年历的设计要求:设计一单片机控制的数字万年历。
它采用液晶显示可以显示年、月、日、星期小时、分钟、秒及当前的温度等信息。
、项目介绍:此项目涉及键盘、显示接口的问题还要用到数字温度传感器DSB及时间芯片DS。
所涉及的知识广泛综合性也很强。
只要认真、耐心地去边做边学一定会提高综合编程能力及调试能力达到单片机助理工程师甚至是工程师的水平。
、电路图如图所示。
实际连接中要将DSB的中间一个引脚通过K的电阻上拉到电源正极。
、元件清单单片机ATSLCDSMCALCM数字温度传感器B(或)TO封装时间芯片DS晶振MHZ、KHZ电阻:K、K可调、K排阻、K各一个电容:uF、pF*、电池:V*(或V)可充电(带电池座)按键*项目四任务万年历键盘的设计要求设计个输入键的键盘它能调整日期、时间。
任务分析:万年历中的时间或日期要经常进行效正这里就牵涉到从外部输入到单片机信息的问题即人要输入接口。
键盘基本问题键盘分编码键盘和非编码键盘。
键盘上闭合键的识别由专用的硬件编码器实现并产生键编码号或键值的称为编码键盘如BCD码键盘、ASCLL码键盘等而靠软件来识别的称为非编码键盘非编码键盘有分为:独立式非编码键盘和行列式非编码键盘。
在单片机组成的测控系统及智能化仪器中用的最多的是非编码键盘。
键的识别即如何识别键盘的问题。
按键键盘由一组规则排列的按键组成一个按键实际上是一个开关元件也就是说键盘是一组规则排列的开关。
单片机使用的按键是一种常开型的开关平时按键的两个触点处于断开状态按下键时它们才闭合。
键的抖动按键在闭合和断开时触点会存在抖动现象:抖动时间一般为~ms。
抖动会引起一次按键被误读多次。
为确保CPU对键的一次闭合仅做一次处理必须去除键抖动。
抖动的去除可以采用硬件的办法也可以软件的办法。
硬件去抖动的方法这里不予介绍可参考数字电路相关的书籍。
软件去抖动的方法其实就是利用延时来去掉这一抖动时间在具体程序设计中再讨论独立式键盘独立式按键是指各按键相互独立地接通一条输入数据线。
当任何一个键按下时与之相连的输入数据线即可读入数据而没有按下时读入。
图独立键盘电路图独立式键盘的电路简单易于编程但占用的IO 口线较多当需要较多按键时可能产生IO资源紧张问题。
设计一个独立式按键的键盘接口并编写键扫描程序电路原理图如图所示键号从上到下分别为~。
C语言程序清单:#includereghvoidkey(){unsignedcharkP=xff输入时P口置全k=P读取按键状态if(k==xff)无键按下返回returndelayms()有键按下延时去抖k=Pif(k==xff)确认键按下return抖动引起返回while(P!=xff)等待键释放switch(k){case:xfe…号键按下时执行程序段breakcase:xfd…号键按下时执行程序段break…~号键程序省略case:xf…号键按下时执行程序段break}行列式键盘为了减少键盘与单片机接口时所占用IO线的数目在键数较多时通常都将键盘排列成行列矩阵形式。
每一水平线(行线)与垂直线(列线)的交叉处通过一个按键来连通。
将IO口分为行线和列线按键跨接在行线和列线上列线通过上拉电阻接正电源。
利用这种结构只需N条行线和M条列线即可组成具有N×M个按键的键盘。
键值:按键闭合时的数值键模:按键代表的数值。
特点:占用IO口线较少但软件将较为复杂。
矩阵式键盘按键的识别:行扫描法及线反转法工作原理扫描法线反转法一、扫描法判别键盘中有无键按下。
向行线输出全读入列线状态。
如果有键按下总有一列线被拉至低电平从而使列输入不全为。
查找按下键所在位置。
依次给行线送低电平查列线状态。
全为则所按下的键不在此行否则所按下的键必在此行且是在与零电平列线相交的交点上的那个键。
图矩阵键盘电路图对按键位置进行编码。
找到所按下按键的行列位置后对按键进行编码即求得按键键值。
二、线反转法、判断哪一列有键压下写端口(xf):行线电平=列线电平=。
读端口进行判断:若P=xf→没有按键压下若P≠xf→某列有键压下→K、判断哪一行有键压下写端口(xf):行线电平=列线电平=。
读端口进行判断:若P=xf→没有按键压下若P≠xf→某行有键压下→K、将K与K相“或”并存于K(形成键值)闭合键所在行、列的状态均为其余皆为。
第一行的键值:、、、整个键盘的键值(对应为F):xee,xde,xbe,xe,xed,xdd,xbd,xd,xeb,xdb,xbb,xb,xe,xd,xb,x、利用查表比对法求出闭合按键的键模。
将各键的键值依次存放在一个数组中其顺序号就是键模。
charkeybuf={xee,xde,xbe,xe,xed,xdd,xbd,xd,xeb,xdb,xbb,xb,xe,xd,xb,x}利用循环变量i控制比对过程两者相等时的i就是闭合键的键模。
eedebeeedddbddABebdbbbbCDEFedb行列式键盘扫描流程及程序要求:×行列式键盘按下任意按键后LED显示器上显示该键的键模(~F)。
图×行列式键盘仿真电路仿真电路图程序流程图线反转法#includereghcharledmod={xf,x,xb,xf,x,xd,xd,x,xf,xf,x,xc,x,xe,x,x}共阴段码表charkeybuf={xee,xde,xbe,xe,xed,xdd,xbd,xd,xeb,xdb,xbb,xb,xe,xd,xb,x}键盘编码表chargetKey(void)voiddelay(unsignedinttime){unsignedintj=for(timetime) for(j=jj)}voidmain(void){charkey=P=xwhile(){key=getKey()获取键盘键值if(key!=)如果有键按下{P=ledmodkey在P口显示相应的键值(F)delay()}elseP=x如果没有键按下则不显示。
}}chargetKey(void){chark=,k=,i=P=xf输出行扫描码delay()if(P!=xf)如果有键按下{k=P读取列键值delay()if(P==k)如果值不变{P=xf输出列扫描码delay()k=P读取行键值k=k|k合成行列键值for(i=ii){if(keybufi==k)returni查表得到键值并返回键值(F)}}}return 如果没有键按下则返回}扫描法P口接*键盘作为输入P口输出。
按下号键数码管显示按下号键数码管显示以此类推。
#includeregh#includeabsacch#defineucharunsignedchar#defineuintunsign edintucharcodenum={xf,x,xb,xf,x,xd,xd,x,xf,xf,x,xc,x,xe,x,x,x}voiddelay s(void)ucharkbscan(void)voidmain(){ucharkey,tempwhile(){key=kbscan( )switch(key){casex:temp=breakcasex:temp=breakcasex:temp=breakcasex :temp=breakcasex:temp=breakcasex:temp=breakcasex:temp=breakcasex: temp=breakcasex:temp=breakcasex:temp=breakcasex:temp=breakcasex:t emp=breakcasex:temp=breakcasex:temp=breakcasex:temp=breakcasex:te mp=breakdefault:temp=break}P=numtempdelays()}}键消抖的延时函数voiddelays(void){ucharifor(i=ii)}键扫描函数ucharkbscan(void){ucharscancode,recodeP=xfif((Pxf)!=xf){delays()if((P xf)!=xf){scancode=xfe逐行扫描的初值while((scancodex)!=){P=scancode输出扫描码if((Pxf)!=xf)本行有键按下{recode=(Pxf)|xfreturn((~scancode)(~recode))返回特征字节码}elsescancode=(scancode)|x}}}return()无键按下返回值为}项目训练(作业):在P口增加几个按键使之可以调整班级、学号。
万年历中键盘的度值ucharTempBuffer,weekvalue万年历主程序流程图��开始初始化:时钟芯片、液晶模块、温度检测芯片�显示时间、时期及温度信息�有无按键按下?调用按键调整程序�图万年历主程序流程图是否main(){flag=时钟停止标志LCDInitial()液晶初始化InitDSB()DSB初始化InitialDS()时钟芯片初始化upflag=downflag=done=进入默认液晶显示while(){while(done==)keydone()进入调整模式while(done==){showtime()液晶显示数据flag=Setkey()扫描各功能键}}}键盘扫描程序voidSetkey()模式选择按键{Set=if(Set==)如果有键按下{mdelay()延时去抖动。
count=countSetkey按一次,count就加done=置进入调整模式标志。
while(Set==)等待按键释放。
}}voidkeydone()按键功能执行{ucharSecondif(flag==)关闭时钟,停止计时{Write(xe,x)写入允许temp=Read(x)Write(x,temp|x)Write(xe,x)禁止写入flag=}Setkey()扫描模式切换按键switch(count)三个子函数outkey()扫描跳出按钮Upkey()扫描加按钮Downkey()扫描减按钮、outkey()voidoutkey()跳出调整模式,返回默认显示{ucharSecondif(out==)调整确认键按下{mdelay()延时去抖动count=调整项目回到初始值。
下面一段程序主要是与时间芯片相关暂不讨论。
hidesec=,hidemin=,hidehour=,hideday=,hideweek=,hidemonth=,hideyear =Second=Read(DSSECOND)Write(xe,x)写入允许Write(x,Secondxf)Write(xE,x)禁止写入done=置调整结束标志while(out==)等待跳出键松开}}、Upkey()扫描加按钮voidUpkey()升序按键{Up=置升序结束标志if(Up==)如果升序按键按下则UP={mdelay()延时去抖动switch(count)根据要调整的项目不同决定升序键按下后的具体调整内容。