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