二 键盘 单片机..pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
键盘的应用 1、键盘的分类 键盘分编码键盘和非编码键盘。键盘上闭合键的识别由专用的硬件编码器实现,并产生键编码号或键值的称为编码键盘,如计算机键盘;而靠软件编程来识别的称为非编码键盘; 在单片机组成的各种系统中,用的最多的是非编码键盘。 非编码键盘有分为:独立键盘和行列式(又称为矩阵式)键盘。 开关S未被按下时,P3.4输入为高电平,S闭合后,P3.4输入为低电平。由于按键是机械触点,当机械触点断开、闭合时,会有抖动,P3.4输入端的波形如图所示。抖动时间的长短与开关的机械特性有关,一般5~10ms。这种抖动对于人来说是感觉不到的,但对计算机来说,则是完全可以感应到的,因为计算机处理的速度是在微秒级,而机械抖动的时间至少是毫秒级,对计算机而言,这已是一个“漫长”的时间了。 为使CPU能正确地读出P3口的状态,对每一次按键只作一次响应,就必须考虑如何去除抖动,常用的去抖动的方法有两种:硬件方法和软件方法。单片机中常用软件法,因此,对于硬件方法我们不介绍。软件法其实很简单,就是在单片机获得P3.4口为低的信息后,不是立即认定S1已被按下,而是延时10毫秒或更长一些时间后再次检测P3.4口,如果仍为低,说明S1的确按下了,这实际上是避开了按键按下时的抖动时间。以上就是消除键抖动的原则。 1、通过I/0口连接。将每个按键的一端接到单片机的I/O口,另一端接地,这是最简单的方法,如图所示是实验板上按键的接法,四个按键分别接到P1.0 、P1.1、P1.2和P1.3。对于这种键各程序可以采用不断查询的方法,功能就是:检测是否有键闭合,如有键闭合,则去除键抖动,判断键号并转入相应的键处理。下面给出一个例程。其功能很简单,四个键定义如下: P1.0:P2口灯全亮 P1.1: P2口灯全暗 P1.2: P2口灯1357亮 P1.3: P2口灯2468亮 #include reg51.h #define uchar unsigned char void delay(); uchar keys( ) //按键扫描子程序 { P1=0xff; if((P10xff)!=0xff) //有键按下 { delay(); //延时去抖 if((P10xff)!=0xff) return(P10xff); //返回键值 } else return(0); //无效按键 } void delay() //延时子程序 { uchar a; for(a=100;a0;a--); } 思考题: P1.0:开始,按此键则灯开始流动(由上而下) P1.1:停止,按此键则停止流动,所有灯为暗 P1.2:上,按此键则灯由上向下流动 P1.3:下,按此键则灯由下向上流动 我们可以考虑采用标志位的方法,每个键按下,设定一个标志位,然后对应标志位执行相应的操作。 void main() { unsigned char char key,start,atop,up,down; temp=0xfe; temp1=0xef; while(1) { key=keys( ); switch(key) { case 0xfe: {start=1;stop=0;} break; case 0xfd: {stop=1;start=0;} break; case 0xfb: {up=1;down=0;} break; case 0xf7: {down=1;up=0;} break; default: break; } if(start==1) { P2=temp; move1(); } if(stop==1) esc(); if(up==1) { P2=temp; move1(); } if(down==1) { P2=temp1; move2(); } } } 以上程序功能很简单,但它演示了一个键盘处理程序的基本思路,程序本身很简单,也不很实用,实际工作中还会有好多要考虑的因素,比如主循环每次都调用灯的循环程序,会造成按键反应“迟钝”,而如果一直按着键不放,则灯不会再流动,一直要到松开手为止,等等,大家可以仔细考虑一下这些问题,再想想有什么好的解决办法。 * * 按键在闭合和断开时,触点会存在抖动现象: void main() {

文档评论(0)

jiayou10 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

版权声明书
用户编号:8133070117000003

1亿VIP精品文档

相关文档