姓名: 林蔼龄
学号: 1060601007
班级:10级物理系电子信息工程A班
单片机与矩阵键盘接口电路设计实验报告
一:实验内容
使用单片机的P1口与矩阵式键盘连接时,可以将P1口低4位的4条端口线定义为行线,P1口高4位的4条端口线定义为列线,形成4*4键盘,可以配置16个按键,将单片机P2口与七段数码管连接,当按下矩阵键盘任意键时,数码管显示该键所在的键号。
二:电路图
三:程序流程图
四:程序
org 0000h
ljmp main
main:mov p1,#0fh;列线输出0,行线设为输入
mov a,p1;读P1口
anl a,#0fh;屏蔽高4位,留下行线状态
cjne a,#0fh,look;有按键按下,转look
ret;无按键按下,返回主程序
look:lcall dlay10;延时10ms
mov a,p1;读P1口
anl a,#0fh;屏蔽高4位,留下行线状态
cjne a,#0fh,rank ;确认键已按稳,转RANK
ljmp main;是抖动,未按稳,重新扫描
rank:mov r2,#00h ;窜键标志寄存器请0
mov r3,#04h ;查列次数
mov r4,#0f7h ;列扫描字初值
mov r5,#0ffh ;列号处值
rloop1:inc r5 ;开始列扫描,列号加1
mov a,r4 ;列扫描字送A
rl a ;列扫描字左移一位
mov r4,a ;暂存列扫描字
mov p1,a ;送出列扫描字
mov a,p1 ;读P1口
anl a,#0fh ;屏蔽高4位,留下行线状态
cjne a,#0fh,next1 ;当前列有键按下,转next1
rloop2:djnz r3,rloop1 ;列扫描未完,继续
sjmp line ;列扫描完,转行扫描
next1:inc r2 ;窜键标志加1
mov 20h,r5 ;暂存有按键的列号
sjmp rloop2 ;继续列扫描
line:cjne r2,#01h,main ;若已窜键,转main,重新扫描
mov r2,#00h ;开始查行,窜键标志寄存器清0
mov r3,#04h ;行扫描次数
mov r6,#0ffh ;行号初值
mov p1,#0fh ;列线送0,准备读行线
mov a,p1 ;读P1口,获取行线状态
lloop1:inc r6 ;行号加1
rrc a ;从第0行开始,判断有无按键
jnc next2 ;本行有按键,转next2
lloop2:djnz r3,lloop1 ;无按键,继续查下一行
sjmp next3 ;查完,转next3
next2:inc r2 ;窜键标志加1
mov 21h,r6 ;暂存有按键的行号
sjmp lloop2 ;继续行扫描
next3:cjne r2,#01h,main ;若窜键,转main,重新扫描
gainky:mov a,21h ;无窜键,取出行号
mov b,#04h ;键盘列数
mul ab ;行号*键盘列数
add a,20h ;乘积与列号相加,得到键号
mov b,#03h;为执行键处理程序做准备
mul ab ;键号*3
mov dptr,#ptab ;键处理程序表首地址送DPTR
jmp @a+dptr ;散转至与键号对应的键处理程序
ptab:ljmp prog0; 键处理程序表
ljmp prog1
ljmp prog2
ljmp prog3
ljmp prog4
ljmp prog5
ljmp prog6
ljmp prog7
ljmp prog8
ljmp prog9
ljmp prog10
ljmp prog11
ljmp prog12
ljmp prog13
ljmp prog14
ljmp prog15
prog0:mov p2,#3fh
ret
prog1:mov p2,#06h
ret
prog2:mov p2,#5bh
ret
prog3:mov p2,#4fh
ret
prog4:mov p2,#66h
ret
prog5:mov p2,#6dh
ret
prog6:mov p2,#7dh
ret
prog7:mov p2,#07h
ret
prog8:mov p2,#7fh
ret
prog9:mov p2,#6fh
ret
prog10:mov p2,#77h
ret
prog11:mov p2,#7ch
ret
prog12:mov p2,#39h
ret
prog13:mov p2,#5eh
ret
prog14:mov p2,#79h
ret
prog15:mov p2,#71h
ret
dlay10:mov r0,#100 ;约10ms延时
dlay1:mov r1,#50
dlay2:djnz r1,dlay2
djnz r0,dlay1
ret
end
五:实验结果
当矩阵键盘的3号键被按下时,P2口的七段数码管显示的数据为3.如下图1所以:
图1
当矩阵键盘的A号键被按下时,P2口的七段数码管显示的数据为A.如下图2所以:
图2
当矩阵键盘的D号键被按下时,P2口的七段数码管显示的数据为d.如下图3所以:
图3
当矩阵键盘的F号键被按下时,P2口的七段数码管显示的数据为F.如下图4所以:
图4