单片机控制系统运行与维护 矩阵式键盘程序设计 矩阵式键盘程序设计.docVIP

单片机控制系统运行与维护 矩阵式键盘程序设计 矩阵式键盘程序设计.doc

  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文档。上传文档
查看更多
单片机控制系统运行与维护 单片机控制系统运行与维护 PAGE 1 矩阵式键盘程序设计 一、学习目的与要求 1.理解矩阵式键盘程序设计思路。 2.掌握矩阵式键盘程序设计方法。 二、学习方法 1.学习本课程,首先要精读教材和讲义,理解矩阵式键盘程序设计思路。 2.根据教材内容,利用Keil C51、Proteus软件,设计矩阵式键盘检测程序。 三、授课内容 1矩阵式键盘按键的识别 按键的识别功能是判断键盘中是否有按键按下,若有按键按下,则确定按键所在的行列位置和键值。按键的识别方法有扫描法和反转法两种,其中扫描法使用较为常见,下面以图1中的键盘为例,说明扫描法识别按键的过程。 识别过程如下: ①判断键盘上有无按键闭合。由AT89S51单片机向所有行线X0~X3输出低电平“0”,然后读列线Y0~Y3的状态,若为全“1”,即键盘上列线全为高电平,则说明键盘上没有按键闭合,若Y0~Y3不为全“1”则表明有键按下。 ②消抖处理。当判断有键闭合后,需要进行消抖处理。 ③判别键号。将行线中的一条置“0”,若该行无键闭合,则所有的列线状态均为“1”;若有键闭合,则相应的列线会为“0”,依次将行线置“0”,读取列线状态,根据行列线号获得键号。在图3-2中,若X0~X3输出为1101时,读出Y0~Y3为1101,则X2行Y2列相交的键处于闭合状态,闭合的键号等于为低电平行的首键号与为低电平的列号之和,即 N=为低电平行的首键号+为低电平的列号=8+2=10 ④键的释放。再次延时等待闭合键释放,键释放后将存储键值,然后执行处理按键对应的功能操作。 2矩阵式键盘程序设计 单片机对键盘的扫描方法有编程扫描方式、定时扫描方式和中断扫描方式3种。 ①编程扫描方式 编程扫描方式是利用CPU的空闲时间,调用键盘扫描子程序,响应键盘的输入请求。 在扫描法中,CPU的空闲时间必须扫描键盘,否则有键按下时CPU将无法知道,但多数时间中CPU处于空扫描状态,不利于程序的优化。 ②定时扫描方式 通常利用单片机内部的定时器产生10ms定时中断,CPU响应中断对键盘进行扫描,响应键盘的输入请求。 ③中断扫描方式 在图1中,当按键按下时,列线中必有一个为低电平,经与门输出低电平,向单片机引脚发出中断请求,CPU执行中断服务程序,判断闭合的键号并进行相应的处理,这种方法可大大提高CPU的效率。 图1 4×4矩阵式键盘的连接 3矩阵式键盘扫描法参考程序 如图2所示,试编程实现键号显示。 图2 矩阵式键盘键号显示电路 #includereg51.h unsigned char code DSY_CODE[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //1ms延时函数 void delayms(unsigned int n) { unsigned int i,j; for(i=0;in;i++) { for(j=0;j123;j++); } } //按键扫描函数,得到按键的值 unsigned char keyscan(void) { unsigned char temp,num; P1=0xfe; temp=P1; temp=0xf0; if(temp!=0xf0) { delayms(2); if(temp!=0xf0) { switch(temp) { case 0xe0: num=0x00; break; case 0xd0: num=0x01; break; case 0xb0: num=0x02; break; case 0x70: num=0x03; break; default:break; } } } P1=0xfd; temp=P1; temp=0xf0; if(temp!=0xf0) { delayms(2); if(temp!=0xf0) { switch(temp) { case 0xe0: num=0x04; break; case 0xd0: num=0x05; break; case 0xb0: num=0x06; break; case 0x70: num=0x07; break; default:break; } } } P1=0xfb; temp=P1;

文档评论(0)

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

大部分文档都有全套资料,如需打包优惠下载,请留言联系。 所有资料均来源于互联网公开下载资源,如有侵权,请联系管理员及时删除。

1亿VIP精品文档

相关文档