单片机实例之按键原理剖析课件_第1页
单片机实例之按键原理剖析课件_第2页
单片机实例之按键原理剖析课件_第3页
单片机实例之按键原理剖析课件_第4页
单片机实例之按键原理剖析课件_第5页
已阅读5页,还剩25页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、课题三(实例) 之按键任务一 独立式按键控制的数码管显示任务二 矩阵键盘数码管显示第1页,共30页。任务一 独立式按键控制的数码管显示 本任务是利用独立按键实现对数码进行控制,记录按键的次数,每当按下一次键时,计数器加1,将计数器的值送数码管显示,当计数器加到10时,则归零重新计数 。设P0口连接按键,对Key1进行计数 P1口连接数码管 第2页,共30页。图6-2 键盘控制原理图第3页,共30页。 为了实现用按键控制LED的显示,首先要使单片机读入按键的状态,再根据键盘的状态去控制LED的亮灭。对LED的控制,在前面的课题中已经讲了,这里不再作重点讲解,仅仅作为一个键盘控制对象的例子。 根据

2、图6-2所示的硬件电路,每当按下按键时,单片机引脚P0.0将为低电平,程序运行时,需要检测P0.0引脚是否为低电平,若P0.0引脚为低电平,表示按键已按下。 当每次按下按键时,则使P1口输出的数据变化一次,输出不同数据,对应的程序设计框图如图6-4所示。程序设计分析第4页,共30页。初始化计数器+1送显是否按下键否是图6-4 键控计数显示流程图第5页,共30页。 一、按键的特性 作为机械按钮,键按下或者放开时,都存在着接通或断开的不稳定现象,从而使信号电平具有抖动现象,这种现象称为抖动。 由于按键的抖动,使按键对应的输出电平若干个干扰脉冲,如图6-5所示。为了保证每按下一次按键,单片机程序只动

3、作一次,就需要消除因按键的抖动现象而引起的错误动作,具体的处理方式分为硬件消除抖动和软件消除抖动,简称消抖。键盘电路原理抖动时间10ms开关动作时间100ms“ 1 ”“0”10ms图6-5 按键的波形第6页,共30页。二、 硬件消抖 图中两个“与非”门构成一个RS触发器。当按键未按下时,输出为1;当键按下时,输出为0。此时即使因按键的机械性能,使按键因弹性抖动而产生瞬时断开(抖动跳开B),中要按键不返回原始状态A,双稳态电路的状态不改变,输出保持为0,不会产生抖动的波形。 也就是说,即使B点的电压波形是抖动的,但经双稳态电路之后,其输出为正规的矩形波。 硬件消抖动一般用于按键较少的情况。第7

4、页,共30页。三、软件消抖 如果按键较多,常用软件方法去抖,即检测出键闭合后执行一个延时程序,产生5ms10ms的延时,让前沿抖动消失后再一次检测键的状态,如果仍保持闭合状态电平,则确认为真正有键按下。 当检测到按键释放后,也要给5ms10ms的延时,待后沿抖动消失后才能转入该键的处理程序。 延时等待10ms 仍有按键信号?Y 有按键信号?NYN按键处理 按键释放?NY图6-7 软件消抖的流程图思考:为什么要等键释放? 若不等会出现什么情况?第8页,共30页。1、C语言程序:#include sbit P0_0=P00;unsigned char count;unsigned char cod

5、e table=0 x3f,0 x06,0 x5b,0 x4f,0 x66,0 x6d,0 x7d,0 x07,0 x7f,0 x6f;void delay10ms()unsigned char i,j;for(i=250;i0;i-)for(j=248;j0;j-);第9页,共30页。void main(void)while(1) if(P0_0=0) delay10ms(); if(P0_0=0) count+; if(count=10) count=0; while(P0_0=0); P1=tablecount; 第10页,共30页。2、汇编程序ORG 00hSTART: MOV R1,

6、#00H ;初始化R1为0,REL: JB P0.3,REL ;判断SP1是否按下LCALL DELAY ;若按下,则延时10ms左右JB P0.3,REL ;再判断SP1是否真得按下MOV A,R1MOV DPTR,#TABLEMOVC A,A+DPTRMOV P1,AINC R1JNB P0.3,$ ;等待SP1释放CJNE R1,#10,REL第11页,共30页。SJMP START ;继续对K1按键扫描DELAY: MOV R6,#20 ;延时10ms子程序L1: MOV R7,#248DJNZ R7,$DJNZ R6,L1RETTABLE: DB 3FH,06H,5BH,4FH,66

7、H,6DH DB 7DH,07H,7FH,6FH END第12页,共30页。练习: 编写程序使得K0按下时显示1,K7按下时显示8,无键按下时显示0,有多键按下时显示P。第13页,共30页。任务二获取矩阵键盘的键值 本任务目标是用矩阵键盘控制LED实现一个矩阵键盘的按键值。第14页,共30页。编写程序使得P0显示按键的行号,P2口显示按键的列号。第15页,共30页。 在单片机程序中,对多个键的处理应包括以下三项内容: 键输入检查键盘是否有键被按下,并消除按键抖动。键译码(扫描法或反转法)即获取是哪个键按下,得到按键的行号,和列号;有时还需计算键码(每个按键编号,对于4*4的矩阵按键,键码共16

8、个为0,15)。键结束即检查按键是否抬起,这样使得一次按键只做一次处理。键处理根据键码执行不同按键处理程序段。一、键盘处理第16页,共30页。检查键盘是否有键被按下,并消除按键抖动。代码flag=0;P1=0 x0F; /高四位是列线输出0,低四位是行线读入前写1if(P1&0 x0F != 0 x0F) delay();if(P1&0 x0F != 0 x0F)flag=1;键输入第17页,共30页。扫描键盘 行列式键盘的具体识别方法有扫描法和反转法。扫描法即用列线输出,行线输入(可交换行线和列线的输入、输出关系)。其中,列线逐列输出0,某行有键按下,行线有0输入,若无按键,行线输入全部为1

9、。当有键按下时,根据行线和列线可最终确定哪个按键被按下。反转法行线和列线交换输入、输出,分两步获取按键的键号,但是在多键同时按下时不能准确判断。键译码第18页,共30页。代码 获取行号 temp = 0; P1=0 x0F; /低四位输入 输入前写1 /列为高四位 低电平输出 temp=P1; /读P1口 temp=(temp&0 x0F); /屏蔽高四位 switch(temp)case 1: row=0; break; / p1.0 被拉低case 2: row=1; break; / p1.1 被拉低case 4: row=2; break; / p1.2 被拉低case 8: row=

10、3; break; / p1.3 被拉低default: row=16; /多个按键被按下,或无键按下 键译码反转法第19页,共30页。代码 获取列号 P1=0 xF0; /列高四位输入,输入前写1 / 行为低四位,低电平输出 temp=P1; /读P1口 temp= (temp4) & 0 x0F); switch(temp)case 1: col=0; break; / p1.4 被拉低case 2: col=1; break; / p1.5 被拉低case 4: col=2; break; / p1.6 被拉低case 8: col=3; break; / p1.7 被拉低default

11、: col=16; /多个按键被按下,或无键按下 计算键值 key = row*4 + col;键译码反转法第20页,共30页。代码 获取列号(row,col)uchar code scan4=0 xEF,0 xDF,0 xBF,0 x7F; for(i=0;i4;i+) P1= scani; /低四位输入 扫描第0列,p1.4为低电平 temp=P1; /读P1口 temp= (temp&0 x0F); /屏蔽高四位 if(temp=1) / p1.0 被拉低 row=0,col=I,break; else if(temp=2) / p1.1 被拉低 row=1,col=i,break; e

12、lse if(temp=4) / p1.2 被拉低 row=2,col=i,break; else if(temp=8) / p1.3 被拉低 row=3,col=i,break; else row=16,col=16; / 多个按键被按下,或无键按下计算键值 key=键译码扫描法第21页,共30页。即检查按键是否抬起,这样使得一次按键只做一次处理。代码flag=0;P1=0 x0F;if(P1&0 x0F!=0)delay();if(P1& 0 x0F!=0)flag=1;键结束第22页,共30页。根据键码执行不同按键处理程序段。代码unsigned char code table=0 x3

13、f,0 x06,0 x5b,0 x4f,0 x66,0 x6d,0 x7d,0 x07,0 x7f,0 x6f;P0= tablerow;P2= tablecol;键处理第23页,共30页。主程序while(1)if(有键按下)键译码等待键结束键处理第24页,共30页。练习: 编写程序使得P0显示键码的十位,P2口显示键码的个位。第25页,共30页。任务三简易计算器 本任务目标是用矩阵键盘控制数码管实现一个简易计算器。第26页,共30页。图4-7 简易计算器的电路原理图第27页,共30页。 在单片机程序中,对多个键的处理应包括以下三项内容: 键输入 检查键盘是否有键被按下,并消除按键抖动,获得或规定(单个按键)按键的键号。可以用动态显示函数代替消抖用的延时函数。键译码 即获取是哪个键按下,用键值给各个按键编号,对于4*4的矩阵按键,键值共16个为0,15。可将键值分配为:数字键09、功能键0AH0FH,是按键在物理位置上的人为规定数值。键结束键处理 根据键值执行不同程序段。如:若键值属于数字,则调用显示数字子程序;若键值属于功能键,则进行多分支转

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论