任务八 键盘接口课件.ppt

  1. 1、本文档共19页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
任务八 键盘接口扩展 按键及键盘 键盘扫描控制方式 程序控制方式:键盘处理程序固定在主程序的某个程序段。 特点:对CPU工作影响小 应考虑键盘处理程序运行间隔周期不能太长,否则影响对键盘输入响应的及时性。 定时控制扫描方式:利用定时/计数器每隔一段时间产生定时中断,CPU响应中断后对键盘进行扫描。 特点:采用定时/计数器定时控制扫描间隔。 定时时间不能太长,否则影响对键盘输入响应的及时性。 中断控制方式:利用外部中断源,响应键盘输入信号。 特点:能及时处理键盘输入,又能提高CPU运行效率 要占用一个中断资源。 独立式未编码键盘接口 行列式未编码键盘原理 行列式键盘列扫描查询原理 行列式键盘线反转法扫描查询原理 先判别按键所在的行:由P2口输出列扫描字0x0F,然后读行线状态到变量temp1中。 如果有按键按下,则行输入不全为1,即不等于0x0F; 如果无按键按下,则行输入全为1,即等于0x0F。 再判别按键所在的列:由P2口输出行扫描字0xF0 ,然后读列线状态到变量temp2中。 将temp1和temp2的状态相或得到按键的编码,从而知道按键的值。 # include reg52.h //延时子程序:由Delay参数决定延时时间 void mDelay(unsigned int Delay) { unsigned int i; for(;Delay0;Delay--) { for(i=0;i114;i++) {;} } } //按键扫描子程序,有键按下,返回键值00-15;无键按下,返回0xff。 unsigned char Matrix_key(void) { unsigned char key, temp1,temp2; key=0xff; // 初始化键值 P2=0x0f; // 输出列扫描字 if( (P20x0F) !=0x0f) // 读行线状态,判断是否有键按下 { mDelay(10); // 延时消抖 P2=0x0f; // 输出列扫描字 temp1=P20x0f; // 读行线状态到temp1中 if( temp1!=0x0f ) // 有键按下 { P2=0xf0; // 输出行扫描字 temp2=P20xf0; // 读列线状态到temp2中 switch( temp1|temp2 ) { case 0xee:key=0; break; case 0xde:key=1; break; case 0xbe:key=2; break; case 0x7e:key=3; break; case 0xed:key=4; break; case 0xdd:key=5; break; case 0xbd:key=6; break; case 0x7d:key=7; break; case 0xeb:key=8; break; case 0xdb:key=9; break; case 0xbb:key=10;break; case 0x7b:key=11;break; case 0xe7:key=12;break; case 0xd7:key=13;break; case 0xb7:key=14;break; case 0x77:key=15;break; default: key=0xff; break; } } } else { ; } return ( key ); //返回键值 } 实验内容 硬件连接 K3—K0连接P1.3—P1.0 LED3---LED0连接P1.7---

文档评论(0)

love1987421 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档