实现特定功能的键盘及LED显示.docx
- 文档编号:3580812
- 上传时间:2022-11-24
- 格式:DOCX
- 页数:16
- 大小:247.17KB
实现特定功能的键盘及LED显示.docx
《实现特定功能的键盘及LED显示.docx》由会员分享,可在线阅读,更多相关《实现特定功能的键盘及LED显示.docx(16页珍藏版)》请在冰豆网上搜索。
实现特定功能的键盘及LED显示
1.
2.设计说明
《微机系统与接口技术》是一门实践性很强的课程,本课程设计是这门课程的最后一个教学环节,是对这门课程一个较全面的应用设计实践,目的在于在巩固学生在课堂上学到的基础知识,加强学生的综合能力与系统设计能力、创新能力。
在本课程设计中,我的题目是在TD-PITE实验箱中实现特定功能的键盘及LED显示。
整个系统的目标实现功能具体一点是通过键盘输入来控制点阵LED显示器显示不同的内容,同时要求有一定的扩展能力特性。
整个系统的具体目标功能特性如下;
1)按1键显示年,按2键显示月、日。
2)按3键显示自己的姓名。
3)按4键由左向右循环显示自己的学号或其它特效功能。
2.1.设计思路
从上面的任务说明中可以知道程序的功能很简单,从总体上可以感受得到关键问题在于获取键盘的输入、控制点阵LED的输出显示。
前者在于接收到键盘是否被按下以及哪一个键被按下的数据,在取得这些数据后程序就能够按规则将后者的显示内容进行更改,从而达到通过键盘输入来控制点阵LED的输出。
系统运行流程图如下:
上面流程图中LED的显示特效是动态的,同时系统需要监控键盘的输入情况,即系统需要控制LED输出,也需要控制键盘的输入检测。
在此有两种方案可以考虑。
第一种是使用中断的方式(8259A芯片)将键盘的检测独立出来,当键盘被按下时,键盘就会发出一个中断信号来中断当前的系统操作,进而系统可以从键盘的扫描结果来决定是否进行功能的切换。
第二种则是使用程序查询的方式进行,此方式相对第一种会更加简单。
具体的实施方式是在每一次的LED输出后,马上查询一个键盘是不是有按键被按下,如果发现存在被按下的键,则读取键盘的按键住处,进而进行功能切换,否则继续控制LED的动态效果输出。
相比之下,第二种方式比较简单实用,所以本系统采取了程序查询的方式解决了边控制LED输出边监控键盘输入的问题。
下面针对键盘输入与LED输出两个关键问题进行详细的说明。
2.1.1.键盘输入
为了得到键盘的输入,本系统使用8255A作为输入输出芯片,并连接到一个4*4的键盘上。
该键盘从左上角到右下角分别是0~F的编号。
在实际连接时,主要使用8255A的端口C的低4位来作为读入键盘的扫描码的输入端口。
由于该键盘还带有数码显示管单元,为了能够进行键盘输入操作的调试,这里对数码显示管使用端口A与端口B分别连接之,调试过程中将使用端口A、B来将键盘的键值使用数码管显示之,注意在最终的执行过程中将不会使用到该单元的数码显示管单元器件。
下面是系统总线与8255A、4*4的键盘单元的连接线路图。
基于上图的芯片单元配置连接图,在程序中可以通过8255A的端口C来读取键盘的扫描码。
当发现有按键被按下时,程序会取得按键对应的数字编号,以便进一步处理LED的显示内容。
关于详细的扫描键盘及读取键盘按键值的实现请参考后续的源代码实现。
2.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与系统总线的连接线路图。
2.2.运用技术
本系统整体结构比较简单,运用到实现技术主要是:
✓键盘输入单元
✓点阵LED输出单元
✓并行接口单元8255A芯片
✓16*16中文字符点阵生成器
2.3.完成情况
目前系统的完成情况基本能够达到题目要求,按0键的功能是从上至下滑动显示学生学号,按1键则从下至上是滑动显示学生姓名,并进行LED显示内容的切换。
最后LED的显示特效也符合预期,能够正常自下而上地”滑动式”显示输出内容
3.源代码清单
本系统结构简单,主要的代码量是中文点阵数据,在此就不列出了。
以下整个系统的汇编源代码清单。
整个系统初始运行时默认是滑动显示学生姓名。
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
4.程序结果截图
显示学生学号
显示学生姓名
5.结论及体会
本次课程设计,我看到了自己许多不足之处。
以前在上课的时候,老师经常强调在写一个程序的时候,一定要事先把程序原理方框图化出来,但是我开始总觉得这样做没必要,很浪费时间。
但是,这次课程设计完全改变了我以前的那种错误的认识,以前我接触的那些程序都是很短、很基础的,但是在课程设计中碰到的那些需要很多代码才能完成的任务,画程序方框图是很有必要的。
因为通过程序方框图,在做设计的过程中,我们每一步要做什么,每一步要完成什么任务都有一个很清楚的思路,而且在程序测试的过程中也有利于查错。
通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,才能提高自己的实际动手能力和独立思考的能力。
在设计的过程中遇到了各种各样的问题,在这些问题中也认识到了自己的种种不足,对以前所学过的知识理解得不够深刻,掌握得不够牢固。
其实这也给了我一个警告,在今后的学习中,我力争扎实学习。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 实现 特定 功能 键盘 LED 显示