- 1、本文档共32页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 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
您可能关注的文档
- 2017届江西省新余一中、宜春一中高三7月联考化学试题含解析教程.doc
- 11圆柱表面积使用课件.ppt
- 12v190发电机组--燃气发电机组操作使用.ppt
- 2017届工业的可持续发展——科学调整合理布局教程.ppt
- 2017届江西省红色七校高三(上)第一次联考物理试卷(解析版)教程.doc
- 2017届河北省衡水中学高三上学期一调考试政治试题教程.doc
- 2017届河北省定州中学高三(高补班)上学期周练(9.4)物理试题教程.doc
- 2017届河北省衡水中学高三上学期四调考试地理试题教程.doc
- 2017届河南省高三上学期开学摸底考试政治试题教程.doc
- 2017届河南省天一大联考高三12月考政治教程.doc
文档评论(0)