单片机嵌入式系统实验4简介
单片机系统及其应用实验 2013年 实验四 矩阵键盘实验 一、实验目的 1.了解4*4矩阵键盘的工作原理 2.掌握利用行列扫描法读取按键信息 及软件消抖的方法。 3. 熟练操作学习板下载和演示程序 (或熟练掌握Proteus软件的使用方法。) 1、实验内容 利用开发板的键盘矩阵和最右边一位数码管,编写程序,实现在键盘上每按一个 数字键(0-F),在数码管上显示对应的键值。 2、实验步骤1 使用Keil uVision4仿真软件,建立本实验的项目文件,接着添加源程序,进行编译,直到编译无误,创建HEX文件。 3、实验步骤2 正确操作学习板,将程序实时下载和演示(或使用PROTEUS软件画硬件原理图,下载HEX文件至CPU,执行程序。) 硬件原理图 程序流程图 源程序 BUF EQU 20H ORG 0000H MAIN: MOV BUF,#10H MAIN1: ACALL KEY ;调用键盘扫描程序 ACALL DS1 ;调用显示子程序 LJMP MAIN1 DELAY: MOV R6,#00;延时程序 DEL11: DJNZ R6,DEL11 RET KEY:MOV P2,#0E0H ;全扫描,各列线都送低电平 MOV P1,#00H; MOV A,P1 ;读回各行线电平值 ORL A,#0F0H ;只读低四位 CPL A ;所读值置反 JNZ IN ;不是全0说明有键按下 RET ;无键按下返回 IN:ACALL DELAY ;调延时,等待按合抖动过去 MOV R2,#04H ;R2做计数器,存待扫描列数 MOV R4,#7FH ;R4做指针,指示待扫描列数 MOV R7,#00H ;R7用于决定键号,初值置以0 SCAN:MOV A,R4 RL A MOV R4,A ;以上三条调整待扫描列 MOV P2,A ;逐列扫描, 被扫描列送低电平 MOV P1,#00H; MOV A,P1 ;读回各行线电平值 MOV R3,#04H;R3做记数器,存被扫描列的待查行数 NEXT:RRC A ;调整待查行 JNC FIND;被查行为低电平,被按键找到,转FIND INC R7 ;未找到,键号加一 DJNZ R3,NEXT ;被扫描列的待查行数不为0, 转回NEXT DJNZ R2,SCAN ;扫描下一列 RET ;未找到所按键,返回 FIND: MOV BUF,R7 MOV P2,#0E0H LOOSEN:MOV A,P1 ORL A,#0F0H CPL A JNZ LOOSEN; 等待所按键松按 MOV A,R7;松按后才考虑键处理 ADD A,#0F6H ; JC ORDER;键号大于9, 执行命令键处理程序 NUM:NOP ;键号小于等于9,执行数字键处理程序 RET ORDER:NOP RET DS1: ;显示程序 MOV P3,#08H MOV A,BUF LCALL TABLE MOV P0,A LCALL DELAY;延时 RET TABLE: INC A MOVC A,@A+PC RET DB 03H,9FH,25H,0DH,99H,49H,41H,1FH,01H,19H,11H,0C1H,63H,85H,61H,71H,0FFH END 思考题 1、按键控制蜂鸣器发声和停止发声(P2.6口),并可根据键值变换不同频率的声音 2、连续按键,可在数码管上显示多位相同或不同的数字和符号(可一个键实现此功能,也可多个键实现,或设定某一键有此功能。。。) 要求:根据上述条件,自行设计程序,根据实现现象和改写程序内容评分 实验报告 1、完成习题 2、体会、建议 实验结束后, 请同学们正常关机退出, 谢谢! * * *
原创力文档

文档评论(0)