课题六按键原理_第1页
课题六按键原理_第2页
课题六按键原理_第3页
课题六按键原理_第4页
课题六按键原理_第5页
已阅读5页,还剩37页未读 继续免费阅读

下载本文档

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

文档简介

课题六按键原理第一页,共四十二页,编辑于2023年,星期五课题目标本课题的任务是用按键控制单片机实现显示,如图6-1所示。学习单片机对键盘信息的处理方法,学会用键盘控制单片机程序的运行。第二页,共四十二页,编辑于2023年,星期五课题分析为了让单片机控制发光二极管,需要将发光二极管连接到单片机的端口上,图6-1就是实验电路板单片机对彩灯(发光二极管)控制的电路连接。在一个单片机系统中,为了实现人对单片机的控制,按键是最常用的输入设备之一。而要实现多个按键的输入识别与控制,先要学习并理解单个按键的输入与对应程序的处理方法,然后再学习对多个键进行处理。因此,将按键任务分为单键控制LED显示和独立式按键控制两个任务来完成。第三页,共四十二页,编辑于2023年,星期五任务一独立式按键控制的LED显示

本任务是利用独立按键实现对LED进行控制,每当按下一次键时,LED显示方式变化左移一次,用以显示按键控制的结果。

第四页,共四十二页,编辑于2023年,星期五图6-2键盘控制原理图第五页,共四十二页,编辑于2023年,星期五图6-3LED显示原理图第六页,共四十二页,编辑于2023年,星期五

为了实现用按键控制LED的显示,首先要使单片机读入按键的状态,再根据键盘的状态去控制LED的亮灭。对LED的控制,在前面的课题中已经讲了,这里不再作重点讲解,仅仅作为一个键盘控制对象的例子。根据图6-2所示的硬件电路,每当按下按键时,单片机引脚P0.0将为低电平,程序运行时,需要检测P0.0引脚是否为低电平,若P0.0引脚为低电平,表示按键已按下。当每次按下按键时,则使P1口输出的数据变化一次,输出不同数据,对应不同的发光二极管被点亮,对应的程序设计框图如图6-4所示。程序设计分析第七页,共四十二页,编辑于2023年,星期五初始化LED左移是否按下键否是图6-4按键控制LED流程图第八页,共四十二页,编辑于2023年,星期五一、按键的特性

作为机械按钮,键按下或者放开时,都存在着接通或断开的不稳定现象,从而使信号电平具有抖动现象,这种现象称为抖动。由于按键的抖动,使按键对应的输出电平出现若干个干扰脉冲,如图6-5所示。为了保证每按下一次按键,单片机程序只动作一次,就需要消除因按键的抖动现象而引起的错误动作,具体的处理方式分为硬件消除抖动和软件消除抖动,简称消抖。键盘电路原理抖动时间<10ms开关动作时间>100ms“1”“0”<10ms图6-5按键的波形第九页,共四十二页,编辑于2023年,星期五1、硬件消抖硬件消抖采用硬件电路完成,图6-6所示的电路就是一种硬件消抖电路。&I/O接口&+5v图6-6消除抖动电路开关单片机第十页,共四十二页,编辑于2023年,星期五2、软件消抖

也可用软件方法消除抖动,而用软件消抖则一般是采用软件延时的方式,通过延时来换取读入稳定的数据。图6-7就是软件消抖的流程图。延时等待10ms

仍有按键信号?Y

有按键信号?NYN键盘处理按键释放?NY图6-7软件消抖的流程图第十一页,共四十二页,编辑于2023年,星期五C语言程序:#include<AT89X51.H>#include<intrins.h>unsignedcharcount;voiddelay10ms(void){unsignedchari,j;for(i=250;i>0;i--)for(j=248;j>0;j--);}第十二页,共四十二页,编辑于2023年,星期五voidmain(void){count=0xfe;while(1){if(P0_3==0){delay10ms();if(P0_3==0){P1=count;count=_crol_(count,1);while(P0_3==0);}}}}第十三页,共四十二页,编辑于2023年,星期五2、汇编语言程序

ORG00hmova,#0fehREL:JBP0.3,REL;判断SP1是否按下

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

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

movp1,arlaJNBP0.3,$;等待SP1释放SJMPrel;继续对K1按键扫描DELAY:MOVR6,#20;延时10ms子程序L1:MOVR7,#248DJNZR7,$DJNZR6,L1RETEND第十四页,共四十二页,编辑于2023年,星期五

任务二独立式按键控制数码管显示本任务是利用独立按键实现对数码管的控制,每当按下一次键时,数码管显示按键次数0-9。第十五页,共四十二页,编辑于2023年,星期五程序设计流程图分析初始化数码管显示是否按下键否是图6-5按键控制数码管流程图第十六页,共四十二页,编辑于2023年,星期五1、C语言程序:#include<AT89X51.H>unsignedcharcount;unsignedcharcodetable[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};voiddelay10ms(void){unsignedchari,j;for(i=250;i>0;i--)for(j=248;j>0;j--);}第十七页,共四十二页,编辑于2023年,星期五voidmain(void){while(1){if(P0_3==0){delay10ms();if(P0_3==0){count++;if(count==10){count=0;}P1=table[count];while(P0_3==0);}}}}第十八页,共四十二页,编辑于2023年,星期五2、汇编程序ORG00hSTART:MOVR1,#00H;初始化R1为0,

REL:JBP0.3,REL;判断SP1是否按下

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

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

MOVA,R1MOVDPTR,#TABLEMOVCA,@A+DPTRMOVP1,AINCR1JNBP0.3,$;等待SP1释放CJNER1,#10,REL第十九页,共四十二页,编辑于2023年,星期五SJMPSTART;继续对K1按键扫描DELAY:MOVR6,#20;延时10ms子程序L1:MOVR7,#248DJNZR7,$DJNZR6,L1RETTABLE:DB3FH,06H,5BH,4FH,66H,6DHDB7DH,07H,7FH,6FHEND第二十页,共四十二页,编辑于2023年,星期五任务三矩阵键盘数码管显示本任务目标是用矩阵键盘控制数码管显示。第二十一页,共四十二页,编辑于2023年,星期五图6-7按键电路图第二十二页,共四十二页,编辑于2023年,星期五任务分析为了便于学习和理解,如何用键盘实现程序控制,完成设计需要的键盘控制功能。着重强调键盘定义和键盘控制的实现。为了便于输入,采用16个键的4×4矩阵式键盘作为输入,输出电路采用前面课题已经介绍的LED数码管的显示电路,控制电路由AT89S51单片机系统。第二十三页,共四十二页,编辑于2023年,星期五图4-7显示电路原理图第二十四页,共四十二页,编辑于2023年,星期五在单片机程序中,对多个键的处理应包括以下三项内容:键输入检查键盘是否有键被按下,并消除按键抖动,获得或规定(单个按键)按键的键号。键译码键号为键盘位置码,根据键号查表得出被按键的键值。键值:数字键0~9、字符键0AH~0FH、功能键10H~等,是按键在物理位置上的人为规定数值。键处理根据键值执行不同程序段。如:若键值属于数字、字符键,则调用显示数字和字符子程序;若键值属于功能键,则进行多分支转移,执行各个功能程序段。一、键盘处理第二十五页,共四十二页,编辑于2023年,星期五

1.扫描键盘行列式键盘的具体识别方法有扫描法和反转法。所谓扫描法,即用列线输出,行线输入(可交换行线和列线的输入、输出关系)。其中,列线逐列输出0,某行有键按下,行线有0输入,若无按键,行线输入全部为1。当有键按下时,根据行线和列线可最终确定哪个按键被按下。另外,还可以采用反转法,也就是行线和列线交换输入、输出,分两步获取按键的键号,但是在多键同时按下时不能准确判断。一、键盘处理第二十六页,共四十二页,编辑于2023年,星期五

2.键译码通过上述步骤获得按键的行号和列号,但按键所在物理位置的变化将引起键号的不一致,或者由于按键功能的不同规定也将影响键号所对应的功能的执行。如图4-9所示的键盘,就是两种典型的键盘布局,键盘的编号与键盘的扫描码没有直接的运算关系,造成程序编写的困难。一、键盘处理第二十七页,共四十二页,编辑于2023年,星期五3.键处理对于键盘上的每一个键,具体是完成什么功能,由键盘要完成具体任务和程序设计来决定。对于键盘处理来说,首先要做的事情是要消除抖动,矩阵键盘的消抖原理与单键的消抖原理是一致的,但在程序的编写上略有不同。为了同时兼顾动态显示,而动态显示函数调用一次需要几个ms,因此可以用动态显示函数代替消抖用的延时函数。手按动键盘的时间为零点几秒到几秒之间,远大于动态显示函数的所消耗的时间,所以可以每调用一次显示函数后,再判断一次是否有键按下的方法进行消抖和键盘信息处理。具体的消抖功能的键盘处理程序框图如图4-10所示。一、键盘处理第二十八页,共四十二页,编辑于2023年,星期五图4-10带动态显示的键盘消抖程序框图第二十九页,共四十二页,编辑于2023年,星期五C语言程序:#include<reg51.h>#defineucharunsignedchar#defineuintunsignedintuchartemp,num;voiddelay(uintZ);ucharcodetable[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0};第三十页,共四十二页,编辑于2023年,星期五voidmain(){while(1){P0=0xfe; temp=P0; temp=temp&0xf0;while(temp!=0xf0){delay(5); temp=P0;temp=temp&0xf0; while(temp!=0xf0) {temp=P0; switch(temp){case0xee:num=0;break;case0xde:num=1;break;case0xbe:num=2;break; case0x7e:num=3; break;}第三十一页,共四十二页,编辑于2023年,星期五while(temp!=0xf0){temp=P0;temp=temp&0xf0;}P1=table[num];}}第三十二页,共四十二页,编辑于2023年,星期五

P0=0xfd; temp=P0; temp=temp&0xf0;while(temp!=0xf0){delay(5); temp=P0;temp=temp&0xf0; while(temp!=0xf0) {temp=P0; switch(temp){case0xed:num=4;break;case0xdd:num=5;break;case0xbd:num=6;break; case0x7d:num=7;break;}第三十三页,共四十二页,编辑于2023年,星期五while(temp!=0xf0){temp=P0;temp=temp&0xf0;}P1=table[num];}}第三十四页,共四十二页,编辑于2023年,星期五

P0=0xfb; temp=P0; temp=temp&0xf0;while(temp!=0xf0){delay(5); temp=P0;temp=temp&0xf0; while(temp!=0xf0) {temp=P0; switch(temp){case0xeb:num=8;break;case0xdb:num=9;break;case0xbb:num=10;break; case0x7b:num=11;break;}第三十五页,共四十二页,编辑于2023年,星期五while(temp!=0xf0){temp=P0;temp=temp&0xf0;}P1=table[num];}}第三十六页,共四十二页,编辑于2023年,星期五

P0=0xf7; temp=P0; temp=temp&0xf0;while(temp!=0xf0){delay(5); temp=P0;temp=temp&0xf0; while(temp!=0xf0) {temp=P0; switch(temp){case0xe7:num=12;break;case0xd7:num=13;break;case0xb7:num=14;break; case0x77:num=15;break;}第三十七页,共四十二页,编辑于2023年,星期五while(temp!=0xf0){temp=P0;temp=temp&0xf0;}P1=table[num];}}}}voiddelay(uintZ){uintx,y;for(x=Z;x>0;x--)for(y=110;y>0;y--);}第三十八页,共四十二页,编辑于2023年,星期五汇编语言源程序ORG0000HAJMPMAINORG0030HMAIN:MOVP1,#07HLOOP:MOVP0,#0feHACALLSCANKEYMOVP0,#0fdHACALLSCANKEYMOVP0,#0fbHACALLSCANKEYMOVP0,#0f7HACALLSCANKEYAJMPLOOP

第三十九页,共四十二页,编辑于2023年,星期五

SCANKEY:MOVA,P0CJNEA,#0EEH,NEXT2MOVA,#00HAJMPSENDLEDNEXT2:CJNEA,#0deH,NEXT3MOVA,#01HAJMPSENDLEDNEXT3:CJNEA,#0beH,NEXT4MOVA,#02HAJMPSENDLEDNEXT4:CJNEA,#07eH,NEXT5MOVA,#03HAJMPSENDLEDNEXT5:CJNEA,#0edH,NEXT6MOVA,#04HAJMPSENDLEDNEXT6:CJNEA,#0DDH,NEXT7MOVA,#05HAJMPSENDLED第四十页,共四十二页,编辑于2023年,星期五

NEXT7:CJNEA,#0bdH,NEXT8MOVA,#06HAJMPSENDLEDNEXT8:CJNEA,#07dH,NEXT9MOVA,#07HAJMPSENDLEDNEXT9:CJNEA,#0ebH,NEXT10MOVA,#08HAJMPSENDLEDNEXT10:CJNEA,#0dbH,N

温馨提示

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

评论

0/150

提交评论