8086矩阵键盘显示
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1.实验要求
利用可编程并行接口芯片8255A 设计一个键盘与LED 显示器接口。
1)系统设置一个 4 行×4 列的行/列扫描式键盘和一个 8 位的共阴极七段数码管
显示器;
2)键盘提供 0~F 这 16 个十六进制数字键,采用行/列扫描式接口,数码管采用动
态扫描的方式;
3)编写程序,将键盘键入的数字,采用左移的方式显示在数码管上;
4)按下 C 键清除所有显示内容。
2.实验目的
1)熟练掌握 8086 汇编语言程序设计以及可编程接口芯片应用技术;
2)掌握 Proteus 仿真软件的基本操作与调试功能;
3)掌握基于 Proteus 的 8086 应用系统软硬件设计与调试方法与步骤,并完成仿真
实验
3.实验分析
本实验可具体分解为三大部分,分别是扫描式矩阵键盘的实现,左移数码管的实现以及清零键的实现。
扫描式矩阵键盘的原理如下:设定行线输出,列线输入,行线逐行输出0,如果某列有按键,则列线输入为0;若无按键,列线输入全为1。在本实验中,我们将8255A的C 口单元作为负责扫描式键盘的端口。在代码的编程上,我们让C口的低四位输出全为0,高四位输入检查是否有0从而判断是否有按键按下,该段语句通过loop语句完成循环进行重复检查按键的按下情况。假如有按键按下,则通过逐行扫描的形式获取按下按键的行数
以及列数,再通过该行数与该列数形成的坐标信息得出是哪个按键按下。
左移数码管的实现需要两个子功能:第一个功能是要输出键盘对应的数字,第二个功能是要实现数字的左移功能。本实验中,我们将8255A的A口负责键盘对应字形码的输出,B口负责对应位码的输出。首先,在获取键盘按下的坐标后,我们在对应的表格中得到要输出的字形码。接着字形码入栈和出栈的操作以及指针sp的操作实现对应码数和字型码的输出,也就成功实现了左移功能。程序中必须设定延时以防止两个数同时显示。
清零键的设定实现的是按下清零键消除数码管中所有显示数字的功能。本实验中,我们另加入一片8255A,通过将其A口设定为输入来检查清零键是否按下,如果是则实现清零功能。
4.电路设计
4.1电路原理图
图1 电路图总览
4.2元件清单
4.3电路分析
̅̅̅̅组成,其中CS̅̅̅̅由A7、A3、A4、A6、A5、A0通过74LS138电路中8255A端口由A1、A0、CS
̅̅̅̅有效,A1、A0分别连接A2、A1,A2 A1=00选择得到,当A7 A3 A4 A6 A5 A0=100100时CS
时为A端口,A2 A1=01时为B端口,A2 A1=10时为C端口,A2 A1=11时为控制口,则8255A 端口地址为:A口C0H,B口C2H,C口C4H,控制口C6H。
键盘为4×4的矩阵键盘构成,按键两端分别按行连接和列连接连接到8255A,使用扫描法逐行输出1读取列值获取地址用来查表。
数码显示为8位数码管,其中PA口输出码为段选,确定所亮的字形,输出后由段选锁存器锁存数据,PB口输出码为位选,确定哪一位灯亮输出由74LS138译码后给位选锁存器锁存数据。两锁存器配合使灯亮起,每次只亮一个灯并逐次扫描下一个输出给下一个灯亮,在高频情况下可看到所有输入数字同时亮起。数码管LED为共阴极连接方式。
清零功能中,在当前电路中8255A三个输出端均已被占用,另接一个清零输入复用端
̅̅̅̅接在74LS138的Y0输出端,即A7 A3 口易造成仿真混乱,因此另设了一个8255A,其地址CS
A4 A6 A5 A0=000100时有效,清零8255A端口地址为:A口40H,B口42H,C口44H,D
口46H。
5.程序代码部分
5.1代码原理分析
程序分为三部分:总初始化、输入数据处理、输出显示处理。首先在数据区列表
提前存放带使能的字形码。
初始化部分,段选均输出1,位选均输出1,以此确保数码管没有显示。
输入数据部分,以0123为例,其读取到的数据如表2所示。
表2 读取数字与输入关系
0123、4567、89AB、CDEF分别在不同行读取到这些数据,可由此确定在输入不同位置的按键时处理其值得到所需要的查表地址值,并将得到的地址在逐次的总循环中
压入堆栈。
在显示部分写小循环,从堆栈中循环取出数据逐个扫描显示,段选按照先输入后
出栈后输入先出栈的顺序依次从堆栈中取出数据,控制位选按照顺序从000B开始输出,直至输入8个数后输出111B,经过74LS138译码到相应位灯输出0,形成左移效果,
作为共阴极控制数码管显示,每次扫描只亮一个灯,在高频情况下可达成多个输入的
显示。
在输入开始加入按键是否按下判断操作,在第一次即之前没有输入时循环在此判断,非第一次的重复显示,有输入执行输入地址计算操作。
清零中直接读取另一片8255A的A端口输入PA0口的信号,当其为高电平时表示
清零键按下,系统直接跳转至程序初始化部分,计数值更变为0重新开始计数,实现
清零功能。
5.2流程图绘制
A口=FFH
B口=00H
BL=0
C口=00H
按键?
BH=0
CL=FEH
扫描法计算
地址到BH
延时
CX=AX
BH=1
CX=0?
BL+1
BL=8?A口输入清零?
BL=7 BL=0?
字形码入栈DH=CL
出栈显示
延时是
否
是
否
否
是
是
否
否
是