实验八键盘实验10页文档资料.docx
《实验八键盘实验10页文档资料.docx》由会员分享,可在线阅读,更多相关《实验八键盘实验10页文档资料.docx(7页珍藏版)》请在冰豆网上搜索。
实验八键盘实验10页文档资料
实验八键盘扫描实验
一、实验目的
1.掌握中断键盘扫描编程方法。
2.掌握LED动态显示方法。
二、实验原理及实验内容
1.实验原理
无论是单片机控制系统还是单片机测量系统,都需要一个人机对话装置,这种人机对话装置通常采用键盘和显示器。
键盘是单片机应用系统中人机对话常用的输入装置,而显示器是单片机应用系统人机对话中的常用输出装置。
键盘是由若干个按键开关组成,键的多少根据单片机应用系统的用途而定。
键盘由许多键组成,而每个键相当于一个机械开关触点,当键按下时,触点闭合,当键松开时,触点断开。
单片机接收到按键的触点信号后作相应的功能处理。
因此对于单片机系统来说键盘接口信号是输入信号。
单片机的键盘接口分为独立式和矩阵式。
独立式键盘的每个按键都有一个信号线与单片机电路相连,所有按键有一个公共地或公共正端,每个键相互独立互不影响。
如图7-7所示,当按下键1时,无论其它键是否按下,键1的信号线就由1变0;当松开键1时,无论其它键是否按下,键1的信号线就由0变1。
矩阵式键盘的按键触点接于由行、列母线构成的矩阵电路的交叉处,每当一个按键按下时通过该键将相应的行、列母线连通。
若在行、列母线中把行母线逐行置0(一种扫描方式),那么列母线就用来作信号输入线。
矩阵式键盘原理图如图7-8所示。
图7-7独立式按键原理图图7-8矩阵式按键原理图
针对以上两大类键盘工作方式,单片机又有三种键盘扫描方式:
查询方式;定时扫描方式和中断扫描方式。
查询方式是指在程序中用一段专门的扫描和读按键程序不停查询有无按键按下,确定键值。
这种方式电路简单,但需要占用单片机的机器时间。
定时扫描方式是指利用单片机内的定时器来产生定时中断,然后在定时中断的服务程序中扫描,检查有无按键按下,确定键值。
这种方式的电路也比较简单,不占用单片机的机器时间,但需要占用一个定时器,同时定时的时间不能过长,否则可能检测不到相应得按键。
中断扫描方式是指当有键按下时由相应的硬件电路产生中断信号,单片机在中断服务程序中扫描,检查有无按键按下,确定键值。
这种方式硬件电路上必须要产生中断线,需要与门和非门来产生。
但中断方式不占用单片机的机器时间,也不会出现定时方式时的检测不到键盘的情况。
另外,在扫描键盘时需处理键盘抖动问题,称为去抖。
一般去抖可以采用软件方式完成,操作方法是,当检测到有键按下时,等待10ms左右时间,如果此按键仍然保持按下的状态,这是确认此按键,如果在100ms内连续检测到此按键按下,则不确认第二次按下的键。
本实验系统中的键盘在硬件上采用查询方式工作,键盘采用矩阵键盘有16个按键,见第六章实验箱硬件资料。
2.实验内容
a.根据流程图在Keil编译环境下编写程序,生成*.HEX文件,要求是任意按下键盘,要求能在LED上将按下的键对于的十六进制数显示出来。
b.通过ISP软件将生成的*.HEX文件下载到单片机当中。
c.将K1拨动开关打到“on”的位置,离线运行程序,观察实验现象,是否满足要求。
不满足实验要求时,检查实验代码。
三、参考程序
汇编程序:
FKEYEQU20H.0/*按键标志*/
KEYNUMEQU30H/*按键编号变量*/
ORG0000H
AJMPMAIN
MAIN:
ACALLKEYET
MOV@R0,A
MOVA,@R0
MOVP0,A
AJMPMAIN
图7-9键盘扫描
TABLE:
/*字型数据数组*/
DB0C0H,0F9H,0A4H,0B0H
DB99H,92H,82H,0F8H
DB80H,90H,88H,83H
DB0C6H,0A1H,86H,8EH
KEYET:
CLRFKEY/*清除按键标志*/
ACALLSCAN/*执行按键扫描*/
JBFKEY,G1/*测试按键标志*/
AJMPKEYET/*若没有按键则等待按键*/
DELAY:
/*延迟子程序*/
MOVR6,#50/*总延迟时间R5*10ms*/
D1:
MOVR7,#100
DJNZR7,$
DJNZR6,D1
DJNZR5,DELAY
RET
G1:
ACALLSCAN/*执行按键扫描*/
JBFKEY,G1/*等待按键放开*/
MOVA,KEYNUM
MOVDPTR,#TABLE/*找出按键码*/
MOVCA,@A+DPTR
RET
SCAN:
/*键盘扫描控制程序*/
MOVR3,#0FEH/*加载扫描输出信号初值11111110B*/
MOVR4,#0/*按键计数标号清除为0*/
MOVR1,#4/*循环1执行4次*/
CLRPSW.5/*PSW.5=0表示未按键*/
L1:
MOVA,R3
MOVP2,A/*由P2口送出扫描输出信号*/
MOVR5,#1
ACALLDELAY
MOVA,P2/*读取P2数据以便判断是否有按键*/
ANLA,#0F0H
MOVR2,#4
L2:
JBACC.4,N1/*累加器A位4若为1表示没按键*/
MOVKEYNUM,R4/*加载按键编号*/
SETBPSW.5/*按键标志设为1*/
N1:
INCR4/*按键编号加1*/
RRA/*检查下一位*/
DJNZR2,L2
MOVA,R3/*加载旧的扫描码*/
RLA
MOVR3,A
DJNZR1,L1
BACK:
JNBPSW.5,NO_KEY/*设置是否按键*/
SETBFKEY/*若有按键FKEY=1*/
RET
NO_KEY:
CLRFKEY
RET
END
C语言程序:
#include
#defineucharunsignedchar
#defineunitunsignedint
voiddelay();
ucharkeyscan();
unitj,h;
voidmain()
ucharkey;
P1=0xff;/*数码管使能*/
while
(1)
key=keyscan();/*键盘值返回*/
delay();
switch(key)/*判断键值*/
case0xee:
P0=0xc0;break;/*0~F的键值*/
case0xde:
P0=0xf9;break;
case0xbe:
P0=0xa4;break;
case0x7e:
P0=0xb0;break;
case0xed:
P0=0x99;break;
case0xdd:
P0=0x92;break;
case0xbd:
P0=0x82;break;
case0x7d:
P0=0xf8;break;
case0xeb:
P0=0x80;break;
case0xdb:
P0=0x90;break;
case0xbb:
P0=0x88;break;
case0x7b:
P0=0x83;break;
case0xe7:
P0=0xc6;break;
case0xd7:
P0=0xa1;break;
case0xb7:
P0=0x86;break;
case0x77:
P0=0x8e;break;
case0x00:
P0=0xc1;break;
voiddelay()/*延时*/
unsignedinti;
for(i=8000;i>0;i--);
ucharkeyscan()/*键盘扫描*/
while
(1)
P2=0xff;/*P2口拉高*/
P2=0xfe;/*第一行置低*/
if((P2&0xff)!
=0xfe)//判断是否有键按下
delay();/*去抖动*/
if((P2&0xff)!
=0xfe)
returnP2;/*返回键值*/
elseP2=0xfd;
elseP2=0xfd;/*第二行置低*/
if((P2&0xff)!
=0xfd)
delay();
if((P2&0xff)!
=0xfd)
returnP2;
elseP2=0xfb;
elseP2=0xfb;/*第三行置低*/
if((P2&0xff)!
=0xfb)
delay();
if((P2&0xff)!
=0xfb)
returnP2;
elseP2=0xf7;
elseP2=0xf7;/*第四行置低*/
if((P2&0xff)!
=0xf7)
delay();
if((P2&0xff)!
=0xf7)
returnP2;
elsereturnP2=0xfe;
四、实验仪器和设备
Keil软件;AT89S52实验平台;ATMELISP在线编程软件;
五、实验结果和数据分析
问题:
1.说明查询方式工作原理。
2.说明中断方式和查询方式的优缺点。
希望以上资料对你有所帮助,附励志名言3条:
1、上帝说:
你要什么便取什么,但是要付出相当的代价。
2、目标的坚定是性格中最必要的力量源泉之一,也是成功的利器之一。
没有它,天才会在矛盾无定的迷径中徒劳无功。
3、当你无法从一楼蹦到三楼时,不要忘记走楼梯。
要记住伟大的成功往往不是一蹴而就的,必须学会分解你的目标,逐步实施。