实验八键盘扫描实验_第1页
实验八键盘扫描实验_第2页
实验八键盘扫描实验_第3页
实验八键盘扫描实验_第4页
实验八键盘扫描实验_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

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

文档简介

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. 通过isp软件将生成的*.hex文件下载到单片机当中。c. 将k1拨

5、动开关打到“on”的位置,离线运行程序,观察实验现象,是否满足要求。不满足实验要求时,检查实验代码。三、参考程序汇编程序: fkey equ 20h.0 /*按键标志*/ keynum equ 30h /*按键编号变量*/ org 0000h ajmp mainmain: acall keyet mov r0,a mov a,r0 mov p0,a ajmp main 图7-9键盘扫描table: /*字型数据数组*/ db 0c0h,0f9h,0a4h,0b0h db 99h,92h,82h,0f8h db 80h,90h,88h,83h db 0c6h,0a1h,86h,8eh keyet

6、: 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 ret g1: acall scan /*执行按键扫描*/ jb fkey,g1 /*等待按键放开*/ mov a,keynum mov dptr,#table /*找出按键码*/ movc a,a+dptr retscan

7、: /*键盘扫描控制程序*/ mov r3,#0feh /*加载扫描输出信号初值11111110b*/ 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数据以便判断是否有按键*/ anl a,#0f0h mov r2,#4l2: jb acc.4,n1 /*累加器a位4若为1表示没按键*/ mov keynum,r4 /*加载按键编号*/ setb

8、 psw.5 /*按键标志设为1*/n1: inc r4 /*按键编号加1*/ rr a /*检查下一位*/ djnz r2,l2 mov a,r3 /*加载旧的扫描码*/ rl a mov r3,a djnz r1,l1back: jnb psw.5,no_key /*设置是否按键*/ setb fkey /*若有按键fkey=1*/ retno_key: clr fkey ret end c语言程序:#include<reg52.h>#define uchar unsigned char#define unit unsigned intvoid delay();uchar ke

9、yscan();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; case 0xdd:p0=0x92; break; case 0xbd:p0=

10、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; / void delay() /*延时*/ unsig

11、ned int i; for(i=8000;i>0;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; /*第四行

温馨提示

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

评论

0/150

提交评论