完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
|
相关推荐
1个回答
|
|
目的:利用“模块化单片机教学实验平台”,加深对单片机与矩阵键盘的接口电路设计以及程序设计的理解。
任务:1、学习独立式按键的查询识别方法。 2、非编码矩阵键盘的行反转法识别方法。 3、掌握键盘接口的基本特点,了解独立键盘和矩阵键盘的应用方法。 4、掌握键盘接口的硬件设计方法,软件程序设计和贴士排错能力。 5、掌握利用Keil51软件对程序进行编译。 6、会根据实际功能,正确选择单片机功能接线,编制正确程序。对实验结果 1、MCS51系列单片机的P0~P3口作为输入端口使用时必须先向端口写入“1”。 2、用查询方式检测按键时,要加入延时(通常采用软件延时10~20mS)以消除抖动。 3、识别键的闭合,通常采用行扫描法和行反转法。行扫描法是使键盘上某一行线为低电平,而其余行接高电平,然后读取列值,如读列值中某位为低电平,表明有键按下,否则扫描下一行,直到扫完所有行。 行反转法识别闭合键时,要将行线接一并行口,先让它工作在输出方式,将列线也接到一个并行口,先让它工作于输入方式,程序使CPU通过输出端口在各行线上全部送低电平,然后读入列线值,如此时有某键被按下,则必定会使某一列线值为0。然后,程序对两个并行端口进行方式设置,使行线工作于输入方式,列线工作于输出方式,并将刚才读得的列线值从列线所接的并行端口输出,再读取行线上输入值,那么,在闭合键所在行线上的值必定为0。这样,当一个键被接下时,必定可以读得一对唯一的行线值和列线值。由于51单片机的并口能够动态地改变输入输出方式,因此,矩阵键盘采用行反转法识别最为简便。 行反转法识别按键的过程是:首先,将4个行线作为输出,将其全部置0,4个列线作为输入,将其全部置1,也就是向P1口写入0xF0;假如此时没有人按键,从P1口读出的值应仍为0xF0;假如此时1、4、7、0四个键中有一个键被按下,则P1.6被拉低,从P1口读出的值为0xB0;为了确定是这四个键中哪一个被按下,可将刚才从P1口读出的数的低四位置1后再写入P1口,即将0xBF写入P1口,使P1.6为低,其余均为高,若此时被按下的键是“4”,则P1.1被拉低,从P1口读出的值为0xBE;这样,当只有一个键被按下时,每一个键只有唯一的反转码,事先为12个键的反转码建一个表,通过查表就可知道是哪个键被按下了。 使用扫描法通过矩阵键盘(2行4列,一共八个按键)控制8个LED灯的点亮。按下第一行第一列的按键使LED1点亮,其他LED熄灭;按下第一行第二列的按键使LED2点亮,其他LED熄灭;按下第一行第三列的按键使LED3点亮,其他LED熄灭;按下第一行第四列的按键使LED4点亮,其他LED熄灭;按下第二行第一列的按键使LED5点亮,其他LED熄灭;按下第二行第二列的按键使LED6点亮,其他LED熄灭;按下第二行第三列的按键使LED7点亮,其他LED熄灭;按下第二行第四列的按键使LED8点亮,其他LED熄灭。 图1 LED电路图 图2 按键电路图 注:把拨码开关(DIP)拨到断开的一侧。该矩阵键盘只用到前两行,即2*4的矩阵键盘。 表1 硬件连线表
②将AT89S52 芯片插在CPU 板的CPU 插座上(注意不要插反)。母板上电。 ③运行Keil 开发环境,按照“模块化单片机教学实验平台配套的实验指导书1.2.3 节”介绍的方法建立工程exp11.uV2,CPU 为AT89S52,不包含启动文件STARTUP.A51。 ④编写汇编语言源程序exp11.asm 完成基本实验的功能。把源程序exp11.asm加入到工程exp11.uV2,并设置工程exp11.uV2 属性,将其晶振频率设置为11.0592MHz,选择输出可执行文件。 ⑤构造(Build)工程exp11.uV2。 ⑥通过PROGISP 烧写软件,利用ISP 下载线(见“模块化单片机教学实验平台配套的实验指导书1.3 节”)把HEX 文件下载到单片机中。 ⑦下载成功后,通过按下不同按键,观察LED1~7 的亮灭。 图3 实验结果图 本次实验需要先判别整个键盘有无按键按下,从第0列开始逐列检测检测,可以检测出哪个按键被按下。然后用到去除按键的抖动。该实验难度较高,相比以往实验更考验综合能力。如何使用扫线法判断所在行是实验的难点所在。实验中因为对扫线法的理解不深入,在实验中没能完成实验。试验后仔细阅读书上的解释和题本提供的案例程序,我知道了自己实验失败的原因所在,并重新设计了程序和实验。通过学习后,对扫描键盘的程序更加了解,将理论上的结果和自己实验做的结果相印证,对书本上知识掌握的更加牢固,对代码程序有更加深刻的理解。在实验中,对模板的使用更加熟练,对电路的连接更加熟练。我对于矩阵键盘的工作方式有了更进一步的认识,也对扫描法查询矩阵键号的方法编写有了更进一步的掌握。单片机提高重在实践,想要学好单片机,软件编程必不可少。 (1)基本实验 ORG 0000H LJMP MAIN MAIN:MOV P1,#11110000B;给p1口送数11110000 MOV A,P1 ;获取P1口的电平 XRL A,#11110000B ;将P1口电平与11110000异或运算 ;若有按键按下,A不为0 JZ MAIN ;无按键按键则返回 LCALL TIME_ ;跳转到延时程序 MOV P1,#11110000B MOV A,P1 XRL A,#11110000B ;该部分操作与上述操作相同 MOV R3,A ;保存此时A的值 JZ MAIN ;确认有按键按下 MOV R0,#11110111B;扫描法判断 MOV R1,#0 ;R1存储列的权值 I: MOV P1,R0 ;将R0值传递给P1 MOV A,P1 ;读取P1的值 AAA0:JNB ACC.4,AAA1 ;如果ACC的第四位(即第一列)不为零 MOV R1,#0 ;r1存0 LJMP OK ;跳转到计算环节 AAA1: JNB ACC.5,AAA2 ;同上,判断第二列 MOV R1,#01 LJMP OK AAA2:JNB ACC.6,AAA3 ;同上,判断第三列 MOV R1,#02 LJMP OK AAA3: JNB ACC.7,AAA4 ;同上,判断第四列 MOV R1,#03 LJMP OK AAA4:MOV A,R0 JNB ACC.2,MAIN ;判断是否结束 RR A ;环移 MOV R0,A MOV A,R1 MOV R1,A LJMP I TIME_:MOV R0,#05 TT: MOV R1,#250 DJNZ R1,$ DJNZ R0,TT RET OK: ;判断所在行并送数 MOV A,R1 ADD A,R0 MOV R0,A MOV A,#1 INC R0 AAA:CJNE R0,#0,BBB RL A INC A LJMP AAA BBB:MOV P2,A LJMP MAIN END (2)扩展实验 ORG 0000H LJMP MAIN MAIN:MOV P1,#11110000B;送数11110000 MOV A,P1 ;取当前P1的值 XRL A,#11110000B;与11110000与或运算 JZ MAIN ;如果为0则跳转回 LCALL TIME_ ;延迟子系统 MOV P1,#11110000B MOV A,P1 XRL A,#11110000B JZ MAIN ;再次判断确定非误触 MOV R3,A ;存储当前A信息 MOV P1,#00001111B ;判断所在列 MOV A,P1 XRL A,#00001111B MOV R4,A ;存至R4 MOV A,R3 JNB ACC.1,NEXT1 MOV R3,#4;若为第二行则若R3存4,否则存0 LJMP NEXT2 NEXT1: MOV R3,#0;判断行,依次为0,1,2,3 NEXT2:MOV A,R4 JNB ACC.4,NEXT3 MOV R4,#0 LJMP NEXT7 NEXT3:JNB ACC.5,NEXT4 MOV R4,#1 LJMP NEXT7 NEXT4:JNB ACC.6,NEXT5 MOV R4,#2 LJMP NEXT7 NEXT5:MOV R4,#3 NEXT7:MOV A,R3 ADD A,R4 ;将两个权值相加 MOV P2,A ;送至P2 LJMP MAIN TIME_:MOV R0,#05 TT: MOV R1,#250 DJNZ R1,$ DJNZ R0,TT RET END |
|
|
|
只有小组成员才能发言,加入小组>>
2586 浏览 0 评论
781浏览 1评论
547浏览 0评论
291浏览 0评论
491浏览 0评论
213浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-1-11 09:43 , Processed in 1.171113 second(s), Total 79, Slave 61 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号