微机系统与接口技术课程设计报告
- 格式:doc
- 大小:488.84 KB
- 文档页数:14
2012~2013年度 第1学期 设计题目:实现特定功能的键盘及LED显示
院系: 计算机学院 学号: 姓名:
指导教师: 张健 成绩评定: 完成日期:2014年11月 4 日
微机系统与接口技术 课程设计 1. 设计说明
《微机系统与接口技术》是一门实践性很强的课程,本课程设计是这门课程的最后一个教学环节,是对这门课程一个较全面的应用设计实践,目的在于在巩固学生在课堂上学到的基础知识,加强学生的综合能力与系统设计能力、创新能力。 在本课程设计中,我的题目是在TD-PITE实验箱中实现特定功能的键盘及LED显示。整个系统的目标实现功能具体一点是通过键盘输入来控制点阵LED显示器显示不同的内容,同时要求有一定的扩展能力特性。 整个系统的具体目标功能特性如下; 1) 按1键显示年,按2键显示月、日。 2) 按3键显示自己的姓名。 3) 按4键由左向右循环显示自己的学号或其它特效功能。
1.1. 设计思路 从上面的任务说明中可以知道程序的功能很简单,从总体上可以感受得到关键问题在于获取键盘的输入、控制点阵LED的输出显示。前者在于接收到键盘是否被按下以及哪一个键被按下的数据,在取得这些数据后程序就能够按规则将后者的显示内容进行更改,从而达到通过键盘输入来控制点阵LED的输出。
系统运行流程图如下:
上面流程图中LED的显示特效是动态的,同时系统需要监控键盘的输入情况,初始化
默认显示姓名 LED显示
有输入?
切换显示内容 即系统需要控制LED输出,也需要控制键盘的输入检测。在此有两种方案可以考虑。 第一种是使用中断的方式(8259A芯片)将键盘的检测独立出来,当键盘被按下时,键盘就会发出一个中断信号来中断当前的系统操作,进而系统可以从键盘的扫描结果来决定是否进行功能的切换。 第二种则是使用程序查询的方式进行,此方式相对第一种会更加简单。具体的实施方式是在每一次的LED输出后,马上查询一个键盘是不是有按键被按下,如果发现存在被按下的键,则读取键盘的按键住处,进而进行功能切换,否则继续控制LED的动态效果输出。 相比之下,第二种方式比较简单实用,所以本系统采取了程序查询的方式解决了边控制LED输出边监控键盘输入的问题。 下面针对键盘输入与LED输出两个关键问题进行详细的说明。
1.1.1. 键盘输入 为了得到键盘的输入,本系统使用8255A作为输入输出芯片,并连接到一个4*4的键盘上。该键盘从左上角到右下角分别是0~F的编号。在实际连接时,主要使用8255A的端口C的低4位来作为读入键盘的扫描码的输入端口。由于该键盘还带有数码显示管单元,为了能够进行键盘输入操作的调试,这里对数码显示管使用端口A与端口B分别连接之,调试过程中将使用端口A、B来将键盘的键值使用数码管显示之,注意在最终的执行过程中将不会使用到该单元的数码显示管单元器件。 下面是系统总线与8255A、4*4的键盘单元的连接线路图。
D0D7...WRRDCSXD0XD7...IOW#IOR#IOY0AB系统总线8255单元A0A1XA1XA2键盘及数码管显示单元PB0PB1CPB2DPB3EPB4FPB5GPB6DpPB7
X1X2PA0PA1X3PA2X4PA3
Y1PC0Y2PC1Y3PC2Y4PC3
X5PA4X6PA5
基于上图的芯片单元配置连接图,在程序中可以通过8255A的端口C来读取键盘的扫描码。当发现有按键被按下时,程序会取得按键对应的数字编号,以便进一步处理LED的显示内容。 关于详细的扫描键盘及读取键盘按键值的实现请参考后续的源代码实现。 1.1.2. 点阵LED输出 本系统的输出将采用点阵式的LED单元进行输出,实验箱自带的点阵LED的大小是16*16的,即由四块8*8的点阵块组成,这四个点阵块分别占用了两行两列。实验箱的点阵LED的显示方式是行为1时,列为0时对应的LED点会亮。 具体的点阵LED的示意图及内部结构图如下:
07815列
078
15行
16×16点阵示意图 9148121725
1334106111516
16×16点阵内部结构图 使用点阵LED输出文字时的关键在于符合点阵格式的文字点阵数据,在本系统中将使用DotReader这款中文点阵生成器自动生成目标文字的点阵数据,具体的使用方法可以在参考文献的相关引用资料[1]中找到。 在本系统中,每一个中文的点阵大小是16*16的,在输出的时候只要将对应的点阵数据放到点阵LED的对应位置即可,整个LED会在点阵数据填充过程中正确显示文字。 在滑动地显示文字这个特效功能上,本系统采用逐行扫描方式,不断地将文字的点阵数据向某一个方向”滑动”地在LED上面显示,最终达到整体上文字的滑动特效显示。 16*16的点阵LED的数据端口有一个,通过IOY0~IOY4来进行片选操作,从而能够访问各行各列的点阵.下面是本16*16点阵LED的四个端口的定义: ROW1 EQU 0600H ;第0~7行 ROW2 EQU 0640H ;第8~15行 COL1 EQU 0680H ;第0~7列 COL2 EQU 06C0H ;第8~15列 下面是16*16点阵LED与系统总线的连接线路图。
D0D7...CS3CS4WRCS1CS2XD0XD7...
IOW#IOY0点阵LED
显示单元
系统总线IOY1
IOY2IOY3
行列
1.2. 运用技术 本系统整体结构比较简单,运用到实现技术主要是: 键盘输入单元 点阵LED输出单元 并行接口单元8255A芯片 16*16中文字符点阵生成器 1.3. 完成情况 目前系统的完成情况基本能够达到题目要求,按0键的功能是从上至下滑动显示学生学号,按1键则从下至上是滑动显示学生姓名,并进行LED显示内容的切换。最后LED的显示特效也符合预期,能够正常自下而上地”滑动式”显示输出内容
2. 源代码清单 本系统结构简单,主要的代码量是中文点阵数据,在此就不列出了。以下整个系统的汇编源代码清单。 整个系统初始运行时默认是滑动显示学生姓名。 MY8255_A EQU 0600H ;端口定义 MY8255_B EQU 0602H ;键盘输入相关接口 MY8255_C EQU 0604H MY8255_CON EQU 0606H
ROW1 EQU 0600H ;端口定义 ROW2 EQU 0640H ;点阵LED输出相关接口 COL1 EQU 0680H COL2 EQU 06C0H
;堆栈段 STACK1 SEGMENT STACK DW 256 DUP(?) STACK1 ENDS
;数据段 DATA SEGMENT INPUTS DB ? INCLUDE chunrong.asm ;所有数据汉字点阵 DATA ENDS ;代码段 CODE SEGMENT ASSUME CS:CODE, DS:DATA START: MOV AX, DATA MOV DS, AX MOV DX, ROW1 MOV AL, 00H OUT DX, AL MOV DX, ROW2 OUT DX, AL MOV AL, 0ffH MOV DX, COL1 OUT DX, AL MOV DX, COL2 OUT DX, AL
MOV DX, MY8255_CON ;初始化8255A MOV AL, 81H OUT DX, AL
JMP SHOW_ZHOU ;默认显示名字 ;=====滑动显示姓名===== SHOW_ZHOU: NAME_BG0: MOV AX, 16*4 MOV SI, OFFSET HZDOT_Name NAME_BG1: CALL DISP ;滑动一行 SUB SI, 2 PUSH SI PUSH AX CALL SCAN_KEYBOARD ;扫描一个键盘码 POP AX POP SI DEC AX JZ NAME_BG0 ;下一轮滑动 JMP NAME_BG1 ;下一行
;=====滑动显示学号===== SHOW_XUEHAO: XUEHAO_BG0: MOV AX, 24 MOV SI, OFFSET HZDOT_XUE XUEHAO_BG1: CALL DISP ;滑动一行 ADD SI, 2 PUSH SI PUSH AX CALL SCAN_KEYBOARD ;扫描一个键盘码 POP AX POP SI DEC AX JZ XUEHAO_BG0 ;下一轮滑动 JMP XUEHAO_BG1 ;下一行