实验一矩阵键盘检测Word格式.docx

上传人:b****2 文档编号:15164059 上传时间:2022-10-28 格式:DOCX 页数:22 大小:23.44KB
下载 相关 举报
实验一矩阵键盘检测Word格式.docx_第1页
第1页 / 共22页
实验一矩阵键盘检测Word格式.docx_第2页
第2页 / 共22页
实验一矩阵键盘检测Word格式.docx_第3页
第3页 / 共22页
实验一矩阵键盘检测Word格式.docx_第4页
第4页 / 共22页
实验一矩阵键盘检测Word格式.docx_第5页
第5页 / 共22页
点击查看更多>>
下载资源
资源描述

实验一矩阵键盘检测Word格式.docx

《实验一矩阵键盘检测Word格式.docx》由会员分享,可在线阅读,更多相关《实验一矩阵键盘检测Word格式.docx(22页珍藏版)》请在冰豆网上搜索。

实验一矩阵键盘检测Word格式.docx

在单片机应用系统中,通常使用机械触点式按键开关,其主要功能是把机械上的通断转换成为电气上的逻辑关系。

也就是说,它能提供标准的TTL逻辑电平,以便与通用数字系统的逻辑电平相容。

此外,除了复位按键有专门的复位电路及专一的复位功能外,其它按键都是以开关状态来设置控制功能或输入数据。

当所设置的功能键或数字键按下时,计算机应

用系统应完成该按键所设定的功能。

因此,键信息输入是与软件构造密切相关的过程。

对于一组键或一个键盘,通过接口电路与单片机相连。

单片机可以采用查询或中断式了解有无按键输入并检查是哪一个按键按下,假设有键按下则跳至相应的键盘处理程序处去执行,假设无键按下则继续执行其他程序。

3、按键的特点与去抖

机械式按键再按下或释放时,由于机械弹性作用的影响,通常伴随有一定时间的触点机械抖动,然后其触点才稳定下来。

其抖动过程如图1〔a〕所示,抖动时间的长短与开关的机械特性有关,一般为5-10ms。

从图中可以看出,在触点抖动期间检测按键的通与断状态,可能导致判断出错。

即按键一次按下或释放被错误地认为是屡次操作,这种情况是不允出现的。

为了抑制按键触点机械抖动所致的检测误判,必须采取去抖动措施,可从硬件、软件两面予以考虑。

一般来说,在键数较少时,可采用硬件去抖,而当键数较多时,采用软件去抖。

〔本学习板采用软件去抖式〕。

按键抖动状态图

硬件电容去抖

按键去抖流程图

从按键的去抖流程图我们可以知道,检测到有键按下时,应延时等待一段时间〔可调用一个5ms~10ms的延迟子程序〕,然后再次判断按键是否被按下,假设此时判断按键仍被按下,则认为按键有效,假设此时判断按键没有被按下,说明为按键抖动或干扰,应返回重新判断。

键盘真正被按下才可进展相应的处理程序,此时根本就算实现了按键输入,进一步的话可以判断按键是否释放。

四、实验步骤

上面的图的意思是P3.1~P3.3跟P3.4~P3.7不一样的,他们是相互连接〔当按下键时〕,组成4*4=16个键的。

如果给P3一个扫描初值的话:

如0*0F,则没有键按下时为:

P3.1~P3.3为1P3.4~P3.7为0如果有键按下,则情况发生变化:

高电平接入低电平:

如P3.3与P3.7连接的键按下,则P3.3与P3.7为0,即接地了。

则P3此时为:

00000111,这时如果用P3&

0*0F,则高四位为0低四位保存,可以得到低四位的容了。

通过去抖操作,即一个delay,可以得到低四位容。

这里设为:

h=P3&

0*0F;

如果再得到高四位容,则可以组成一个数,来定位哪个键了。

程序框图:

P3=FFH,P3.0=0

有键按下吗.

延时10ms

真得有键按下吗.

根据当前状态识别按键

P3=FFH,P3.1=0

P3=FFH,P3.2=0

P3=FFH,P3.3=0

C语言源程序:

*include<

reg51.h>

sbitbeep=P2^3;

sbitdula=P2^6;

sbitwela=P2^7;

unsignedchari=100;

unsignedcharj,k,temp,key;

voiddelay(unsignedchari)

{

for(j=i;

j>

0;

j--)

for(k=125;

k>

k--);

}

Unsignedcharcodetable[]={0*3f,0*06,0*5b,0*4f,0*66,0*6d,0*7d,

0*07,0*7f,0*6f,0*77,0*7c,0*39,0*5e,0*79,0*71};

display(unsignedcharnum)

P0=table[num];

dula=1;

dula=0;

P0=0*c0;

wela=1;

wela=0;

voidmain()

while

(1)

{

P3=0*fe;

temp=P3;

temp=temp&

0*f0;

if(temp!

=0*f0)

delay(10);

switch(temp)

case0*ee:

key=0;

break;

case0*de:

key=1;

case0*be:

key=2;

case0*7e:

key=3;

}

while(temp!

beep=0;

beep=1;

display(key);

P1=0*fe;

P3=0*fd;

case0*ed:

key=4;

case0*dd:

key=5;

case0*bd:

key=6;

case0*7d:

key=7;

P3=0*fb;

case0*eb:

key=8;

case0*db:

key=9;

case0*bb:

key=10;

case0*7b:

key=11;

P3=0*f7;

case0*e7:

key=12;

case0*d7:

key=13;

case0*b7:

key=14;

case0*77:

key=15;

汇编程序:

dulabitP2.0;

welabitP2.1;

KEYBUFEQU30H

ORG00H

START:

MOVKEYBUF,*2

WAIT:

MOVP3,*0FFH

CLRP3.4

MOVA,P3

ANLA,*0FH

*RLA,*0FH

JZNOKEY1

LCALLDELY10MS

CJNEA,*0EH,NK1

MOVKEYBUF,*0

movp1,*11111110b

LJMPDK1

NK1:

CJNEA,*0DH,NK2

MOVKEYBUF,*4

movp1,*11111100b

NK2:

CJNEA,*0BH,NK3

MOVKEYBUF,*8

movp1,*11111000b

NK3:

CJNEA,*07H,NK4

MOVKEYBUF,*12

movp1,*11110000b

NK4:

NOP

DK1:

calldisplay

DK1A:

MOVA,P3;

等待释放

JNZDK1A

NOKEY1:

CLRP3.5

JZNOKEY2

CJNEA,*0EH,NK5

MOVKEYBUF,*1

LJMPDK2

NK5:

CJNEA,*0DH,NK6

MOVKEYBUF,*5

NK6:

CJNEA,*0BH,NK7

MOVKEYBUF,*9

NK7:

CJNEA,*07H,NK8

MOVKEYBUF,*13

NK8:

DK2:

DK2A:

释放

JNZDK2A

NOKEY2:

CLRP3.6

*RLA,*0

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高中教育 > 其它课程

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1