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

下载本文档

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

文档简介

课题三(实例)之按键任务一独立式按键控制的数码管显示任务二矩阵键盘数码管显示任务一独立式按键控制的数码管显示

本任务是利用独立按键实现对数码进行控制,记录按键的次数,每当按下一次键时,计数器加1,将计数器的值送数码管显示,当计数器加到10时,则归零重新计数。设P0口连接按键,对Key1进行计数P1口连接数码管

图6-2键盘控制原理图

为了实现用按键控制LED的显示,首先要使单片机读入按键的状态,再根据键盘的状态去控制LED的亮灭。对LED的控制,在前面的课题中已经讲了,这里不再作重点讲解,仅仅作为一个键盘控制对象的例子。根据图6-2所示的硬件电路,每当按下按键时,单片机引脚P0.0将为低电平,程序运行时,需要检测P0.0引脚是否为低电平,若P0.0引脚为低电平,表示按键已按下。当每次按下按键时,则使P1口输出的数据变化一次,输出不同数据,对应的程序设计框图如图6-4所示。程序设计分析初始化计数器+1送显是否按下键否是图6-4键控计数显示流程图

一、按键的特性

作为机械按钮,键按下或者放开时,都存在着接通或断开的不稳定现象,从而使信号电平具有抖动现象,这种现象称为抖动。由于按键的抖动,使按键对应的输出电平若干个干扰脉冲,如图6-5所示。为了保证每按下一次按键,单片机程序只动作一次,就需要消除因按键的抖动现象而引起的错误动作,具体的处理方式分为硬件消除抖动和软件消除抖动,简称消抖。键盘电路原理抖动时间<10ms开关动作时间>100ms“1”“0”<10ms图6-5按键的波形二、硬件消抖图中两个“与非”门构成一个RS触发器。当按键未按下时,输出为1;当键按下时,输出为0。此时即使因按键的机械性能,使按键因弹性抖动而产生瞬时断开(抖动跳开B),中要按键不返回原始状态A,双稳态电路的状态不改变,输出保持为0,不会产生抖动的波形。

也就是说,即使B点的电压波形是抖动的,但经双稳态电路之后,其输出为正规的矩形波。硬件消抖动一般用于按键较少的情况。三、软件消抖如果按键较多,常用软件方法去抖,即检测出键闭合后执行一个延时程序,产生5ms~10ms的延时,让前沿抖动消失后再一次检测键的状态,如果仍保持闭合状态电平,则确认为真正有键按下。

当检测到按键释放后,也要给5ms~10ms的延时,待后沿抖动消失后才能转入该键的处理程序。延时等待10ms

仍有按键信号?Y

有按键信号?NYN按键处理

按键释放?NY图6-7软件消抖的流程图思考:为什么要等键释放?

若不等会出现什么情况?1、C语言程序:#include<reg51.H>sbitP0_0=P0^0;unsignedcharcount;unsignedcharcodetable[]={0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07,0x7f,0x6f};voiddelay10ms(){ unsignedchari,j; for(i=250;i>0;i--) for(j=248;j>0;j--);}voidmain(void){ while(1){ if(P0_0==0) { delay10ms(); if(P0_0==0) { count++; if(count==10)count=0; while(P0_0==0); P1=table[count];} } }}2、汇编程序ORG00hSTART: MOVR1,#00H;初始化R1为0,REL: JBP0.3,REL;判断SP1是否按下

LCALLDELAY;若按下,则延时10ms左右

JBP0.3,REL;再判断SP1是否真得按下

MOVA,R1 MOVDPTR,#TABLE MOVCA,@A+DPTR MOVP1,A INCR1 JNBP0.3,$;等待SP1释放

CJNER1,#10,REL SJMPSTART;继续对K1按键扫描DELAY: MOVR6,#20;延时10ms子程序L1: MOVR7,#248 DJNZR7,$ DJNZR6,L1 RETTABLE:DB3FH,06H,5BH,4FH,66H,6DHDB7DH,07H,7FH,6FHEND练习:编写程序使得K0按下时显示1,K7按下时显示8,无键按下时显示0,有多键按下时显示P。任务二获取矩阵键盘的键值

本任务目标是用矩阵键盘控制LED实现一个矩阵键盘的按键值。编写程序使得P0显示按键的行号,P2口显示按键的列号。

在单片机程序中,对多个键的处理应包括以下三项内容:键输入检查键盘是否有键被按下,并消除按键抖动。键译码(扫描法或反转法)即获取是哪个键按下,得到按键的行号,和列号;有时还需计算键码(每个按键编号,对于4*4的矩阵按键,键码共16个为[0,15])。键结束即检查按键是否抬起,这样使得一次按键只做一次处理。键处理根据键码执行不同按键处理程序段。一、键盘处理检查键盘是否有键被按下,并消除按键抖动。代码flag=0;P1=0x0F;//高四位是列线输出0,低四位是行线读入前写1if(P1&0x0F!=0x0F){ delay(); if(P1&0x0F!=0x0F) flag=1;}键输入扫描键盘行列式键盘的具体识别方法有扫描法和反转法。扫描法即用列线输出,行线输入(可交换行线和列线的输入、输出关系)。其中,列线逐列输出0,某行有键按下,行线有0输入,若无按键,行线输入全部为1。当有键按下时,根据行线和列线可最终确定哪个按键被按下。反转法行线和列线交换输入、输出,分两步获取按键的键号,但是在多键同时按下时不能准确判断。键译码代码获取行号temp=0;P1=0x0F;//低四位输入输入前写1//列为高四位低电平输出temp=P1;//读P1口

temp=(~temp&0x0F);//屏蔽高四位

switch(temp){ case1:

row=0;break;//p1.0被拉低 case2:

row=1;break;//p1.1被拉低 case4:

row=2;break;//p1.2被拉低 case8:

row=3;break;//p1.3被拉低 default:

row=16;//多个按键被按下,或无键按下}键译码——反转法代码获取列号

P1=0xF0;//列高四位输入,输入前写1//行为低四位,低电平输出temp=P1;//读P1口temp=(~(temp>>4)&0x0F);switch(temp){ case1:col=0;break;//p1.4被拉低 case2:

col=1;break;//p1.5被拉低 case4:

col=2;break;//p1.6被拉低 case8:

col=3;break;//p1.7被拉低 default:

col=16;//多个按键被按下,或无键按下}计算键值key=row*4+col;键译码——反转法代码获取列号(row,col)ucharcodescan[4]={0xEF,0xDF,0xBF,0x7F};for(i=0;i<4;i++){P1=scan[i];//低四位输入扫描第0列,p1.4为低电平temp=P1;//读P1口

temp=~(temp&0x0F); //屏蔽高四位

if(temp==1)//p1.0被拉低

row=0,col=I,break;elseif(temp==2)//p1.1被拉低

row=1,col=i,break;elseif(temp==4)//p1.2被拉低

row=2,col=i,break;elseif(temp==8)//p1.3被拉低

row=3,col=i,break;elserow=16,col=16;//多个按键被按下,或无键按下}计算键值key=键译码——扫描法即检查按键是否抬起,这样使得一次按键只做一次处理。代码flag=0;P1=0x0F;if(P1&0x0F!=0){ delay(); if(P1&0x0F!=0) flag=1;}键结束根据键码执行不同按键处理程序段。代码unsignedcharcodetable[]={0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07,0x7f,0x6f};P0=

table[row];P2=table[col];键处理主程序while(1){if(有键按下){键译码等待键结束键处理}}练习:编写程序使得P0显示键码的十位,P2口显示键码的个位。任务三简易计算器

本任务目标是用矩阵键盘控制数码管实现一个简易计算器。图4-7简易计算器的电路原理图

在单片机程序中,对多个键的处理应包括以下三项内容:键输入检查键盘是否有键被按下,并消除按键抖动,获得或规定(单个按键)按键的键号。可以用动态显示函数代替消抖用的延时函数。键译码即获取是哪个键按下,用键值给各个按键编号,对于4*4的矩阵按键,键值共16个为[0,15]。可将键值分配为:数字键0~9、功能键0AH~0FH,是按键在物理位置上的人为规定数值。键结束键处理根据键值执行不

温馨提示

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

评论

0/150

提交评论