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