实 验 报 告
第 页
专业___软件学院___ 班级__4__ 学号__123012005158__
实验日期: 2007 年 11 月 12 日 报告退发 (订正 、 重做)
课程 单片机程序设计 实验名称 编码键盘实验
一、实验目的
掌握编码键盘的原理和使用方法
二、实验环境
PC,51板,KC
三、实验内容、步骤和结果分析
编写键盘扫描程序,按下KEY1的时候LED显示1, 按下KEY2的时候LED显示2,……….
程序如下:
org 0000h
ajmp main
org 0013h
ajmp intr1
main: mov a,#0ffh
mov p1,a
mov ie,#84h
setb it1
setb tr0
setb et0
setb ea
mov p0,#00h
mov p1,#0ffh
;mov p1,#0fh
sjmp $
intr1: mov p1,#0fh
mov a,p1 ;取出p1值
anl a,#0fh ;屏蔽高四位
jnb acc.0,k0 ;判断p1.0~p1.4中哪个键被按下
jnb acc.1,k1
jnb acc.2,k2
jnb acc.3,k3
exit: ;setb ea
reti
k0: ;ajmp KEY0
mov r3,#00h ;0按下
ajmp setrow ;跳转到计算行号
k1: mov r3,#01h ;1
ajmp setrow
k2: mov r3,#02h ;2
ajmp setrow
k3: mov r3,#03h ;3
ajmp setrow
setrow: mov p1,# 0f 0h ;对p1重新复制
mov a,p1
anl a,# 0f 0h ;屏蔽低4位
jnb acc.4,row0 ;计算行号
jnb acc.5,row1
jnb acc.6,row2
jnb acc.7,row3
row0: mov r4,#00h ;为0行
ajmp getr
row1: mov r4,#01h ;1行
ajmp getr
row2: mov r4,#02h
ajmp getr
row3: mov r4,#03h
ajmp getr
getr: mov a,#00h ;计算键值
mov a,r4
rl a ;4倍数计算
rl a
add a,r3 ;4*R4+R3
mov r5,a
cjne r5,#00h,key1;判断键值
mov a,#02h ;为0,显示,下同
mov p2,a
mov a,#3fh
mov p0,a
ajmp exit
key1: cjne r5,#01h,key2
mov a,#02h
mov p2,a
mov a,#06h
mov p0,a
ajmp exit
key2: cjne r5,#02h,key3
mov a,#02h
mov p2,a
mov a,#5bh
mov p0,a
ajmp exit
key3: cjne r5,#03h,key4
mov a,#02h
mov p2,a
mov a,#4fh
mov p0,a
ajmp exit
key4: cjne r5,#04h,key5
mov a,#02h
mov p2,a
mov a,#66h
mov p0,a
ajmp exit
key5: cjne r5,#05h,key6
mov a,#02h
mov p2,a
mov a,#6dh
mov p0,a
ajmp exit
key6: cjne r5,#06h,key7
mov a,#02h
mov p2,a
mov a,#7dh
mov p0,a
ajmp exit
key7: cjne r5,#07h,key8
mov a,#02h
mov p2,a
mov a,#07h
mov p0,a
ajmp exit
key8: cjne r5,#08h,key9
mov a,#02h
mov p2,a
mov a,#7fh
mov p0,a
ajmp exit
key9: cjne r5,#09h,key10
mov a,#02h
mov p2,a
mov a,#6fh
mov p0,a
ajmp exit
key10: cjne r5,#0ah,key11
mov a,#02h
mov p2,a
mov a,#77h
mov p0,a
ajmp exit
key11: cjne r5,#0bh,key12
mov a,#02h
mov p2,a
mov a,#7ch
mov p0,a
ajmp exit
key12: cjne r5,#0ch,key13
mov a,#02h
mov p2,a
mov a,#39h
mov p0,a
ajmp exit
key13: cjne r5,#0dh,key14
mov a,#02h
mov p2,a
mov a,#5eh
mov p0,a
ajmp exit
key14: cjne r5,#0eh,key15
mov a,#02h
mov p2,a
mov a,#79h
mov p0,a
ajmp exit
key15:
mov a,#02h
mov p2,a
mov a,#71h
mov p0,a
ajmp exit
end
实验成功,能在51板上通过按键让电子数码管进行显示相应的数字
四、讨论
本次实验主要了解了在51板上的工作原理,在对其电路图进行了一定的了解之后使程序编写显得比较明了.起先实现了每一列可以按键,但是不懂如何进行移位来判断,这个问题思考了很久,后来通过对p0端口赋不同的值,取出各自的数字并进行计算才得以实现.
本实验完成,了解了键盘的外部中断的工作原理.