浅谈键盘技术应用及实现方案_第1页
浅谈键盘技术应用及实现方案_第2页
浅谈键盘技术应用及实现方案_第3页
浅谈键盘技术应用及实现方案_第4页
浅谈键盘技术应用及实现方案_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、甘肃联合大学学生毕业论文题 目: 作 者: 指导老师: 学院 系 专业 级 年制 班 年 月 日浅谈键盘技术应用及实现方案内容摘要:随着计算机技术的不断发展,如今鼠标应用越来越广泛,但在文字输入领域,键盘依旧有着不可动摇的地位。作为重要的输入工具,键盘并不因循守旧,为了顺应潮流,向着多媒体、多功能和人体工程学方向不断研发,凭借新奇、实用、舒适,不断巩固着输入设备巨人的地位。本论文简单说明键盘的应用与实现方案。本文简单介绍了键盘的发展史及键盘的工作原理。概述了8086、AT89C51作为CPU如何接,进行了键盘扫描电路的硬件设计,介绍按键式和编码式两种方法。着重就矩阵式键盘做了详细说明,设计了主

2、程序及子程序。关键词:键盘;矩阵式;键盘扫描电路;程序设计。一、引言1873年的肖尔斯打字机以“QwERTY”布局排列键盘最初只是为了减慢打字的速度,而在推广这种打字机的时候,发明者们说这是最科学的排列方法,能够有效地提高打字速度。这一谣言被人们相信了接近100年之久。早期键盘实物图见图1。图1早期键盘图今天的计算机键盘虽然无论是材质还是原理都和打字机相差甚远,但是键位的排列是相同的。这种现象被叫做“路径依赖”:当人们一旦做出了某种选择,惯性的力量就会让选择不断自我强化。即便有更好的方案,也因为改变的成本太高而不得不被放弃。今天的键盘布局,可以追溯到140年之前的灵机一动和120年前的一次意外

3、,但是它们却能够决定了今天数十亿人的使用习惯。计算机键盘和打字机之间的血缘关系一望可知。今天的键盘看起来和IBM公司在上世纪50年代开发的电动打字机键盘十分相似,而再向前追溯,则是更早的机械打字机。它的历史可以追溯到18世纪早期为了让盲人也能够书写,1714年,一位名叫亨利·米尔的英国人申请了打字机的专利。可惜他的专利文献和设计图现在都已经遗失,我们再也无缘看见世界上第一部打字机是什么样子。显然,这种小众工具没能流行开来。那个时代的人们依然满足于用手书写,他们对速度和整齐的要求似乎还不是很高。直到资本主义变得越来越成熟,人们对文字的需求越来越大的时候,打字机的市场才真正开始培育起来。

4、在十九世纪,人们已经设计出了数十种打字机:从能够打出精美的印刷字体的到模仿手工书写的,一应俱全。早期的打字机有一个问题。当按下一个按键后,会拉动一根钢丝,钢丝连接着上方字盘中的杠杆,每个杠杆末端都有一个字母的凸模,把字母像是盖章那样敲在纸面上。如果打字速度过快的话,上方的杠杆往往来不及弹回,就会卡住。不得不承认,解决这个问题的办法很有创意。肖尔斯找到了他的妹夫詹姆斯-登斯莫尔帮忙,而这位数学老师建议减慢打字的速度,以尽可能避免卡键的状况。他认为把字母乱序排列会有好处。事实上这种以“QWERTY”布局排列的打字机的确减少了卡键的发生,而在推广这种打字机的时候,发明者们说这是最科学的排列方法,能够

5、有效地提高打字速度。这一谣言被人们相信了接近100年之久。英国打字机博物馆馆长、打字机世纪一书的作者威尔弗雷德·比彻声称,“这种所谓科学安排以减少手指移动距离的说法,是彻头彻尾的谎言。”,而且,“对字母的任何一种随机性的安排,都会比现在这种安排合理。”虽然今天的卡键问题早已不存在了,但是这种布局已经固定了下来。直到今天,我们还会在大多数英文键盘上看到它,完全无法想象,在过去的100年里,它浪费了多么惊人的时间。二、浅谈键盘技术应用及实现方案(一)8086作为CPU如何接Intel8086集成2.9万只晶体管,时钟频率为4.77MHz,内部数据总线(CPU内部传输数据的总线)、外部数据

6、总线(CPU外部传输数据的总线)均为16位,地址总线为20位,可寻址1MB内存。Intel8086拥有四个16位元一般的暂存器,也能够当作八个8位元暂存器来存取,以及四个16位元索引暂存器(包含了堆栈指标)。资料暂存器通常由指令隐含地使用,针对暂存值需要复杂的暂存器配置。它提供64K8位元的输出输入(或32K16位元)埠,以及固定的向量中断。大部分的指令只能够存取一个内存位址,所以其中一个运算子必须是一个暂存器。运算结果会储存在运算子中的一个。Intel8086有四个内存区段(segment)暂存器,可以从索引暂存器来设定。区段暂存器可以让CPU利用奇怪的方式存取内存的1MB。在现今有区段的处

7、理器中,8086把区段暂存器左移4位元然后把它加上去位址。大部分的人都认为这是一个很不好的设计,因为这样的结果是会让各区段有重叠。尽管这样对组合语言而言大部分被接受(也甚至有用),可以完全地控制区段,但是在语言中,让使用指标(像是C编程语言)变得困难。它导致指标的高效率表示变得困难,且有可能产生两个指向同一个地方的指标拥有不同的位址。更坏的是,这种方式产生要让内存扩充到大于1MB的困难。而80286的寻址方式改变让内存扩充较有效率。(二)AT89C51作为CPU如何接,比较之后用AT89C51AT89C51是一种带4K字节FLASH存储器(FPEROMFlashProgrammableandE

8、rasableReadOnlyMemory)的低电压、高性能CMOS8位微处理器,俗称单片机。AT89C2051是一种带2K字节闪存可编程可擦除只读存储器的单片机。单片机的可擦除只读存储器可以反复擦除1000次。该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,AT89C2051是它的一种精简版本。AT89C51单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。外形及引脚排列如图2所示。图2 AT89C51结构框图三、键盘扫描电路的硬件设计

9、单片机键盘根据不同的驱动控制方式,大体可分为两大类,一类是独立式键盘;一类是矩阵式键盘。独立式键盘是键盘发展的早期阶段,应用在对按键复杂度要求较低的设备上。独立式键盘的原理非常简单,就是将单片机的I/O口(输入/输出口)与按键物理连接起来,键盘有多少按键,每个按键都要和单片机的一个I/O口相连。这样设计的优点是结构简单,不需要过多的连线。但是缺点也非常明显:常见的80系列单片机总共只有四十个端口,而I/O口只有三十二个,一个键盘就占去了其中大部分的I/O口,那单片机就没有足够的端口去控制其它设备了。(一)按键式和编码式1简要说明一下键盘的工作原理:按键设置在行、列线交点上,行、列线分别连接到按

10、键开关的两端。行线通过上拉电阻接到+5V电源上。无按键按下时,行线处于高电平的状态,而当有按键按下时,行线电平与此行线相连的列线电平决定。2行列扫描法原理第一步,使行线为编程的输入线,列线是输出线,拉低所有的列线,判断行线的变化,如果有按键按下,按键按下的对应行线被拉低,否则所有的行线都为高电平。第二步,在第一步判断有键按下后,延时10ms消除机械抖动,再次读取行值,如果此行线还处于低电平状态则进入下一步,否则返回第一步重新判断。第三步,开始扫描按键位置,采用逐行扫描,每间隔1ms的时间,分别拉低第一列,第二列,第三列,第四列,无论拉低哪一列其他三列都为高电平,读取行值找到按键的位置,分别把行

11、值和列值储存在寄存器里。第四步,从寄存器中找到行值和列值并把其合并,得到按键值,对此按键值进行编码,按照从第一行第一个一直到第四行第四个逐行进行编码,编码值从“0000”至“1111”,再进行译码,最后显示按键号码。3数码管动态扫描原理:数码管动态扫描原理:数码管的7个段及小数点都是由LED块组成的,显示方式分为静态显示和动态显示两种。数码管在静态显示方式时,其共阳管的位选信号均为低电平,四个数码管的共用段选线a、b、c、d、e、f、g、dp分别与CPLD的8根I/O口线相连,显示数字时只要给相应的段选线送低电平。数码管在动态显示方式时,在某一时刻只能有一个数码管被点亮显示数字,其余的处于非选

12、通状态,位选码端口的信号改变时,段选码端口的信号也要做相应的改变,每位显示字符停留显示的时间一般为1-5ms,利用人眼睛的视觉惯性,在数码管上就能看到相当稳定的数字显示。通用键盘长按键实现方法及其在输入中的应用方法,属于计算机应用领域。通用键盘长按键实现方法包括:创建并安装键盘钩子动态链接程序,当使用键盘时,获取底层键盘消息并记录键盘的“按下消息”和“放开消息”的顺序和次数;根据重复键与“按下消息”和“放开消息”顺序和次数的关系判断出当前按键是否为长按键。长按键在输入中的应用方法包括:监控当前按键是否为长按键,如果是,查询是否存在与当前按键匹配的汉字首编码,如果存在,将修改光标定位到对应的汉字

13、或编码上,更新显示提示行并等待修改。本发明通过识别通用键盘的长按键,实现了输入时快速定位和修改错误汉字功能,明显地增强了通用键盘的实用功能。(二)矩阵式1.4*4矩阵式键盘识别显示系统概述矩阵式键盘模式以N个端口连接控制N*N个按键,实时在LED数码管上显示按键信息。显示按键信息,省下了很多的I/O端口为他用,相反,独立式按键虽编程简单,但占用I/O口资源较多,不适合在按键较多的场合应用。并且在实际应用中经常要用到输入数字、字母、符号等操作功能,如电子密码锁、电话机键盘、计算器按键等,至少都需要12到16个按键。矩阵式键盘简介:矩阵式键盘又称行列键盘,它是用N条I/O线作为行线,N条I/O线作

14、为列线组成的键盘。在行线和列线的每个交叉点上设置一个按键。这样键盘上按键的个数就为N*N个。这种行列式键盘结构能有效地提高单片机系统中I/O口的利用率。最常见的键盘布局如图1所示。一般由16个按键组成,在单片机中正好可以用一个P口实现16个按键功能,这也是在单片机系统中最常用的形式,本设计就采用这个键盘模式。阵式键盘提高效率进行按键操作管理有效方法,它可以提高系统准确性,有利于资源的节约,降低对操作者本身素质的要求。2.路硬件说明(1)在“单片机系统”区域中,把单片机的P1.0P1.7端口通过8联拨动拨码开关JP3连接到“4*4行列式键盘”区域中的M1M4,N1N4端口上3。即将P1口作为整个

15、系统的输入接口电路。(2)在“单片机系统”区域中,把单片机的P0.0P0.6端口通过上拉电阻连接到“静态数码显示模块”区域中的任何一个ag端口上。(3)此实验采用的是共阴极LED显示块,只有当ag端口输入高电平时才有效,即显示块中的对应的发光二极管才发光,低电平时不显示,通过ag端口的不同输入使显示器显示不同的字符。3.硬件电路设计及电路图硬件电路设计图如下图3所示。把单片机的P1.0P1.7端口通过8联拨动拨码开关连接到“4*4行列式键盘”,其中P1.0-P1.3作为列线,P1.4-P1.7作为行线,把单片机的P0.0P0.6端口连接到共阴极“静态数码显示模块”区域中对应的ag端口上;系统首

16、先通过CPU对全部键盘进行扫描,即把第一根行线置为“0”状态,其余行线置于“1”状态,读入输入缓冲器的状态,若其状态全为“1”表明该行无键按下,再将第二根行线置为“0”状态,同样读入输入缓冲器的状态,如其状态也全为“1”,则置第一根行线置为“0”状态,以此类推5。如读入输入缓冲器的状态不全为“1”,确定哪一根列线为“0”状态,当某个键的行线和列线都为“0”状态时,表明该键按下。最后通过显示程序将该键的序号显示出来。图3 硬件电路图四、程序说明及其流程图(一)汇编程序KEYEQU30HORG0000H;入口地址SJMPSTARTSTART:MOVP0,#00HJIXU:MOVP1,#0FFH;判

17、第0行是否有键按下CLRP1.4;将P1.4清零MOVA,P1ANLA,#0FH;屏蔽高4位XRLA,#0FHJZNOKEY0;A为0,转向NOKEY0LCALLDELAY10MS;延时,去抖动MOVA,P1;再确认一次ANLA,#0FHXRLA,#0FHJZNOKEY0;A为0,转向NOKEY0MOVA,P1;判哪一个键按下ANLA,#0FHCJNEA,#0EH,NEXT1MOVKEY,#0LJMPOK;转向显示程序NEXT1:CJNEA,#0DH,NEXT2MOVKEY,#1LJMPOKNEXT2:CJNEA,#0BH,NEXT3MOVKEY,#2LJMPOKNEXT3:CJNEA,#07

18、H,NOKEY0MOVKEY,#3LJMPOKNOKEY0:MOVP1,#0FFH;判第1行是否有键按下CLRP1.5;将P1.5清零MOVA,P1ANLA,#0FH;屏蔽高4位XRLA,#0FHJZNOKEY1;A为0,转向NOKEY1LCALLDELAY10MS;延时,去抖动MOVA,P1;再确认一次ANLA,#0FHXRLA,#0FHJZNOKEY1;A为0,转向NOKEY1MOVA,P1;判哪一个键按下ANLA,#0FHCJNEA,#0EH,NEXT5MOVKEY,#4LJMPOKNEXT5:CJNEA,#0DH,NEXT6MOVKEY,#5LJMPOKNEXT6:CJNEA,#0BH

19、,NEXT7MOVKEY,#6LJMPOKNEXT7:CJNEA,#07,NOKEY1MOVKEY,#7LJMPOKNOKEY1:MOVP1,#0FFH;判第2行是否有键按下CLRP1.6;将P1.6清零MOVA,P1ANLA,#0FH;屏蔽高4位XRLA,#0FHJZNOKEY2;A为0,转向NOKEY2LCALLDELAY10MS;延时,去抖动MOVA,P1;再确认一次ANLA,#0FHXRLA,#0FHJZNOKEY2;A为0,转向NOKEY2MOVA,P1;判哪一个键按下ANLA,#0FHCJNEA,#0EH,NEXT9MOVKEY,#8SJMPOKNEXT9:CJNEA,#0DH,N

20、EXT10MOVKEY,#9SJMPOKNEXT10:CJNEA,#0BH,NEXT11MOVKEY,#10SJMPOKNEXT11:CJNEA,#07,NOKEY2MOVKEY,#11SJMPOKNOKEY2:MOVP1,#0FFH;判第2行是否有键按下CLRP1.7;将P1.6清零MOVA,#P1ANLA,#0FH;屏蔽高4位XRLA,#0FHJZNEXT16;A为0,转向NEXT16LCALLDELAY10MS;延时,去抖动MOVA,P1;再确认一次ANLA,#0FHXRLA,#0FHJZNEXT16;A为0,转向NEXT16MOVA,P1;判哪一个键按下ANLA,#0FHCJNEA,#

21、0EH,NEXT13MOVKEY,#12SJMPOKNEXT13:CJNEA,#0DH,NEXT14MOVKEY,#13SJMPOKNEXT14:CJNEA,#0BH,NEXT15MOVKEY,#14SJMPOKNEXT15:CJNEA,#07H,NEXT16MOVKEY,#15SJMPOKNEXT16:LJMPJIXUOK:MOVA,KEY;查表显示MOVDPTR,#TABLEMOVCA,A+DPTRMOVP0,ALJMPJIXUDELAY10MS:MOVR6,#10;延时D1:MOVR7,#248DJNZR7,$DJNZR6,D1RETTABLE:DB3FH,06H,5BH,4FH,66H

22、,6DH,7DH,07HDB7FH,6FH,77H,7CH,39H,5EH,79H,71HEND(二)流程图程序流程图见图4所示。开始扫描是否有键按下Y识别是哪一个键按下通过P0口查询显示该序号N图4 系统程序图Y3.仿真结果及分析在proteus中设计好实验电路后,然后在proteus编程环境中进行程序设计和编译,生成HEX文件并加载HEX文件,点启动,运行仿真6。由于开始时P0口的值被赋为00H,P1口的值为FFH,当无键按下时,将P1.4口置0,再将P1口的值送A,屏蔽高4位,与0F相异或后,A的值变为0,即第0行没有键按下,转入NOKEY0子程序中,重新赋值P1口的值为FFH,将P1.

23、5口置0后送A,屏蔽高4位,与0F相异或后,A的值又变为0,即第1行没有键按下7,转入NOKEY1子程序中,同理,可以得知第2行和第3行也没有键按下。因而,P0口没有被重新赋值,保持为00H不变,又显示器是共阴极的,此时P0.0-P1.6口均为“0”,即“a-g”段均不显示,从而显示器不显示,并转向程序的开始继续循环扫描键盘,直到有键按下为止。五、结论回顾起此次课程设计,感觉受益匪浅,从拿到题目到完成整个编程,从理论到实践,学到很多很多的课堂理论中没学到过的东西,不仅对键盘的识别技术这一章节的知识点有了深刻的认识,而且对这学期开设的单片机这门课程有了更全面的了解,尤其是在学习使用proteus软件片编程和仿真时收获良多。通过这次单片机

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论