实验八 键盘扫描实验

上传人:wt****50 文档编号:33052364 上传时间:2018-02-13 格式:DOC 页数:7 大小:97.50KB
返回 下载 相关 举报
实验八  键盘扫描实验_第1页
第1页 / 共7页
实验八  键盘扫描实验_第2页
第2页 / 共7页
实验八  键盘扫描实验_第3页
第3页 / 共7页
实验八  键盘扫描实验_第4页
第4页 / 共7页
实验八  键盘扫描实验_第5页
第5页 / 共7页
点击查看更多>>
资源描述

《实验八 键盘扫描实验》由会员分享,可在线阅读,更多相关《实验八 键盘扫描实验(7页珍藏版)》请在金锄头文库上搜索。

1、实验八 键盘扫描实验一、实验目的1. 掌握中断键盘扫描编程方法。2. 掌握 LED 动态显示方法。二、实验原理及实验内容1. 实验原理无论是单片机控制系统还是单片机测量系统,都需要一个人机对话装置,这种人机对话装置通常采用键盘和显示器。键盘是单片机应用系统中人机对话常用的输入装置,而显示器是单片机应用系统人机对话中的常用输出装置。键盘是由若干个按键开关组成,键的多少根据单片机应用系统的用途而定。键盘由许多键组成,而每个键相当于一个机械开关触点,当键按下时,触点闭合,当键松开时,触点断开。单片机接收到按键的触点信号后作相应的功能处理。因此对于单片机系统来说键盘接口信号是输入信号。单片机的键盘接口

2、分为独立式和矩阵式。独立式键盘的每个按键都有一个信号线与单片机电路相连,所有按键有一个公共地或公共正端,每个键相互独立互不影响。如图 7-7 所示,当按下键 1 时,无论其它键是否按下,键 1 的信号线就由 1 变 0;当松开键 1 时,无论其它键是否按下,键 1 的信号线就由 0 变 1。矩阵式键盘的按键触点接于由行、列母线构成的矩阵电路的交叉处,每当一个按键按下时通过该键将相应的行、列母线连通。若在行、列母线中把行母线逐行置 0(一种扫描方式) ,那么列母线就用来作信号输入线。矩阵式键盘原理图如图 7-8 所示。图 7-7 独立式按键原理图 图 7-8 矩阵式按键原理图针对以上两大类键盘工

3、作方式,单片机又有三种键盘扫描方式:查询方式;定时扫描方式和中断扫描方式。查询方式是指在程序中用一段专门的扫描和读按键程序不停查询有无按键按下,确定键值。这种方式电路简单,但需要占用单片机的机器时间。定时扫描方式是指利用单片机内的定时器来产生定时中断,然后在定时中断的服务程序中扫描,检查有无按键按下,确定键值。这种方式的电路也比较简单,不占用单片机的机器时间,但需要占用一个定时器,同时定时的时间不能过长,否则可能检测不到相应得按键。中断扫描方式是指当有键按下时由相应的硬件电路产生中断信号,单片机在中断服务程序中扫描,检查有无按键按下,确定键值。这种方式硬件电路上必须要产生中断线,需要与门和非门

4、来产生。但中断方式不占用单片机的机器时间,也不会出现定时方式时的检测不到键盘的情况。另外,在扫描键盘时需处理键盘抖动问题,称为去抖。一般去抖可以采用软件方式完成,操作方法是,当检测到有键按下时,等待 10ms 左右时间,如果此按键仍然保持按下的状态,这是确认此按键,如果在 100ms 内连续检测到此按键按下,则不确认第二次按下的键。本实验系统中的键盘在硬件上采用查询方式工作,键盘采用矩阵键盘有 16 个按键,见第六章实验箱硬件资料。2实验内容a. 根据流程图在 Keil 编译环境下编写程序,生成*.HEX 文件,要求是任意按下键盘,要求能在 LED 上将按下的键对于的十六进制数显示出来。b.

5、通过 ISP 软件将生成的 *.HEX 文件下载到单片机当中。c. 将 K1 拨动开关打到“on ”的位置,离线运行程序,观察实验现象,是否满足要求。不满足实验要求时,检查实验代码。三、参考程序汇编程序:FKEY EQU 20H.0 /*按键标志*/KEYNUM EQU 30H /*按键编号变量*/ORG 0000HAJMP MAINMAIN: ACALL KEYET MOV R0,A MOV A,R0MOV P0,AAJMP MAIN图 7-9 键盘扫描TABLE: /*字型数据数组*/DB 0C0H,0F9H,0A4H,0B0HDB 99H,92H,82H,0F8HDB 80H,90H,8

6、8H,83HDB 0C6H,0A1H,86H,8EHKEYET:CLR FKEY /*清除按键标志*/ACALL SCAN /*执行按键扫描*/JB FKEY,G1 /*测试按键标志*/AJMP KEYET /*若没有按键则等待按键*/DELAY: /*延迟子程序*/ 开 始初 始 化数 码 管 显 示取 键 值键 盘 扫 描延 时返 回 MOV R6,#50 /*总延迟时间 R5*10 ms*/ D1: MOV R7,#100 DJNZ R7,$ DJNZ R6,D1DJNZ R5,DELAYRET G1:ACALL SCAN /*执行按键扫描*/ JB FKEY,G1 /*等待按键放开*/

7、MOV A,KEYNUMMOV DPTR,#TABLE /*找出按键码*/ MOVC A,A+DPTRRETSCAN: /*键盘扫描控制程序*/ MOV R3,#0FEH /*加载扫描输出信号初值 11111110B*/MOV R4,#0 /*按键计数标号清除为 0*/MOV R1,#4 /*循环 1 执行 4 次*/CLR PSW.5 /*PSW.5=0 表示未按键*/L1: MOV A,R3MOV P2,A /*由 P2 口送出扫描输出信号*/MOV R5,#1ACALL DELAYMOV A,P2 /*读取 P2 数据以便判断是否有按键*/ANL A,#0F0H MOV R2,#4L2:

8、 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 /*加载旧的扫描码*/RL AMOV R3,ADJNZ R1,L1BACK: JNB PSW.5,NO_KEY /*设置是否按键*/SETB FKEY /*若有按键 FKEY=1*/ RETNO_KEY:CLR FKEY RETEND C 语言程序:#include#define uchar unsigned char#

9、define unit unsigned intvoid delay();uchar keyscan();unit j,h;void main()uchar key;P1=0xff; /*数码管使能*/while (1)key=keyscan(); /*键盘值返回*/delay();switch(key) /*判断键值*/case 0xee:P0=0xc0; break; /*0F 的键值*/case 0xde:P0=0xf9; break;case 0xbe:P0=0xa4; break;case 0x7e:P0=0xb0; break;case 0xed:P0=0x99; break;ca

10、se 0xdd:P0=0x92; break;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;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;/v

11、oid delay() /*延时*/ unsigned int i;for(i=8000;i0;i-);/ uchar keyscan() /*键盘扫描*/while(1) P2=0xff; /*P2 口拉高*/P2=0xfe; /*第一行置低*/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=0xf7; /*第四行置低*/if (P2&0xff)!=0xf7)delay();if (P2&0xff)!=0xf7)return P2;else return P2=0xfe; 四、实验仪器和设备Keil 软件;AT89S52 实验平台;ATMEL ISP 在线编程软件;五、实验结果和数据分析问题:1说明查询方式工作原理。2说明中断方式和查询方式的优缺点。

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 建筑/环境 > 建筑资料

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号