- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
基于CPLD的矩阵键盘扫描模块设计
来源:21IC-应用? 发布时间:2010-12-21 10:26? 评论:0条? 阅读:304次 发给好友??
窗体顶端
窗体底端
在基于PC104的便携式野外测试设备的设计中,键盘是常用的输入设备。对于便携式设备野外工作时,一般使用小型(4x4)矩阵键盘就能满足设备的信息输入需要;室内调试时,使用标准PS2键盘更方便、灵活。一般的做法是保留PC104的键盘接口用于接标准键盘,利用扩展I/O接口完成小矩阵键盘的扫描和输入。这样做虽然可以实现设备双键盘同时工作的功能,却需耗费大量的CPU处理时间扫描矩阵键盘,造成CPU处理其他信息的能力下降。而本文设计的基于CPLD的矩阵键盘扫描模块能够很好地解决上述问题。1 矩阵键盘扫描原理 图1给出了4x4矩阵键盘的电路图,在图1中KX[3..0]为扫描码输入,KY[3..0]为扫描码输出。键盘扫描开始时,首先置KX[3..0]=“0000”;键盘扫描码寄存器和键盘扫描码缓存器Kreg[15..0]和Kscan[15..0]置成“1111111111111111”(全1为没有键按下,有键按下时至少有一位为O),一旦有键按下,KY[3..0]输出不全为“O”的扫描码触发键盘扫描功能开始键盘扫描,扫描开始后,依次将KX3、KX2、KX1、KX0置“0”,分别将对应的4组KY[3..0]输入值保存于Kscan[15..12]、Kscan[11..8]、Kscan[7..4]、Kscan[3..0]中,而后比较Kscan和Kreg的大小,如果Kscan小于Kreg,将Kscan保存于Kreg中,重复上述扫描过程直到Kscan[15..0]各位输出全为“1”时,说明按下的键全部抬起,Kreg[15..0]中的每一个为“0”的位对应一个按下的键,保留扫描过程中的Kreg最小值就可以处理组合键。根据记录的Kreg值可以判断是哪个或哪几个键按下,据此编码按键值后输出。将KX[3..0]置为“0000”,等待下一次按键发生。
2 基于CPLD的4x4矩阵键盘扫描模块设计 根据上述扫描原理和工作流程,如果以PC104 CPU实现上述矩阵键盘的扫描过程,那么在有键按下后,CPU必须不停地扫描矩阵键盘电路,在此期间不能进行其他工作,降低了CPU工作效率,且CPU连续高速运转增加系统功耗。 本文的目的就是在不需要CPU参与的条件下以CPLD完成矩阵键盘按键事件触发、按键的扫描定位以及按键的编码和键值输出工作,CPU只需要定时查询有无键按下并读走按下键的按键值送入键盘缓冲区。这样就使CPU从繁重的矩阵键盘扫描工作中解脱出来。根据上述键盘扫描工作原理,基于CPLD的4x4矩阵键盘扫描模块功能框图如图2所示。
图中,模块KeyTri在时钟信号CLK的控制下实现按键事件触发和矩阵键盘扫描时序产生功能;模块keycode在时钟信号CLK和扫描时序码SCode的控制下完成输出键盘扫描码KX,同时记录16位键盘扫描数据等工作,并在所有键抬起后对按下的键编码完成输出功能;模块nread实现按键码的暂存、按键状态的置位和清除以及矩阵键盘的使能;模块PCPORT完成矩阵键盘与CPU的接口;模块OSC与CreatClock产生控制键盘扫描模块工作的3 KHz时钟信号CLK。2.1 键盘扫描触发模块(KeyTri)的功能与时序仿真 键盘扫描过程中,扫描信号不停变化,以判断键盘按键的按下和抬起。高速变化的键盘扫描信号不仅使系统功耗增加,而且还会对其他敏感电路造成干扰。因此在本设计中将键盘扫描模式设计成键按下触发扫描方式,只有当键盘有键按下后,才触发键盘扫描电路产生扫描键盘时序,所有键都放开后,停止对键盘的扫描,使电路处于相对静止状态,以减少对其他电路的干扰。 键盘按下时会有抖动,在按键抖动时扫描键盘,可能会使键盘扫描电路产生误判,因此在键盘按下与开始扫描之间应加入一段延时,延时结束后按键仍处于按下状态,才允许开始键盘扫描,这样做可以最大限度地避免扫描电路的误判和漏判。 键盘扫描触发模块实现的功能为:在KX=0000的状态下,如果有任意一个键被按下,KY必然不全为‘1’,触发延时功能开始延时,延时结束后,如果KY仍不全为‘1’,说明该按键事件有效,启动扫描时序产生1H~BH的4位循环扫描时序码,控制后续的键盘扫描电路对键盘扫描,当ReSet变低时,立即将扫描时序码置为OH,停止本次键盘扫描并等待下一次键盘按下事件到来。键盘扫描触发模块的VHDL语言实现如下:
键盘扫描触发模块的时序仿真如图3所示。
在图3中,和之间的时间为去键盘抖动延时,为了方便仿真,此处把延时时间设定为4个周期,实际使用时,应保持在20~30 ms
文档评论(0)