点阵字符显示课设报告.docx
《点阵字符显示课设报告.docx》由会员分享,可在线阅读,更多相关《点阵字符显示课设报告.docx(12页珍藏版)》请在冰豆网上搜索。
点阵字符显示课设报告
微机原理与接口技术
课程设计报告
课题名称:
点阵字符显示
学院:
专业:
班级:
组员:
指导教师:
日期:
2015年12月19日
一、概述
点阵LED显示器是将许多LED类似矩阵一样排列在一起组成的显示器件,双色点阵LED是在每一个点阵的位置上有红绿或红黄或红白两种不同颜色的发光二极管。
当微机输出的控制信号使得点阵中有些LED发光,有些不发光,即可显示出特定的信息,包括汉字、图形等。
车站广场由微机控制的点阵LED大屏幕广告宣传牌随处可见。
二、设计目的
1、了解点阵LED显示器的基本原理。
2、掌握PC机控制点阵LED显示程序的设计方法。
3、用开关控制点阵字符的显示。
三、设计原理
本次实验所使用的实验箱是红色和绿色双色点阵,上面有一个共阳极8×8点阵的红绿两色LED显示器,其点阵结构如图所示。
该点阵对外引出24条线,其中8条行线,8条红色列线,8条绿色列线。
若使某一种颜色、某一个LED发光,只要将与其相连的行线加高电平,列线加低电平即可。
例如欲显示汉字“年”,采用逐列循环发光。
首先由“年”的点阵轮廓,确定点阵代码(如图所示)根据“年”的点阵代码,确定逐列循环发光的顺序如下:
①行代码输出44H;红色列代码输01H;第一列2个红色LED发光。
②行代码输出54H;红色列代码输02H;第二列3个红色LED发光。
③行代码输出54H;红色列代码输04H;第三列3个红色LED发光。
④行代码输出7FH;红色列代码输08H;第四列7个红色LED发光。
⑤行代码输出54H;红色列代码输10H;第五列3个红色LED发光。
⑥行代码输出DCH;红色列代码输20H;第六列5个红色LED发光。
⑦行代码输出44H;红色列代码输40H;第七列2个红色LED发光。
⑧行代码输出24H;红色列代码输80H;第八列2个红色LED发光。
在步骤①~⑧之间可插入几ms的延时,重复进行①~⑧即可在LED上稳定的显示出红色“年”字。
若想显示绿色“年”,只需把红色列码改为绿色列码即可。
本次实验使用8255芯片的三个接口连接点阵与开关,以实现开关控制点阵的显示与切换。
8255芯片的A口用作输入,B口和C口用作输出。
四、电路设计
1.硬件设计
1 实验箱上的点阵LED及驱动电路已封装好,行代码、红色列代码、黄色列代码各用一片74LS273锁存。
行代码输出的数据通过行驱动器7407加至点阵的8条行线上,红和黄列代码的输出数据通过驱动器DS75452反相后分别加至红和黄的列线上。
行锁存器片选信号为“行选”,红色列锁存器片选信号为“红选”,绿色列锁存器片选信号为“绿选”。
2 接线方法:
8255片选信号CS接Y1(288H);8255A口接开关,通过开关控制LED点阵字符的显示,切换开关则变换字符;8255B口接点阵的行片选信号,8255C口接点阵的绿列片选信号。
电路原理图如下图。
2.软件设计
1 将要显示的字体转成8*8点阵代码
如图,若想显示字符’0’,则其右起第一列由上到下的十六进制代码为00H(00000000,黑色为1,白色为0),第二列为3CH(00111100)…由此类推,可得字符’0’的十六进制代码集为{00h,3ch,42h,81h,81h,42h,3ch,00h}。
同理,可得字符’9’的十六进制代码集{00h,0ffh,89h,89h,89h,89h,0f9h,00h}。
2 主要程序代码
a.显示每行中的第几位LED灯亮:
;显示一个位,用bh选择列用bl保存显示字符的段码
;---------------------------------------------------------------------
disbit:
;位选
moval,bh
movdx,C8255
outdx,al;从C口输出bh,即亮的位置
;数值
moval,bl
movdx,B8255
outdx,al
ret
b.判断开关的电平高低,控制字符的显示:
;从8255的A口获得开关编码器的数值,保存到data段的NUM中
;---------------------------------------------------------------------
getChar:
movdx,A8255
inal,dx
andal,0fh
movds:
[128],al
ret
五、运行结果
控制开关的K8控制自动显示与手动显示,处于自动显示时,点阵屏自动循环显示从第一个字符到第十六个字符;当处于手动显示时,拨动控制开关K3-K0,点阵屏以绿色循环显示对应的字符(程序中预设了16个字符的代码,切换开关则变换字符)。
实验中,由于仪器问题,点阵的扫描速度很慢,可以明显看出点阵自右向左按列扫描,显示的字符难以辨认。
六、总结和体会
本次课程设计,我们小组是三个人,所以本次设计也是我们小组通力合作的一次体现。
本次课程设计的电路连线并不复杂,点阵的扫描和字符的十六进制代码如何表示也并不难理解,难点在于使用哪一个芯片及其使用方法,以及程序的编写与理解。
在理解方面,就展现出了小组合作的优势。
同时,本次课程设计也考验了自信与排错能力:
在实验代码与电路连线皆未出错的情况下,点阵的扫描总是很慢,可以明显的看出是从右向左一列一列地扫描,偶尔会出现正常的扫描速度(能够看到完整的字符),开始我们以为是延时程序的缘故,后来才发现是实验仪器本身的问题。
在此过程中,我们又加深了对于程序的理解。
通过本次课程设计,我们充分体会到了理论与实践相结合的重要性,平常的动手实验就是为课程设计打的基础。
通过本次设计,我们学会了坚持、耐心和努力,学会了小组之间的合作探究,同时,也体会到了基础(无论是理论还是动手实践)的重要意义。
只有夯实基础,才能进行进一步的动手实践,才能进行深入的学习,将自己平时所学应用于实际。
七、程序代码
A8255equ288h;8255A口
B8255equ289h;8255B口
C8255equ28ah;8255C口
K8255equ28bh;8255控制口
datasegment
BUFFDB10H,10H,10H,10H,10H,10H,10H,00H;一
DB02H,42H,42H,42H,42H,42H,02H,00H;二
DB82H,92H,92H,92H,92H,92H,82H,00H;三
DB22H,24H,38H,0F0H,2CH,26H,22H,00H;大
DB02H,04H,18H,0F0H,0CH,06H,02H,00H;人
DB82H,92H,92H,0FEH,92H,92H,82H,00H;王
DB00H,3CH,24H,7FH,24H,3CH,00H,00H;中
DB0FCH,84H,84H,84H,84H,0FCH,00H,00H;口
DB22H,22H,22H,0FEH,22H,22H,22H,00H;土
DB20H,60H,0C0H,0BEH,40H,20H,30H,00H;个
DB44H,58H,60H,0FEH,58H,4CH,44H,00H;木
DB00H,0FCH,0A4H,0A4H,0A4H,0FCH,00H,00H;日
DB00H,02H,22H,22H,22H,0FEH,02H,02H;上
DB20H,20H,20H,0FEH,20H,20H,20H,00H;十
DB00H,03H,01H,7DH,55H,0FFH,54H,7CH;电
DB0FEH,92H,92H,0FEH,92H,92H,0FEH,00H;田
NUMDB00H
dataends
codesegment
assumecs:
code,ds:
data
start:
movax,data
movds,ax
;初始化8255A输入,B口输出,C口输出
;----------------------
movdx,K8255
moval,90h
outdx,al
;---------------------
A:
callgetChar
calldisplay
jmpA
;----------------------
movax,4c00h
int21h
;点阵进行一次扫描显示(从右到左)
;---------------------------------------------------------------------
display:
;选用BX保存要显示的字符信息,BH保存数码管位选信息,BL保存输出字符的LED码
movbx,offsetBUFF
movdi,bx
moval,ds:
[128]
movah,00h
movdl,08h
muldl
adddi,ax
movcx,08h
disp:
movbh,01h
movbl,ds:
[di]
calldisbit
movbl,00h
calldisbit
movbh,02h
movbl,ds:
[di+1]
calldisbit
movbl,00h
calldisbit
movbh,04h
movbl,ds:
[di+2]
calldisbit
movbl,00h
calldisbit
movbh,08h
movbl,ds:
[di+3]
calldisbit
movbl,00h
calldisbit
movbh,10h
movbl,ds:
[di+4]
calldisbit
movbl,00h
calldisbit
movbh,20h
movbl,ds:
[di+5]
calldisbit
movbl,00h
calldisbit
movbh,40h
movbl,ds:
[di+6]
calldisbit
movbl,00h
calldisbit
movbh,80h
movbl,ds:
[di+7]
calldisbit
movbl,00h
calldisbit
loopdisp
ret
;显示一个位,用bh选择列用bl保存显示字符的段码
;---------------------------------------------------------------------
disbit:
;位选
moval,bh
movdx,C8255
outdx,al;从C口输出bh,即亮的位置
;数值
moval,bl
movdx,B8255
outdx,al
ret
;从8255的A口获得开关编码器的数值,保存到data段的NUM中
;---------------------------------------------------------------------
getChar:
movdx,A8255
inal,dx
andal,0fh
movds:
[128],al
ret
;延时子程序;---------------------------------------------------------------------
delay:
pushcx
movcx,0100h
dl1:
pushax
popax
loopdl1
popcx
ret
endstart
codeends