微机系统与接口技术课程设计报告.docx

上传人:b****6 文档编号:8438034 上传时间:2023-01-31 格式:DOCX 页数:17 大小:255.81KB
下载 相关 举报
微机系统与接口技术课程设计报告.docx_第1页
第1页 / 共17页
微机系统与接口技术课程设计报告.docx_第2页
第2页 / 共17页
微机系统与接口技术课程设计报告.docx_第3页
第3页 / 共17页
微机系统与接口技术课程设计报告.docx_第4页
第4页 / 共17页
微机系统与接口技术课程设计报告.docx_第5页
第5页 / 共17页
点击查看更多>>
下载资源
资源描述

微机系统与接口技术课程设计报告.docx

《微机系统与接口技术课程设计报告.docx》由会员分享,可在线阅读,更多相关《微机系统与接口技术课程设计报告.docx(17页珍藏版)》请在冰豆网上搜索。

微机系统与接口技术课程设计报告.docx

微机系统与接口技术课程设计报告

微机系统与接口技术

课程设计

 

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输出,也需要控制键盘的输入检测。

在此有两种方案可以考虑。

第一种是使用中断的方式(8259A芯片)将键盘的检测独立出来,当键盘被按下时,键盘就会发出一个中断信号来中断当前的系统操作,进而系统可以从键盘的扫描结果来决定是否进行功能的切换。

第二种则是使用程序查询的方式进行,此方式相对第一种会更加简单。

具体的实施方式是在每一次的LED输出后,马上查询一个键盘是不是有按键被按下,如果发现存在被按下的键,则读取键盘的按键住处,进而进行功能切换,否则继续控制LED的动态效果输出。

相比之下,第二种方式比较简单实用,所以本系统采取了程序查询的方式解决了边控制LED输出边监控键盘输入的问题。

下面针对键盘输入与LED输出两个关键问题进行详细的说明。

1.1.1.键盘输入

为了得到键盘的输入,本系统使用8255A作为输入输出芯片,并连接到一个4*4的键盘上。

该键盘从左上角到右下角分别是0~F的编号。

在实际连接时,主要使用8255A的端口C的低4位来作为读入键盘的扫描码的输入端口。

由于该键盘还带有数码显示管单元,为了能够进行键盘输入操作的调试,这里对数码显示管使用端口A与端口B分别连接之,调试过程中将使用端口A、B来将键盘的键值使用数码管显示之,注意在最终的执行过程中将不会使用到该单元的数码显示管单元器件。

下面是系统总线与8255A、4*4的键盘单元的连接线路图。

基于上图的芯片单元配置连接图,在程序中可以通过8255A的端口C来读取键盘的扫描码。

当发现有按键被按下时,程序会取得按键对应的数字编号,以便进一步处理LED的显示内容。

关于详细的扫描键盘及读取键盘按键值的实现请参考后续的源代码实现。

1.1.2.点阵LED输出

本系统的输出将采用点阵式的LED单元进行输出,实验箱自带的点阵LED的大小是16*16的,即由四块8*8的点阵块组成,这四个点阵块分别占用了两行两列。

实验箱的点阵LED的显示方式是行为1时,列为0时对应的LED点会亮。

具体的点阵LED的示意图及内部结构图如下:

16×16点阵示意图

16×16点阵内部结构图

使用点阵LED输出文字时的关键在于符合点阵格式的文字点阵数据,在本系统中将使用DotReader这款中文点阵生成器自动生成目标文字的点阵数据,具体的使用方法可以在参考文献的相关引用资料[1]中找到。

在本系统中,每一个中文的点阵大小是16*16的,在输出的时候只要将对应的点阵数据放到点阵LED的对应位置即可,整个LED会在点阵数据填充过程中正确显示文字。

在滑动地显示文字这个特效功能上,本系统采用逐行扫描方式,不断地将文字的点阵数据向某一个方向”滑动”地在LED上面显示,最终达到整体上文字的滑动特效显示。

16*16的点阵LED的数据端口有一个,通过IOY0~IOY4来进行片选操作,从而能够访问各行各列的点阵.下面是本16*16点阵LED的四个端口的定义:

ROW1EQU0600H;第0~7行

ROW2EQU0640H;第8~15行

COL1EQU0680H;第0~7列

COL2EQU06C0H;第8~15列

下面是16*16点阵LED与系统总线的连接线路图。

1.2.运用技术

本系统整体结构比较简单,运用到实现技术主要是:

✓键盘输入单元

✓点阵LED输出单元

✓并行接口单元8255A芯片

✓16*16中文字符点阵生成器

1.3.完成情况

目前系统的完成情况基本能够达到题目要求,按0键的功能是从上至下滑动显示学生学号,按1键则从下至上是滑动显示学生姓名,并进行LED显示内容的切换。

最后LED的显示特效也符合预期,能够正常自下而上地”滑动式”显示输出内容

2.源代码清单

本系统结构简单,主要的代码量是中文点阵数据,在此就不列出了。

以下整个系统的汇编源代码清单。

整个系统初始运行时默认是滑动显示学生姓名。

MY8255_AEQU0600H;端口定义

MY8255_BEQU0602H;键盘输入相关接口

MY8255_CEQU0604H

MY8255_CONEQU0606H

ROW1EQU0600H;端口定义

ROW2EQU0640H;点阵LED输出相关接口

COL1EQU0680H

COL2EQU06C0H

;堆栈段

STACK1SEGMENTSTACK

DW256DUP(?

STACK1ENDS

;数据段

DATASEGMENT

INPUTSDB?

INCLUDEchunrong.asm;所有数据汉字点阵

DATAENDS

;代码段

CODESEGMENT

ASSUMECS:

CODE,DS:

DATA

START:

MOVAX,DATA

MOVDS,AX

MOVDX,ROW1

MOVAL,00H

OUTDX,AL

MOVDX,ROW2

OUTDX,AL

MOVAL,0ffH

MOVDX,COL1

OUTDX,AL

MOVDX,COL2

OUTDX,AL

MOVDX,MY8255_CON;初始化8255A

MOVAL,81H

OUTDX,AL

JMPSHOW_ZHOU;默认显示名字

;=====滑动显示姓名=====

SHOW_ZHOU:

NAME_BG0:

MOVAX,16*4

MOVSI,OFFSETHZDOT_Name

NAME_BG1:

CALLDISP;滑动一行

SUBSI,2

PUSHSI

PUSHAX

CALLSCAN_KEYBOARD;扫描一个键盘码

POPAX

POPSI

DECAX

JZNAME_BG0;下一轮滑动

JMPNAME_BG1;下一行

;=====滑动显示学号=====

SHOW_XUEHAO:

XUEHAO_BG0:

MOVAX,24

MOVSI,OFFSETHZDOT_XUE

XUEHAO_BG1:

CALLDISP;滑动一行

ADDSI,2

PUSHSI

PUSHAX

CALLSCAN_KEYBOARD;扫描一个键盘码

POPAX

POPSI

DECAX

JZXUEHAO_BG0;下一轮滑动

JMPXUEHAO_BG1;下一行

 

;=====扫描键盘并选择功能=====

SCAN_KEYBOARD:

BEGIN:

CALLCCSCAN;扫描

JNZINK1

RET;

INK1:

CALLDALLY

CALLDALLY

CALLCCSCAN

JNZINK2;有键按下,进行取键值

INK2_BRK:

MOVAL,INPUTS;得到键值

CMPAL,0

JZSHOW_ZHOU;0显示姓名

;default..

CMPAL,1;1显示学号

JZSHOW_XUEHAO

RET

;=====获取键盘输入的键值=====

INK2:

MOVCH,0FEH

MOVCL,00H

COLUM:

MOVAL,CH

MOVDX,MY8255_A

OUTDX,AL

MOVDX,MY8255_C

INAL,DX

L1:

TESTAL,01H;isLine1?

JNZL2

MOVAL,00H;Line1

JMPKCODE

L2:

TESTAL,02H;isLine2?

JNZL3

MOVAL,04H;Line2

JMPKCODE

L3:

TESTAL,04H;isLine3?

JNZL4

MOVAL,08H;Line3

JMPKCODE

L4:

TESTAL,08H;isLine4?

JNZNEXT

MOVAL,0CH;Line4

KCODE:

ADDAL,CL

MOVINPUTS,Al;保存输入值

NEXT:

INCCL

MOVAL,CH

TESTAL,08H

JZKERR

ROLAL,1

MOVCH,AL

JMPCOLUM

KERR:

JMPINK2_BRK;返回,并判断是否需要切换功能

 

;======键盘扫描子程序======

CCSCAN:

MOVAL,00H;键盘扫描子程序

MOVDX,MY8255_A

OUTDX,AL

MOVDX,MY8255_C

INAL,DX

NOTAL

ANDAL,0FH

RET

;======键盘延时子程序======

DALLY:

PUSHCX

MOVCX,0006H

T1:

MOVAX,009FH

T2:

DECAX

JNZT2

LOOPT1

POPCX

RET

;======显示汉字子程序======

;入口参数:

SI=存放汉字点阵起始地址

DISP:

MOVCX,000FH

PUSHAX

ML0:

PUSHCX

MOVBL,01H

MOVCX,0008H

ML1:

MOVDX,ROW1;控制0--7行

MOVAL,00H

OUTDX,AL

MOVAL,[SI]

notal;0表示高亮

MOVDX,COL1;0--7列

OUTDX,AL

INCSI;下一个字节(下一列)

MOVAL,[SI]

notal

MOVDX,COL2;8--15列

OUTDX,AL

INCSI

MOVDX,ROW1;控制0--7行

MOVAL,BL

OUTDX,AL

ROLBL,1

CALLDELAY

LOOPML1

MOVDX,ROW1

MOVAL,00H

OUTDX,AL

MOVCX,0008H

ML2:

MOVDX,ROW2;控制8--15行

MOVAL,00H

OUTDX,AL

MOVAL,[SI]

NOTAL

MOVDX,COL1;0--7列

OUTDX,AL

INCSI

MOVAL,[SI]

NOTAL

MOVDX,COL2;8--15列

OUTDX,AL

INCSI

MOVDX,ROW2;控制8--15行

MOVAL,BL

OUTDX,AL

ROLBL,1

CALLDELAY

LOOPML2

MOVDX,ROW2

MOVAL,00H

OUTDX,AL

SUBSI,32

POPCX

LOOPML0

POPAX

RET

;======显示延时子程序======

DELAY:

PUSHCX;延时子程序

MOVCX,00C0H

DL1:

PUSHAX

POPAX

LOOPDL1

POPCX

RET

CODEENDS

ENDSTART;

;本文件为16×16点阵中文字库文件,字的横向8点构成一字节,左边点在字节的高位,字符点阵四角按左上角→右上角→左下角→右下角取字

;如你想在以后继续用HZDotReader打开文件,追加汉字点阵数据,请不要修改或增删所有注释

CD5C5EQU00000H;李

CBCCCEQUCD5C5+1;俊

CB7E5EQUCBCCC+1;杰

 

;杰CBDDC

DB080H,001H,080H,001H,0FEH,03FH,0FEH,03FH

DB0E0H,003H,0E0H,007H,0B0H,00DH,098H,019H

DB08EH,071H,082H,021H,000H,000H,06CH,033H

DB04CH,066H,0C6H,064H,006H,000H,000H,000H

;俊CBFA1

DB018H,003H,098H,001H,0DCH,018H,0ECH,03FH

DB0EEH,03FH,08EH,019H,0CFH,030H,06DH,023H

DB08CH,01FH,0CCH,01FH,06CH,019H,02CH,00FH

DB00CH,00EH,0CCH,07BH,0ECH,070H,000H,000H

 

;李CC0EE

HZDOT_Name:

DB080H,001H,080H,001H,0FFH,07FH,0FFH,07FH

DB0B0H,007H,09CH,01DH,007H,070H,0FAH,00FH

DB0F8H,00FH,000H,003H,0FEH,07FH,0FEH,07FH

DB080H,001H,0E0H,001H,0C0H,000H,000H,000H

 

HZDOT_XUE:

;27C3237

DB000H,000H,000H,000H,000H,000H,018H,07EH

DB024H,040H,042H,040H,042H,020H,040H,020H

DB020H,020H,010H,010H,008H,010H,004H,010H

DB002H,008H,07EH,008H,000H,000H,000H,000H

 

;55C3535

DB000H,000H,000H,000H,000H,000H,07EH,07EH

DB002H,002H,002H,002H,03EH,03EH,042H,042H

DB040H,040H,040H,040H,040H,040H,042H,042H

DB042H,042H,03CH,03CH,000H,000H,000H,000H

 

3.程序结果截图

显示学生学号

显示学生姓名

4.结论及体会

本次课程设计,我看到了自己许多不足之处。

以前在上课的时候,老师经常强调在写一个程序的时候,一定要事先把程序原理方框图化出来,但是我开始总觉得这样做没必要,很浪费时间。

但是,这次课程设计完全改变了我以前的那种错误的认识,以前我接触的那些程序都是很短、很基础的,但是在课程设计中碰到的那些需要很多代码才能完成的任务,画程序方框图是很有必要的。

因为通过程序方框图,在做设计的过程中,我们每一步要做什么,每一步要完成什么任务都有一个很清楚的思路,而且在程序测试的过程中也有利于查错。

 

通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,才能提高自己的实际动手能力和独立思考的能力。

在设计的过程中遇到了各种各样的问题,在这些问题中也认识到了自己的种种不足,对以前所学过的知识理解得不够深刻,掌握得不够牢固。

其实这也给了我一个警告,在今后的学习中,我力争扎实学习。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 外语学习 > 其它语言学习

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1