实验八 键盘扫描实验

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
RET
G1:
ACALL SCAN /*执行按键扫描*/
JB FKEY,G1 /*等待按键放开*/
MOV A,KEYNUM
MOV DPTR,#TABLE /*找出按键码*/
MOVC A,@A+DPTR
RET
SCAN: /*键盘扫描控制程序*/
MOV R3,#0FEH /*加载扫描输出信号初值11111110B*/
#define unit unsigned int
void delay();
uchar keyscan();
unit j,h;
void main()
{
uchar key;
P1=0xff; /*数码管使能*/
while (1)
{
key=keyscan();/*键盘值返回*/
delay();
switch(key)/*判断键值*/
ANL A,#0F0H
MOV R2,#4
L2:
JB ACC.4,N1/*累加器A位4若为1表示没按键*/
MOV KEYNUM,R4/*加载按键编号*/
SETB PSW.5/*按键标志设为1*/
N1:
INC R4/*按键编号加1*/
RR A/*检查下一位*/
DJNZ R2,L2
MOV A,R3 /*加载旧的扫描码*/
MOV A,@R0
MOV P0,A
AJMP MAIN
图7-9键盘扫描
TABLE: /*字型数据数组*/
DB0C0H,0F9H,0A4H,0B0H
DB 99H,92H,82H,0F8H
DB 80H,90H,88H,83H
DB0C6H,0A1H,86H,8EH
KEYET:
CLR FKEY /*清除按键标志*/
ACALL SCAN /*执行按键扫描*/
JB FKEY,G1 /*测试按键标志*/
AJMP KEYET /*若没有按键则等待按键*/
DELAY: /*延迟子程序*/
MOV R6,#50 /*总延迟时间R5*10 ms*/
D1: MOV R7,#100
DJNZ R7,$
DJNZ R6,D1
DJNZ R5,DELAY
if ((P2&0xff)!=0xfe) //判断是否有键按下
{
delay();/*去抖动*/
if((P2&0xff)!=0xfe)
return P2;/*返回键值*/
else P2=0xfd;
}
else P2=0xfd;/*第二行置低*/
if ((P2&0xff)!=0xfd)
{
delay();
if ((P2&0xff)!=0xfd)
return P2;
else P2=0xfb;
}
else P2=0xfb;/*第三行置低*/
if ((P2&0xff)!=0xfb)
{
delay();
if ((P2&0xff)!=0xfb)
return P2;
else P2=0xf7;
}
else P2=wk.baidu.comxf7; /*第四行置低*/
if ((P2&0xff)!=0xf7)
case 0xbd:P0=0x82; break;
case 0x7d:P0=0xf8; break;
case 0xeb:P0=0x80; break;
case 0xdb:P0=0x90; break;
case 0xbb:P0=0x88; break;
case 0x7b:P0=0x83; break;
c.将K1拨动开关打到“on”的位置,离线运行程序,观察实验现象,是否满足要求。不满足实验要求时,检查实验代码。
三、参考程序
汇编程序:
FKEY EQU 20H.0 /*按键标志*/
KEYNUM EQU 30H /*按键编号变量*/
ORG 0000H
AJMP MAIN
MAIN:
ACALL KEYET
MOV @R0,A
MOV R4,#0 /*按键计数标号清除为0*/
MOV R1,#4 /*循环1执行4次*/
CLR PSW.5 /*PSW.5=0表示未按键*/
L1:
MOV A,R3
MOV P2,A /*由P2口送出扫描输出信号*/
MOV R5,#1
ACALL DELAY
MOV A,P2 /*读取P2数据以便判断是否有按键*/
查询方式是指在程序中用一段专门的扫描和读按键程序不停查询有无按键按下,确定键值。这种方式电路简单,但需要占用单片机的机器时间。
定时扫描方式是指利用单片机内的定时器来产生定时中断,然后在定时中断的服务程序中扫描,检查有无按键按下,确定键值。这种方式的电路也比较简单,不占用单片机的机器时间,但需要占用一个定时器,同时定时的时间不能过长,否则可能检测不到相应得按键。
实验八键盘扫描实验
一、实验目的
1.掌握中断键盘扫描编程方法。
2.掌握LED动态显示方法。
二、实验原理及实验内容
1. 实验原理
无论是单片机控制系统还是单片机测量系统,都需要一个人机对话装置,这种人机对话装置通常采用键盘和显示器。键盘是单片机应用系统中人机对话常用的输入装置,而显示器是单片机应用系统人机对话中的常用输出装置。
{
delay();
if ((P2&0xff)!=0xf7)
return P2;
else return P2=0xfe;
}
}
}
四、实验仪器和设备
Keil软件;AT89S52实验平台;ATMEL ISP在线编程软件;
五、实验结果和数据分析
问题:
1.说明查询方式工作原理。
2.说明中断方式和查询方式的优缺点。
void delay()/*延时*/
{
unsigned int i;
for(i=8000;i>0;i--);
}
//^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
uchar keyscan()/*键盘扫描*/
{
while(1)
{
P2=0xff;/*P2口拉高*/
P2=0xfe;/*第一行置低*/
键盘是由若干个按键开关组成,键的多少根据单片机应用系统的用途而定。键盘由许多键组成,而每个键相当于一个机械开关触点,当键按下时,触点闭合,当键松开时,触点断开。单片机接收到按键的触点信号后作相应的功能处理。因此对于单片机系统来说键盘接口信号是输入信号。
单片机的键盘接口分为独立式和矩阵式。独立式键盘的每个按键都有一个信号线与单片机电路相连,所有按键有一个公共地或公共正端,每个键相互独立互不影响。如图7-7所示,当按下键1时,无论其它键是否按下,键1的信号线就由1变0;当松开键1时,无论其它键是否按下,键1的信号线就由0变1。
中断扫描方式是指当有键按下时由相应的硬件电路产生中断信号,单片机在中断服务程序中扫描,检查有无按键按下,确定键值。这种方式硬件电路上必须要产生中断线,需要与门和非门来产生。但中断方式不占用单片机的机器时间,也不会出现定时方式时的检测不到键盘的情况。
另外,在扫描键盘时需处理键盘抖动问题,称为去抖。一般去抖可以采用软件方式完成,操作方法是,当检测到有键按下时,等待10ms左右时间,如果此按键仍然保持按下的状态,这是确认此按键,如果在100ms内连续检测到此按键按下,则不确认第二次按下的键。
本实验系统中的键盘在硬件上采用查询方式工作,键盘采用矩阵键盘有16个按键,见第六章实验箱硬件资料。
2.实验内容
a.根据流程图在Keil编译环境下编写程序,生成*.HEX文件,要求是任意按下键盘,要求能在LED上将按下的键对于的十六进制数显示出来。
b.通过ISP软件将生成的*.HEX文件下载到单片机当中。
{
case 0xee:P0=0xc0; break;/*0~F的键值*/
case 0xde:P0=0xf9; break;
case 0xbe:P0=0xa4; break;
case 0x7e:P0=0xb0; break;
case 0xed:P0=0x99; break;
case 0xdd:P0=0x92; break;
RL A
MOV R3,A
DJNZ R1,L1
BACK:
JNB PSW.5,NO_KEY /*设置是否按键*/
SETB FKEY /*若有按键FKEY=1*/
RET
NO_KEY:
CLR FKEY
RET
END
C语言程序:
#include<reg52.h>
#define uchar unsigned char
case 0xe7:P0=0xc6; break;
case 0xd7:P0=0xa1; break;
case 0xb7:P0=0x86; break;
case 0x77:P0=0x8e; break;
case 0x00:P0=0xc1; break;
}
}
}
//^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
矩阵式键盘的按键触点接于由行、列母线构成的矩阵电路的交叉处,每当一个按键按下时通过该键将相应的行、列母线连通。若在行、列母线中把行母线逐行置0(一种扫描方式),那么列母线就用来作信号输入线。矩阵式键盘原理图如图7-8所示。
图7-7独立式按键原理图图7-8矩阵式按键原理图
针对以上两大类键盘工作方式,单片机又有三种键盘扫描方式:查询方式;定时扫描方式和中断扫描方式。
相关文档
最新文档