资源描述
计算机与信息技术学院综合性(设计性)实验报告
专业:通信工程 年级/班级: 08级 2010—2011学年第一学期
课程名称
单片机原理及接口技术
指导教师
祝天龙
本组成员
学号姓名
杜芳芳 0808224023
实验地点
计科楼111
实验时间
2010年11月6日
8:00-11:50
项目名称
矩阵键盘值显示实验
实验类型
综合性
一、 实验目的
1. 理解键盘扫描和去抖动的原理;
2. 掌握键盘扫描实现方法;
3. 设计一个矩阵键盘,编程实现按下某按键,数码管显示相应键值的功能。
二、 实验仪器或设备
装WAVE软件、Proteus软件的微机一台
三、 总体设计(设计原理、设计方案及流程等)
(一) 设计原理:
在行列矩阵式非编码键盘的单片机系统中,键盘处理程序首先执行行有无键按下的程序段,当确认有键按下后,下一步就要识别哪一个按键被按下。对键的识别用逐行(或列)扫描查询法。
在进行行扫描时,首先判别键盘中有无键按下,由单片机I/O口向键盘输出全扫描字,然后读入列线状态来判断。方法是:向行线输出全扫描字00H,把全部行线置为低电平,然后将列线的电平状态读入累加器A中。如果有键按下,总会有一根列线电平被拉至低电平,从而使列输入不全为1。
判断键盘中哪一个键被按下是通过将行线逐行置低电平后,检查列输入状体来实现的。方法是:依次给行线送低电平,然后查所有列线状态,称行扫描。如果全为1,则所按下的键不在此行;如果不全为1,则所按下的键必在此行,而且是在与零电平列线相交的交点上的那个按键。在扫描过程中,当发现某行有键按下,也就是输入的列线中有一位为0,便可以闭合按键所在的位置。根据行线和列线的位置就可以知道是哪一个键按下。
按键的位置码并不等于按键实际定义的键值,因此还需要进行转换。这可以借助查表法来完成。然后根据按键的编号来执行相应的功能的子程序,来完成按键键帽上所定义的实际按键功能。
程序在行扫描时,先将行计数器、列计数器置0,然后再设置行扫描初值FEH。程序流程图中FEH的低4位EH是行扫描码,高4位FH是将P2.4-P2.7高4位置1为输入方式,在输入扫描字后,立即读出列值,检测是否有列值为低电平。若无键按下,则将行计数器加1,并将行扫描字左移一位,变为FDH。这样使第一行为低电平,其它为高电平;然后依次逐行扫描,直到行计数器的值大于或等于4时,表明一次行扫描结束。
在此过程中若检测到某一列为低电平,则将列值保存;然后再进行行列值判别,得到列的位置,存入列计数器转入键位置码的译码程序。上述行扫描过程结束后得到的行号存放在R0中,列号存放在R2中。
(二)设计方案及流程图
1.依次给行线送低电平,然后查所有列线状态,称行扫描。如果全为1,则所按下的键不在此行;如果不全为1,则所按下的键必在此行,而且是在与零电平列线相交的交点上的那个按键。在扫描过程中,当发现某行有键按下,也就是输入的列线中有一位为0,便可以闭合按键所在的位置。根据行线 图1:矩阵键盘接口图
和列线的位置就可以知道是哪
一个键按下。
2.根据按下的键可以得到相应的键值,键值的获得通常采用计数译码法。键盘的原理图如下,可以根据矩阵键盘的特点得到:
键值=行首键号+列号
3.列出共阴/阳极7段LED显示字型编码表
4.将所得到的键值,借助查表的方法得到其相应的LED显示,将16进制转换成10进制显示。
5.按照要求在伟福中编译程序并运行
6.将程序烤入89C51中,运行即可
图2 流程图
四、 实验步骤(包括主要步骤、代码分析等)
(一)主要步骤
1.打开WAVE6000集成调试软件
2.单击“文件”——“新建文件”,在文件中按照流程图写入程序,并给该程序的文件命名为“JUZHENJIANPAN.ASM”
3.单击“项目”——“编译”
4.打开Proteus软件,在ISIS Professional环境中按照电路原理图连接电路
5.双击AT89C51芯片,在Program File中添加JUZHENJIANPAN的.HEX文件,单击OK即可
6.点下开始按钮,按下键盘的按键,在数码管上即显示出相应的数字
(二)主要代码分析
MOV P2,#0F0H ;给列送高电平
MOV A,P2 ;取P2口的值
ANL A,#0F0H ;屏蔽行线的影响
MOV P2,#0FH ;给行送高电平
JB ACC.0,Q2 ;判断是不是第0行,不是则转
MOV R4,#00H ;如果是,则将0送给R4
AJMP JIA ;调用加法程序,取得键盘的
五、 结果分析与总结
通过此次实验,我了解了键盘扫描和去抖动的原理,掌握键盘扫描实现方法,并设计一个矩阵键盘,编程实现按下某按键,数码管显示相应键值的功能。
六、附录
(一)电路图
(二)源程序
ORG 0000H
AJMP MAIN
ORG 0030H
MAIN: MOV P2,#0F0H ;给列送高电平
LCALL Delay ;延时,使电路稳定
MOV A,P2 ;取P2口的值
ANL A,#0F0H ;屏蔽行线的影响
CJNE A,#0F0H,l ;如果有键按下,就跳转到l
AJMP MAIN
l: LCALL Delay ;延时去抖
MOV A,P2 ;重新取值
JB ACC.4,l1 ;P2.4这一列有键按下?没有则跳转至l1
MOV R3,#00H ;如果有则将值0存入R3
AJMP Q1 ;跳到行判断程序
l1: JB ACC.5,l2
MOV R3,#01H
AJMP Q1
l2: JB ACC.6,l3
MOV R3,#02H
AJMP Q1
l3: JB ACC.7,MAIN
MOV R3,#03H
AJMP Q1
Q1: MOV P2,#0FH ;给行送高电平
LCALL Delay ;延时,稳定电路
MOV A,P2 ;取值
ANL A,#0FH ;屏蔽高四位
JB ACC.0,Q2 ;判断是不是第0行,不是则转
MOV R4,#00H ;如果是,则将0送给R4
AJMP JIA ;调用加法程序,取得键盘的值
Q2: JB ACC.1,Q3
MOV R4,#04H
AJMP JIA
Q3: JB ACC.2,Q4
MOV R4,#08H
AJMP JIA
Q4: JB ACC.3, MAIN
MOV R4,#0CH
AJMP JIA
JIA: MOV A,R3 ;行号加上列号就是该键的值
ADD A,R4
DA A ;十六进制调整为十进制
MOV P1,A ;调整后送给数码管显示(静态显示)
AJMP MAIN
Delay: MOV R6,#20H
Q6: MOV R5,#0BBH
Q5: DJNZ R5,Q5
DJNZ R6,Q6
RET
END
教师签名:
年 月 日
河南师范大学计算机与信息技术学院
展开阅读全文