参考学习资料 单片机 比较实用的51矩阵键盘程序解析.docVIP

参考学习资料 单片机 比较实用的51矩阵键盘程序解析.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文档。上传文档
查看更多

比较实用的51矩阵键盘程序解析

由于单片机I/o口的有限,当需要多个按键的时候,常用矩阵键盘作为输入设备.

由于按键按下后,松开得到的波形实际中不是理想化的方波,会出现机械抖动,对后续单片机检测按键带来麻烦,

一般教材上基本都是利用延时去抖动:基本套路都:

voidkey()

{

if(k1==0)//如果按键按下

{

delay_10ms();延时去抖动

if(k1==0)再次判断

{

你要的功能

}

}

}

由于10ms是理论上人们按键按下后到松手所要的大概时间,由于个体差异,和按键的机械灵活度有差异,导致可能出现按键按太快,没反应,按时间太长导致单片机效率降低等不确定因素.

可以采用判断是否是第一次按下来进行检测,可以大大提高效率,当你按键按了再快也能检测到。

程序如下:

//---------------------------------------------------------------------

#includereg52.h

#definekeyP2

intval;

charcodesign[17]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x83,0xf8,0x80,0x98,0x88,0x83,0xc6,0xa1,0x86,0x8e};

voiddelay_10ms();

voidkey_scan();//矩阵按键函数声明

voidmain()

{

while(1)

{

P0=sign[val];

key_scan();

}

}

voidkey_scan()

{

staticchara,b;//a用于判断是不是第一次按下,b用于稍微延时

charstate;//记录键值

key=0x0f;

if(key!=0x0f)//如果有按键按下

{

state=key;//记录第一次按键状态

if(a==0)//如果第一次按下

{

b++;//略微延时不需要延时10ms以提高单片机效率

if(b3)

{

if(key==state)//判断键值是否和第一次一致

{

a=1,b=0;//复位状态值a==1说明已经按下,等待后续松开

key=0x0f;//测试列

switch(key)

{

case(0x07):val=0;break;

case(0x0b):val=1;break;

case(0x0d):val=2;break;

case(0x0e):val=3;break;

}

key=0xf0;//测试行

switch(key)

{

case(0x70):val=val;break;

case(0xb0):val=val+4;break;

case(0xd0):val=val+8;break;

case(0xe0):val=val+12;break;

}

}

}

}

}

else

{

a=b=0;//松开后复位状态机

}

}

文档评论(0)

工地殿小二 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档