微机实验:显示和键盘

微机实验:显示和键盘
实验目的
1、熟悉显示和键盘接口的线路设计和工作原理。
2、掌握显示和键盘子程序的程序设计和调试方法。
(一)动态显示
图4-1 led动态显示接口
图4-1示实验板中显示部分线路。6位共阴极led动态显示;8155 pb口提供字形码,决定了显示的字形;pa口提供位选码(扫描字),决定了哪一位发亮。动态显示就是一位一位地轮流点亮led,当某位led点亮时输入相应于该位的被显示字形。虽然实际上是各位轮显示,但速度很快,所以感觉上是6位led同时显示。
在设计显示程序时,通常在片内ram开辟一组显示缓冲区,专用于存放待显示的数据。本实验中,显示缓冲区选用2a~2fh六个单元,依次存放数据的高位到低位。
显示子程序的程序框图如图4-2示,程序如下:
org 0300h
disp:
mov r0, #2ah
;r0指向显示缓冲首址
mov r1, #0feh
;r1指向位选初值,点亮最高位
mov dptr, #0b001a
;dptr指向pa口
dlp:
inc dptr
;指向pb口
mov a, @r0
;取显示数据
add a, #10h
;加偏移量
movc a, @a+pc
;取字型码
movx @dptr, a
;b口输出字型
mov dptr, #0b001a
;指向pa口
mov a, r1
movx @dptr, a
;a口输出字位
acall dims
;延时
rl a
;字位左移一位
mov r1, a
inc r0
;指向下一位显示缓冲
cjne r0, #30h, dlp
;6位是否结束?
ret
db:
3fh,06h,5bh,4fh
字形码0,1,2,3
66h,6dh,7dh,07h
4,5,6,7,8
7fh,6fh,77h,7ch
8,9,a,b,
39h,5eh,79h,71h
c,d,e,f
73h,40h,58h,00h
p,-,l,“灭”
bfh,86h,dbh,cfh
e6h,edh,fdh,87h
ffh,efh,77h
org 0350h
dims:
mov r7,#02h
;延时2ms
dl:
mov r6,#0ffh
dl1:
djnz r6,dl1
djnz r7,dl
ret
子程序调试:
1、仿真器的仿真头插入实验板cpu(注意方向不能插错)。仿真器和实验板接5v电流(电流极性绝对不能接反)。
2、输入程序。
3、利用仿真器在显示缓冲2a~2fh内设置某一个显示内容(例如,01h、02h、03h、10h、11h、14h)。
4、设置8155命令字,口地址0b000h,命令字03h,a、b、口输出,c口输入。
5、单步执行显示子程序,可清楚地看到显示的执行过程。
6、在ret指令处设置断点后,继续执行子程序。
(二)键盘接口
图 4-3 行列式键盘
图4-3示实验板中键盘接口电路。采用行列式结构,共2行6列,对应于12个键盘,每个分配一个键号,依次为0~b。由图显见,任一个键的键号=该行的首键号+列号。
例如;键号a=行首键号6+列号4。所以,只要确定被按下键的行、列位置,就能确定该键的键号。
键盘扫描程序的框图如图4-4示。它具有以下功能:
1、判别有无键按下:从pa口输出扫描字00h,读pc口。若无键按下,则pco、pc1均为1;若有键按下,则pc0或pc1为1。
2、消除键抖动;在某键按下后延时5~10ms,再判别键状态。如果键已放开,认为属于抖动,是误动作;如果键仍闭合,则表示有一个稳定的键输入。
3、判别键号:由pa0~pa5对列线发出扫描字,先后次序是feh、fdh、fbh、f7h、efh、dfh(0位右移)。每次列扫描时,检查行线输入,先查pc0,再查pc1。若行线输入0,表示该行上有键按下。根据此时的行、列号,就能计算出按下键的键号。
1、 按键一次,仅响应一次。为此,必须等待到键释放以后,再取键号,存于a中。
参考程序:
org 03a0h
key:
lcall ks1
;判断有无键闭合
jnz keya
sjmp knd
;无键闭合,则退出
keya:
lcall t12ms
;延时12ms
lcall ks1
jnz lk1
;键仍闭合,转
sjmp knd
;键已放开,是抖动
lk1:
mov r4, #00h
;列号寄存器r4置0
mov r2, #feh
;0列扫描字
lk2:
mov dptr, #0b001h
;指向pa口
mov a, r2
movx @dptr, a
;pa口输出扫描字
inc dptr
inc dptr
;指向pc口
movx a, @dptr
;读pc
jb acc.0, lone
;pc0=1,0行无键按下,转判下一行
mov a, #00h
;0行有键按下,行首键号00h送a
sjmp lkp
lone:
jb acc.1, next
;pc1=1,1行无键按下,转判下一列
mov a, #06h
;1行有键按下,行首键号06h
lkp:
add a ,r4
;计算键号
push acc
;键号暂存
lk3:
lcall ks1
;等待键释放
jnz lk3
pop acc
;键已释放,键号送a
knd:
ret
next:
inc r4
;列号+1
mov a, r2
;扫描到最后一列?
jnb acc.5, knd
;是,转knd
rl a
;扫描字0位左移一位
mov r2, a
sjmp lk2
;扫描下一列
ks1:
mov dptr, #0b001h
;判断有无键闭合
mov a, #00h
movx @dptr, a
;pa口输出扫描字00h
inc dptr
inc dptr
movx a, @dptr
;读pc口
cpl a
anl a, #03h
;a=0,无键闭合
ret
t12ms:
mov r7, #18h
;延时12ms
tm:
mov r6, #ffh
tm6:
djnz r6, tm6
djnz r7, tm
ret
子程序调试:
1、输入键盘子程序。
2、设置8255命令字(03h)。
3、在标号knd处设置断点,在按下某一键的同时,连续执行子程序。然后检查a中键号是否正确。
(三)显示和键盘演示实验
在8031应用系统的总体设计中,为了保证显示和键扫描程序的正常工作,必须对8155进行初始化设置。下面的演示程序可作为一个简单的实例。该程序的功能是:上电后数码管全部显示“0”。按下任一键后,数码管显示其键号,而且,显示位置跟踪按键的先后顺序。该程序固化到实验板的eprom中后,实验板能够脱离仿真器而独立运行。
org 0000h
ljmp main
org 0a00h
main:
mov sp, #60h
;设置堆栈
mov dptr, #b000h
;8155初始化
mov a, #03h
;a、b口输出,c口输入
movx @dptr, a
mov 2ah, #00h
;显示缓冲区置初始00
mov 2bh, #00h
mov 2ch, #00h
mov 2dh, #00h
mov 2eh, #00h
mov 2fh, #00h
mp0:
mov 40h, #2ah
;40h显示缓冲指针
mp1:
lcall disp
;调用显示
0a21
lcall ks1
;判有键闭合?
0a24
jz mp1
;无键闭合,转mp1
0a26
lcall keya
;有键闭合,求键号,存a
mov r1, 40h
;键号送显示缓冲区
mov @r1, a
inc 40h
;修改显示指针
mov a, 40h
cjne a, #30h, mp1
;按键不到6次,转mp1
sjmp mp0
;按键次(6位显示满)后从最
左位开始重新显示
end
实验步骤:
1、输入程序(包括主程序main和子程序disp、key等)。
2、全速运行程序。按下任一键,监视显示,检查是否符合设计。
3、如发现不正常,可利用单步法或断点法,进行测试。
思考题:
1、动态显示器的亮度和哪些因素有关?
2、动态显示器有什么优缺点?
3、动态显示线路图4-1中,如将pa0接至数码管最低位,pa5接至数码管最高位,程序将如何修改?
4、动态显示线路中,如将数码管改为共阳极,其余不变,程序将如何修改?
5、8031应用系统设计中,地址0000h这一句为什么一定要用?
6、主程序main最后一句sjmp mp0,如改为sjmp $,将产生什么后果?
7、将主程序main中地址为0a21h~0a26h的三句删掉,改为lcall key,将产生什么后果?

大疆消费级无人机将进入“飞行体验+航拍体验双结合”阶段
北京现代将出售重庆工厂 起售价36.8亿元
撬动全球市场 NB-IoT标准发展将面临六大挑战
国产 ARM 芯片设计大多数只能满足嵌入式设计?
Bridgtek推出最新EVE图形控制器 具ASTC功能可提升数据存储能力
微机实验:显示和键盘
怎样用4X4键盘和ArduinoUno制作Arduino计算器
LG电子在墨西哥雷诺萨的工厂正为北美市场加大力度生产电视机
内置晶振极高精度的实时时钟芯片PCF2129介绍
PWM控制器的主要参数
怎样提高数字定位器的带宽
基于USB和便携式医疗设备的数据采集系统实现
为什么量子计算与AI一样重要量子计算到底是什么
利天万世20GWh锂电池项目举行开工仪式 总投资达15亿美元
台电按键加密U盘上手评测:目标明确 主打安全
这款全面屏手机仅2499,为什么热度还不如三个月前的小米6
差分信号是5V的还是24V的?差分信号电压是多少?
思倍云荣膺2023年度“毕马威中国领先不动产科技企业50”
最新云计算预测:云安全、自动化融合、数据中心成关键
存储器市场需要寻找一个新的发展方向