单片机按键模块设计.ppt
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
任务分析:
此任务设计有两个主要功能模块,一是按键的判断,二是LED流水 灯的运行。通过前面单元的学习得知,这两个功能在主程序中无限循环判 断执行,正常人完成一次按键的时间需要20ms,而LED流水灯运行频率 应小于50Hz(即应大于20ms走一个灯,否则运行太快人眼无法识别), 那么如果单片机CPU在执行流水灯显示延时程序期间,正好发生按键, CPU无法运行按键扫描程序而导致按键判断的丢失,如果1s或更长时间走 一个灯,那么丢失按键的现象将更加严重。由此可见普通的程序查询独立 式按键设计方法在此任务设计是无法胜任的。本任务将介绍单片机重要的 内部资源—中断系统,它将有效解决上述问题。
任务分析:
键盘实际上是一组开关的集合:当键按下时,两根导线接通;释放 时,两根导线不通。8个按键的键盘电路可考虑在P2口上设计,8个LED电 路仍然安装在单片机P1口。8个按键分别对应控制8个LED,按下按键则点 亮对应的灯。
独立式键盘工作原理及应用
独立式键盘的组成是由若干个按键与单片机的I/O口一一 的对应连接,然后通过读取单片机I/O的电平状态来确认哪 个对应的按键被按下,一般一个独立式按键对应一个功能, 可以通过按键的组合来实现多个功能。
1,中断的概念
【例5-2】电路如5-10示,8个LED流水灯安装在 P1口,按键K0安装在P2.0上,采用独立式按键识 别,实现任务描述中要求的功能。 程序分析:主程序有两个功能模块,一方面按键 判断程序,另一方面LED流水灯程序。由于按键 是两种流水灯运行方式的交替按键,因此可考虑 设置按键控制标志位状态,LED流水灯则判断标 志位状态决定运行方式,即按键通过标志位间接 控制LED流水灯的运行方式。每次按下按键则把 标志位取反,以达到控制LED流水灯的运行。
硬件电路图
开始
(1)程序流程
由独立式键盘工作原理得知,按键 是否按下是通过读取按键对应的 IO的电平变化而判断的,在程序 设计上,即通过读取按键对应IO 口的电平是否为低(软件去抖)来 决定哪个按键被按下,当判断 key0被按下,则点亮LED0;当判 断key1被按下,则点亮LED1……。
key0按下?
单元5 按键模块设计
回顾
1,数码管显示原理? 2,静态数码管工作原理? 3,动态数码管工作原理? 4,AT89C51有几个定时器?各是多少位的?请 简述定时器实现定时原理?
5,8051单片机定时/计数器工作方式有多少种? 6,如何设置8051单片机工作在定时/计数模式下? 7,如何启动定时器工作?
Pro百度文库eus-Keil联合调试仿真
运行
任务2 键盘中断设计
任务描述:
项目组掌握独立式键盘设计后,现要求用1个按键控制流水灯运行 样式,初始时8个LED按从头到尾方式循环运行,当按下按键,首尾两灯 点亮向中间,到中间后返回首尾的循环运行,再次按下按键又转为从头到 尾循环运行……,即1个按键交替切换流水灯的两种运行样式。
N
Y
点亮LED0
key1按下?
N
Y
点亮LED1
key2按下?
N
Y
点亮LED2
key3按下?
N
Y
点亮LED3
key4按下?
N
Y
点亮LED4
key5按下?
N
Y
点亮LED5
key6按下?
N
Y
点亮LED6
key7按下?
N
Y
点亮LED7
主程序设计:
#include"AT89X51.H" unsigned char code led_light[]={0XFE,0XFD,0XFB,0XF7,0XEF,0XDF,0XBF,0X7F}; 对应的编码 void main() { while(1) { if(P2_0==0) //判断key0被按下 { key_delay();//去抖延时10ms if(P2_0==0) //再次判断key0按下 { while(!P2_0); //等待闭合释放 P1=led_light[0]; //点亮LED0 } } if(P2_1==0) //判断key1被按下 { key_delay();//去抖延时10ms if(P2_1==0) //再次判断key1按下 { while(!P2_1); //等待闭合释放 P1=led_light[1]; //点亮LED1 } } ……; } } //点亮LED
P2.0=0?
Y
N
软件延时10ms P2.0=0?
Y N N
闭合释放?
Y
P1.0=0点亮LED P2.1=0?
Y N
软件延时10ms P2.1=0?
Y N N
闭合释放?
Y
P1.0=1熄灭LED
任务实施
1. Proteus电路设计 2. Keil C51程序设计 3. Proteus-Keil联合调试仿真
键按下
前沿抖动 闭合稳 定
后沿抖动
应用举例:例5-1
开始
#include"AT89X51.H" void main() { while(1) { if(P2_0==0) //判断key0被按下 { key_delay();//去抖延时10ms if(P2_0==0) //再次判断key0按下 { while(!P2_0); //等待闭合释放 P1_0=0; //点亮LED } } if(P2_1==0) //判断key1被按下 { key_delay();//去抖延时10ms if(P2_1==0) //再次判断key1按下 { while(!P2_1); //等待闭合释放 P1_0=1; //熄灭LED } } } }
8,请简述DS1302读取时间的编程过程?
本单元任务
任务1 任务2 任务3 任务4
独立式键盘设计 键盘中断设计 矩阵式键盘设计 多个外部中断设计
任务1 独立式键盘设计
任务描述:
众多嵌入式单片机系统、嵌入式单片机产品设备中,键盘模块都是 必不可少的,比如手机及各种智能家电等。本任务通过按键控制点亮流水 灯(8个按键分别对应控制8个LED),学习最简单的键盘—独立式按键设 计方法。
P2.0 P2.1 P2.2 P2.3 P2.4 P2.5 P2.6 P2.7
key0 key1 key2 key3 key4 key5 key6 key7
抖动:当用手按下一个键时,往往出现按键在闭合和断开位置之 间来回跳动多次才能到闭合稳定状态的现象;在 释放一个键时, 也会出现类似的情况,这种情况就是抖动。按下一个键时产生前 沿抖动,释放一个键时产生后沿抖动。抖动的持续时间随键盘簧 片的材料和操作员而异,通常在5~10ms。而5~10ms已经对程序 进行多次循环扫描执行,显而易见,抖动问题不解决,就会引起 对闭合键的多次识别。 。