12生工C51单片机05(键盘待修改).ppt

  1. 1、本文档共32页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
12生工C51单片机05(键盘待修改)

第5讲 单片机键盘;计算机系统的输入设备;嵌入式系统的输入设备;一、按键开关 ;一、按键开关 ;拨码开关的输入接口电路:;二、如何识别按键开关;二、如何识别按键开关;2.识别方式: 查询方式 单片机不断扫描按键判断按键是否动作 特点:硬件简单,但需不断地扫描按键,占用CPU资源 中断方式 按键动作时发出中断请求,单片机响应中断请求后处理按键中断 特点:硬件复杂,需要中断电路,但不占用CPU资源; 按键在被按下或抬起时,由于机械触点的弹性作用,在接触或断开的瞬间均伴随有抖动现象。; 按键抖动会形成干扰信号,干扰系统的正常运行,因此应采取防抖措施: 硬件防抖 RS触发器或施密特触发器防抖 RC滤波防抖 去抖效果好、电路复杂、成本高 软件防抖 软件延时防抖 电路简单、成本低、占用CPU时间; 在C语言中可使用while或if语句对按键动作进行识别: if (!key) {判断按键按下的操作 } while (key) {判断按键抬起的操作 };独立式按键的判别中的一些问题: 何时检测按键按下(查询或中断) 按键按下后的抖动(软件延时防抖) 按键键号的判别 不处理按键异常(switch 语句) 按优先级处理按键(if 语句) 按键释放的判别(区分单次长按还是多次按下);程序设计举例;程序设计举例;独立键盘程序设计流程图;#include AT89X51.H #define unchar unsigned char void Delay(unchar delaytime); void Delay(unchar delaytime) //延时函数 { unchar i=0; unchar j=0; for(i=0;idelaytime;i++) for(j=0;j120;j++) ; };void main(void) { unchar Temp=0x00; while(1) // 系统主循环 { P1=0xff; //读引脚状态,先置1 if( P1 != 0xff ) //判断是否有键按下 { Delay(10); //延时大约10毫秒,去除抖动 P1=0xff; //读引脚状态,先置1 if( P1 != 0xff ) //判断是否真正有键按下 { Temp=P1; //把P1口的各键状态读回临时变量Temp;;课堂练习1;#include AT89X51.H #define unchar unsigned char unchar DISP_code[10] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; void Delay(unchar delaytime); void Delay(unchar delaytime) //延时函数 { unchar i=0; unchar j=0; for(i=0;idelaytime;i++) for(j=0;j120;j++) ; };void main(void) { unchar Temp=0x00; while(1) // 系统主循环 { P1=0xff; //读引脚状态,先置1 if( P1 != 0xff ) //判断是否有键按下 { Delay(10); //延时大约10毫秒,去除抖动 P1=0xff; //读引脚状态,先置1 if( P1 != 0xff ) //判断是否真正有键按下 { Temp=P1; //把P1口的各键状态读回临时变量Temp;switch(Temp) { case 0xfe : {P0 = DISP_code[0] } break; case 0xfd : {P0 = DISP_code[1] } break; ………….. default : break; } } } }//循环执行 };课堂练习2;#includereg51.h #define unchar unsigned char unchar DISP_code[10] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; sbit key1 = P3^0; sbit key2 = P3^1; unchar key1_sta

文档评论(0)

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

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

1亿VIP精品文档

相关文档