单片机按键模块设计ppt课件

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
系统返回原来被打断的程序处开始继续执行。
3,中断编程结构
27
(1) 编写中断初始化程序
为使单片机CPU在执行主程序过程中能够响应中 断,就必须先对使用中断的相关寄存器(TMOD、 SCON、IE等)进行初始化。
【例5-3】假设单片机系统允许外部中断0、定时 /计数器T0中断,并设定采用边沿触发,则主程 序中的中断初始化程序如下:
开始
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
11
主程序设计:
#include"AT89X51.H"
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); //等待闭合释放
(3)ET1:允许或禁止定时器T1溢出中断控制位。ET1=1,允 许中断;ET1=0,禁止中断。
(4)EX1:允许或禁止中断控制位。EX1=1,允许中断; EX1=0,禁止中断。
(5)ET0:允许或禁止定时器T0溢出中断控制位。ET0=1,允 许中断;ET0=0,禁止中断。
(6)EX0:允许或禁止中断控制位。EX0=1,允许中断; EX0=0,禁止中断。
unsigned char code led_light[]={0XFE,0XFD,0XFB,0XF7,0XEF,0XDF,0XBF,0X7F}; //点亮LED 对应的编码
void main()
{
while(1)
{
12
if(P2_0==0) //判断key0被按下
{
key_delay();//去抖延时10ms
if(P2_0==0)
//再次判断key0按下
{
while(!P2_0); //等待闭合释放
i=0;
run_flag=~ run_flag;
//编码下标i清0 //标志位取反
18
}
}
if(run_flag==0)
//判断LED运行标志位
{
P1=led_light1[i++]; //点亮LED流水灯
led_delay();
(2)IE0:无需初始,它由硬件自动设置。
(3)EX0:设置为1,即允许CPU响应外部中断0 请求。
IT0=1;
//设置为下降沿触发
EX0=1;
//允许中断
ET0=1;
//允许T0中断
EA=1;
//开放所有中断
(2)编写中断服务程序
中断程序入口。C51规定了8051单片机每种中 断类型对应中断服务程序的入口编号
中断类型
外部中断0 定时/计数器0溢出中断
外部中断1 定时/计数器1溢出中断
串行口中断
单元5 按键模块设计
1
2
回顾
1,数码管显示原理? 2,静态数码管工作原理? 3,动态数码管工作原理?
4,AT89C51有几个定时器?各是多少位的?请简述定
时器实现定时原理?
5,8051单片机定时/计数器工作方式有多少种? 6,如何设置8051单片机工作在定时/计数模式下? 7,如何启动定时器工作?
P1=led_light[1]; //点亮LED1
}
}
PR运O行TEUS-KEIL联合调试仿真
13
14
任务2 键盘中断设计
任务描述:
项目组掌握独立式键盘设计后,现要求用1个按键控制流水灯运行 样式,初始时8个LED按从头到尾方式循环运行,当按下按键,首尾两灯 点亮向中间,到中间后返回首尾的循环运行,再次按下按键又转为从头到 尾循环运行……,即1个按键交替切换流水灯的两种运行样式。
30
常用的中断服务程序的结构如下。
void 中断程序名( ) interrupt 中断号 using n { ……;
} 其中“中断程序名”最好依据中断服务程序的功 能,取一个比较直观浅显的名称;“interrupt” 是中断服务程序的关键字; “中断号”则根据 表5-1所示,如果使用外部事件0中断,则“中断 号”为0;using定义工作寄存器组;n为寄存器 组编号(0~3),默认为0;“{ }”内部为中断 服务要执行的程序。
25
(4)中断的响应条件
首先中断源有请求。其次编程设置单片机CPU允 许所有中断源请求(EA=1),并且中断允许寄 存器IE相应位置为1。这样,在每个机器周期内, 单片机对所有中断源进行顺序检测,并找到所有 有效的中断请求,对其优先级排队。单片机在紧 接着下一个机器周期响应中断条件是:1无同级 或更高级中断占用CPU控制权;2当前指令执行 完毕;3如果当前指令为RETI或需访问IE、IP的 指令,执行完该指令且紧随其后的一条指令也已 执行完毕。否则,单片机将放弃对中断请求的响 应。
26
(5)中断响应过程
中断的响应过程由单片机CPU控制,自动完成,具 体有如下几个步骤:
执行一个硬件子程序调用,处理优先级最高的中断请求, 清除中断请求标志位(TI和RI除外);硬件子程序将单片 机当前执行的内容的地址压入堆栈,转入执行相应中断 服务程序的第一条指令。
中断处理程序从入口地址开始一直执行到最后为止;
31
4,按键与外部事件中断
(1)IT0:设置为1,选择外部中断0由下降沿触 发,即当出现一个下降沿表示有一个外部中断0 的请求信号。为什么将IT0设置为1呢?任务1学 习得知(图6-3),按键按下将会产生一个从高 电平到低电平的边沿跳变(称为“下降沿”), 按键松开产生从低电平到高电平的边沿跳变(称 为“上升沿”)。因此1次按键信号(产生一次 下降沿)正好转化成外部中断0信号。
N
Y
N
闭合释放?
Y
P1.0=0点亮LED
P2.1=0?
N
Y
软件延时10ms
P2.1=0?
N
Y
N
闭合释放?
Y
P1.0=1熄灭LED
8
任务实施
1. Proteus电路设计 2. Keil C51程序设计 3. Proteus-Keil联合调试仿真
9
硬件电路图
10
(1)程序流程
由独立式键盘工作原理得知,按键 是否按下是通过读取按键对应的IO 的电平变化而判断的,在程序设计 上,即通过读取按键对应IO口的电 平是否为低(软件去抖)来决定哪 个按键被按下,当判断key0被按下, 则点亮LED0;当判断key1被按下, 则点亮LED1……。
15
1,【中例断5的-2概】念电路如5-10示,8个LED流水灯安装在
P1口,按键K0安装在P2.0上,采用独立式按键识 别,实现任务描述中要求的功能。
程序分析:主程序有两个功能模块,一方面按键 判断程序,另一方面LED流水灯程序。由于按键是 两种流水灯运行方式的交替按键,因此可考虑设 置按键控制标志位状态,LED流水灯则判断标志位 状态决定运行方式,即按键通过标志位间接控制 LED流水灯的运行方式。每次按下按键则把标志位 取反,以达到控制LED流水灯的运行。
C51中断处理程序的中断号
0
1
2
3
4
28
29
现场保护。如果中断服务程序中要使用与主程序有关的 寄存器,那么CPU在执行中断服务程序之前要保护这些 寄存器的内容,即“保护现场”,中断返回时再恢复它 们的值。在使用Keil uVison4集成开发环境时,其C51编 译器为中断服务程序提供自动现场保护以及返回时内容 恢复的功能,为用户编程提供了方便。
任务分析:
此任务设计有两个主要功能模块,一是按键的判断,二是LED流水 灯的运行。通过前面单元的学习得知,这两个功能在主程序中无限循环判 断执行,正常人完成一次按键的时间需要20ms,而LED流水灯运行频率 应小于50Hz(即应大于20ms走一个灯,否则运行太快人眼无法识别), 那么如果单片机CPU在执行流水灯显示延时程序期间,正好发生按键, CPU无法运行按键扫描程序而导致按键判断的丢失,如果1s或更长时间走 一个灯,那么丢失按键的现象将更加严重。由此可见普通的程序查询独立 式按键设计方法在此任务设计是无法胜任的。本任务将介绍单片机重要的 内部资源—中断系统,它将有效解决上述问题。
任务分析:
键盘实际上是一组开关的集合:当键按下时,两根导线接通;释放 时,两根导线不通。8个按键的键盘电路可考虑在P2口上设计,8个LED电 路仍然安装在单片机P1口。8个按键分别对应控制8个LED,按下按键则点 亮对应的灯。
独立式键盘工作原理及应用
独立式键盘的组成是由若干个按键与单片机的I/O口 一一的对应连接,然后通过读取单片机I/O的电平状态 来确认哪个对应的按键被按下,一般一个独立式按键 对应一个功能,可以通过按键的组合来实现多个功能。
键按下
前沿抖动
闭合稳 定
后沿抖动
应用举例:例5-1
7
#include"AT89X51.H"
void main()
{
while(1)
{
if(P2_0==0) //判断key0被按下
{
key_delay();//去抖延时10ms
key0按下
if(P2_0==0)
//再次判断
{
while(!P2_0); //等待闭合释放
定时/计数器0(T0)溢出中断
外部中断1():由连接在P3.3引脚的外部信号触发
定时/计数器1(T1)溢出中断
串行口中断:由发送中断TXD和接收中断RXD组成
当它们有中断请求发出时,将相应的中断标志 IE0、TF0、IE1、TF1、TI、RI自动置位,单片机 CPU根据中断标志位情况判别是哪个中断源发出 的中断请求。中断标志位存放在特殊功能寄存器 TCON、SCON中。
5
P2.0
key0
P2.1
key1
P2.2
key2
P2.3
key3
P2.4
key4
P2.5
key5
key6
P2.6
key7
P2.7
6
抖动:当用手按下一个键时,往往出现按键在闭合和断开位置之 间来回跳动多次才能到闭合稳定状态的现象;在 释放一个键时, 也会出现类似的情况,这种情况就是抖动。按下一个键时产生前 沿抖动,释放一个键时产生后沿抖动。抖动的持续时间随键盘簧 片的材料和操作员而异,通常在5~10ms。而5~10ms已经对程 序进行多次循环扫描执行,显而易见,抖动问题不解决,就会引 起对闭合键的多次识别。 。
16
开始
按键源自文库下?
N
Y
LED运行标志位取反
17
N
LED运行标志位=1?
Y
流水灯运行模式1
流水灯运行模式2
LED点亮延时
LED点亮延时
i自加1
i自加1
i=8?
N
Y
i清0
i=7?
N
Y
i清0
void main()
{
while(1)
{
if(P2_0==0) //判断key0被按下
{
key_delay();//去抖延时10ms
//点亮延时
if(i==8)i=0;
}
else
{
P1=led_light2[i++]; //点亮LED流水灯
led_delay();
//点亮延时
2, 8051单片机中断系统结构
19
20
(1)哪些事件可以引发中断
8051单片机有5个中断源。
外部中断0():由连接在P3.2引脚的外部信号触发
P1_0=0; //点亮LED
}
}
if(P2_1==0)
//判断key1被按下
{
key_delay();//去抖延时10ms
key1按下
if(P2_1==0)
//再次判断
{
while(!P2_1); //等待闭合释放
P1_0=1; //熄灭LED
}
}
}
}
开始
P2.0=0?
N
Y
软件延时10ms
P2.0=0?
8,请简述DS1302读取时间的编程过程?
本单元任务
任务1 独立式键盘设计 任务2 键盘中断设计 任务3 矩阵式键盘设计 任务4 多个外部中断设计
3
4
任务1 独立式键盘设计
任务描述:
众多嵌入式单片机系统、嵌入式单片机产品设备中,键盘模块都是 必不可少的,比如手机及各种智能家电等。本任务通过按键控制点亮流水 灯(8个按键分别对应控制8个LED),学习最简单的键盘—独立式按键设 计方法。
(2)中断标志 TCON
21
SCON
22
(3)中断允许与禁止 IE
23
24
(1)EA:总中断允许控制。当EA=1时,开放所有中断,此时 各中断源的允许和禁止通过相应的中断允许位单独加以控制; 当EA=0时,禁止所有中断。
(2)ES:允许或禁止串行口中断控制位。ES=1,允许中断; ES=0,禁止中断。
相关文档
最新文档