项目5 按键识别的设计.ppt

上传人:bao****ty 文档编号:144690140 上传时间:2020-09-13 格式:PPT 页数:57 大小:998.50KB
返回 下载 相关 举报
项目5 按键识别的设计.ppt_第1页
第1页 / 共57页
项目5 按键识别的设计.ppt_第2页
第2页 / 共57页
项目5 按键识别的设计.ppt_第3页
第3页 / 共57页
项目5 按键识别的设计.ppt_第4页
第4页 / 共57页
项目5 按键识别的设计.ppt_第5页
第5页 / 共57页
点击查看更多>>
资源描述

《项目5 按键识别的设计.ppt》由会员分享,可在线阅读,更多相关《项目5 按键识别的设计.ppt(57页珍藏版)》请在金锄头文库上搜索。

1、项目5 按键识别的设计, 知识目标: 1了解单片机的定义、类型和应用领域; 2掌握AT89S51单片机的封装形式、实物外形及各个引脚的功能; 3. 掌握AT89S51单片机最小系统的组成及相关电路的工作原理; 4. 掌握AT89S51单片机基本接口电路的组成及电路功能。 能力目标: 1. 认识AT89S51单片机、晶体振荡器、RS-232串口端及电阻、电容 等元器件。 2. 会搭建单片机最小系统应用电路; 3. 了解单片机应用系统的开发过程。,任务1 单键控制LED的设计,在单片机应用系统中,键盘主要用于向计算机输入数据、传送命令等,是人工干预计算机的主要手段。键盘要通过接口与单片机相连,分为

2、编码键盘和非编码键盘两类。 键盘上闭合键的识别由专用的硬件编码器实现,并产生键编码号或键值的称为编码键盘,如计算机键盘。而靠软件编程来识别的称为非编码键盘,在单片机组成的各种系统中,使用最广泛的是非编码键盘。当然,也有用到编码键盘的。 非编码键盘有分为:独立键盘和行列式(又称为矩阵式)键盘。,任务1 单键控制LED的设计,用单键(即独立键盘中的按键)实现对LED进行控制,每按一次按键时,LED显示方式变化一次,用以表示按键控制的结果。,1提出任务,任务1 单键控制LED的设计,(1)硬件电路设计 以AT89S51单片机作为控制电路,按键连接至单片机的P1.0引脚,另一端接地,P2口外接8个采用

3、共阳极连接方式的发光二极管(LED)和8个限流电阻,硬件电路原理图所示。,2任务分析,任务1 单键控制LED的设计,(2)独立式按键的软件设计 在单片机应用系统中主程序一般是循环结构,键盘程序作为子程序供主程序调用。单片机按键控制系统的主程序结构图所示。,任务1 单键控制LED的设计,上电初始化后便循环调用键盘程序、显示程序、功能处理程序等。在循环的过程中还可能因中断而执行中断服务程序。 另外,在键盘的软件设计中还要注意按键的去抖动问题。由于按键一般是由机械式触点构成的,在按键按下和断开的瞬间均有一个抖动过程,时间大约为5ms10ms,可能会造成单片机对按键的误识别。,任务1 单键控制LED的

4、设计,物理按键抖动波形图,任务1 单键控制LED的设计,按键消抖一般有两种方法,即硬件消抖和软件消抖。,硬件消抖方法,任务1 单键控制LED的设计,在软件设计中,当单片机检测到有键按下时,可以先延时一段时间越过抖动过程再对按键识别。 实际应用中,一般希望按键一次按下单片机只处理一次,但由于单片机执行程序的速度很快,按键一次按下可能被单片机多次处理。为避免此问题,可在按键第一次按下时延时10ms之后再次检测按键是否按下,如果此时按键仍然按下,则确定有按键输入。这样便可以避免按键的重复处理。,任务1 单键控制LED的设计,软件消抖流程图,任务1 单键控制LED的设计,3源程序编写,/* 文件名:x

5、m5-1.c * / #include / 包含头文件 sbit key1=P10; / 按键定义 void delay10ms(void) / 延时10ms 子函数 unsigned char i,k; / 变量定义 for(i=20;i0;i-) / for语句循环体 for(k=250;k0;k-); ,任务1 单键控制LED的设计,3源程序编写,void main(void) / 主函数 char i=0 xfe; P2=i; /置P2.0引脚为低电平 while(1) if(key1= =0) /判断按键key1是否按下 delay10ms(); if(key1=0) /去抖动 if

6、(i ,任务2 多路按键状态指示的设计,用AT89S51单片机及LED数码管实现对键盘键值的实现。当按下键盘中不同按键时,LED数码管上显示不同的键值。,1提出任务,任务2 多路按键状态指示的设计,2任务分析,(1)硬件电路设计 本设计采用AT89S51单片机最小系统,P3口外接矩阵式键盘接口电路,P1口外接共阴型七段数码管,如图5.2.1所示。电路中共有16个按键,按44的矩阵式排列,键号依次为0F。单片机的P3.0P3.3为输出口,连接4条列线;P3.4P3.7为输入口,连接4条行线。,任务2 多路按键状态指示的设计,键盘键值显示电路图,任务2 多路按键状态指示的设计,(2)软件设计思路

7、矩阵式按键的软件设计与独立式按键不同的只是按键的识别方法不同。在矩阵式按键的扫描程序中,要对按键逐行逐列地扫描,得到按下键的行列信息,然后还要转换成键号,以便据此转到相应的键处理程序。 按键扫描子函数中,先对4条行线送高电平,当判断有按键按下之后,延时30ms之后再判断该按键是否按下。若仍然有按键按下,则能知道被按下按键所处的行编码。之后再在判断被按下按键所处列编码,综合行、列编码得到按键位置,从而判断出键值。,任务2 多路按键状态指示的设计,程序流程图,任务2 多路按键状态指示的设计,3源程序编写,/文件名xm5-2.c #include #define uchar unsigned cha

8、r #define uint unsigned int uchar key; unsigned char code disp_code=0 x3f,0 x06,0 x5b,0 x4f,0 x66,0 x6d,0 x7d,0 x07,0 x7f,0 x6f,0 x77,0 x7c, 0 x39,0 x5e,0 x79,0 x71; unsigned char code key_code=0 xee,0 xed,0 xeb,0 xe7,0 xde,0 xdd,0 xdb,0 xd7, 0 xbe,0 xbd,0 xbb,0 xb7, 0 x7e,0 x7d,0 x7b,0 x77 ;,任务2 多路

9、按键状态指示的设计,3源程序编写,void delayms(uint ms) uchar t; while(ms-) for(t = 0; t 120; t+); ,任务2 多路按键状态指示的设计,3源程序编写,uchar keyscan() /键盘扫描程序 uchar scan1,scan2,keycode,j; P3=0 xf0; scan1=P3; if(scan1 /组合成键编码,任务2 多路按键状态指示的设计,for(j=0;j=15;j+) if(keycode= key_codej) /查表得键值 key=j; return(key); else P3=0 xff; return

10、 (16); ,任务2 多路按键状态指示的设计,void keydown() /判断是否有键按下 P3=0 x0f; if(P3 ,任务2 多路按键状态指示的设计, 思考:,矩阵键盘中,如果有两个按键同时按下,能否识别?,任务2 多路按键状态指示的设计, 知识链接,一、矩阵式键盘 1结构和工作原理 当输入部分有多个按键时,若仍然采用独立键盘,必然会占用大量的I/O口,采用矩阵键盘是一种比较节省资源的方法。矩阵式键盘又称行列式键盘,往往用于按键数量较多的场合。矩阵式键盘的按键设置在行与列的交点上。,任务2 多路按键状态指示的设计,一般矩阵键盘的连接示意图,任务2 多路按键状态指示的设计,2任务分

11、析,(1)硬件电路设计 本设计采用AT89S51单片机最小系统,P3口外接矩阵式键盘接口电路,P1口外接共阴型七段数码管,如图5.2.1所示。电路中共有16个按键,按44的矩阵式排列,键号依次为0F。单片机的P3.0P3.3为输出口,连接4条列线;P3.4P3.7为输入口,连接4条行线。,任务2 多路按键状态指示的设计,2按键的识别 确定键盘上哪一个键被按下可以采用逐行扫描或逐列扫描的方法,称为行(列)扫描法。 (1)先将全部列线置为低电平,然后通过行线接口读取行线电平,判断键盘中是否有按键被按下。 (2)判断闭合键的具体位置。在确认键盘中有按键被按下后,依次将列线置为低电平,再逐行检测各行的

12、电平状态。若某行为低电平,则该行与置为低电平的列线相交处的按键即为闭合按键。 (3)综合上述两步的结果,即可确定出闭合键所在的行和列,从而识别出所按下的键。,任务2 多路按键状态指示的设计,3矩阵式键盘的软件设计 矩阵式键盘的扫描常用编程扫描方式、定时扫描方式或中断扫描方式,无论采用哪种方式,都要编制相应的键盘扫描程序。在键盘扫描程序中一般要完成以下几个功能: (1)判断键盘上有无按键按下; (2)去键的机械抖动影响; (3)求所按键的键号; (4)转向键处理程序。,任务2 多路按键状态指示的设计,在编程扫描方式中,只有当单片机空闲时,才执行键盘扫描任务。一般是把键盘扫描程序编成子程序,在主程

13、序循环执行时调用。在主程序执行任务太多或执行时间太长时,按键的反应速度会变慢。 在定时扫描方式中单片机可以定时对键盘进行扫描,方法是利用单片机内部定时器,每隔一定的时间就产生定时中断,CPU响应中断后对键盘进行扫描,并在有按键按下时进行处理。 在中断扫描方式中,当键盘上有按键被按下时产生中断申请,单片机响应中断后,在中断服务程序中完成键扫描、识别键号并进行键功能处理。 以上几种键盘扫描方式只是转入键盘扫描程序的方式不同,而键盘扫描程序的设计方法是类似的。,任务2 多路按键状态指示的设计,二、函数的返回值 函数的值是指函数被调用之后,执行函数体中的程序段所取得的并返回给主调函数的值。对函数返回值

14、有以下一些说明: 函数的值只能通过return语句返回主调函数。 return 语句的一般形式为: return 表达式; 或者为: return (表达式); 该语句的功能是计算表达式的值,并返回给主调函数。在函数中允许有多个return语句,但每次调用只能有一个return 语句被执行,因此只能返回一个函数值。,任务2 多路按键状态指示的设计,函数值的类型和函数定义中函数的类型应保持一致。如果两者不一致,则以函数类型为准,自动进行类型转换。 如函数值为整型,在函数定义时可以省去类型说明。 不返回函数值的函数,可以明确定义为“空类型”,类型说明符为“void”。如: void s(int n

15、) 一旦函数被定义为空类型后,就不能在主调函数中使用被调函数的函数值了。为了使程序有良好的可读性并减少出错,凡不要求返回值的函数都应定义为空类型。,任务3 采用外中断控制的彩灯设计,利用独立按键(采用外部中断方式)控制彩灯的运行。通过按动按键,使得彩灯在三种闪亮方式(左移、右移、自定义花样)之间切换。,1提出任务,任务3 采用外中断控制的彩灯设计,一般来说,按键处理方式有以下两种:第一种方法是不断地查询按键,有按键按下时进行消抖处理,再判断是否真的有按键按下。这种方法在按键查询期间不能做任何其他操作。第二种方法是每隔一段时间,抽样检测一次,对键值进行判别处理。利用按键对单片机输出进行控制的基本

16、方式在任务1和任务2中已介绍,分别实现了单键、多键对单片机输出的控制。但是,任务1和任务2中的对按键处理的方式还存在不够完善之处。为了解决这个问题,本任务中采用单片机的外部中断方式来实现对按键输入的处理。 为了实现外部中断对单片机的输出的控制,需要将按键连接在外部中断所对应的引脚上。,2.任务分析,任务3 采用外中断控制的彩灯设计,中断控制LED电路图,任务3 采用外中断控制的彩灯设计,由于中断函数与主函数之间的运行相当于两个程序并行运行,而将一个任务分为两个部分处理的具体分解方法有多种,因此用中断函数控制彩灯的显示,具体实现方法和实现程序也是多种多样的。,3程序设计分析,任务3 采用外中断控制的彩灯设计,(a)主函数流程图 b)中断函数流程图,任务3 采用外中断控制的彩灯设计,/文件名xm5-3.c #inclu

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 学术论文 > 大学论文

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号