数码闪烁显示器的设计与功能实现.docx
《数码闪烁显示器的设计与功能实现.docx》由会员分享,可在线阅读,更多相关《数码闪烁显示器的设计与功能实现.docx(25页珍藏版)》请在冰点文库上搜索。
数码闪烁显示器的设计与功能实现
合肥学院
计算机科学与技术系
课程设计报告
2008~2009学年第一学期
课程
微型计算机原理与接口技术
课程设计名称
数码闪烁显示器
学生姓名
贾琪
学号
0604032006
专业班级
网工
(2)班
指导教师
张向东
2009年1月
数码闪烁显示器
一、题义分析及解决方案
1.题义需求分析
1)设计内容
编写一个程序,以逻辑开关置数,从八个七段LED数码管的输出,使四个LED数码管依次闪烁左移显示从输入口的逻辑开关读入的四位数,闪烁频率为每秒一次。
改进后功能为自右向左八个LED数码管依次闪烁左移显示从输入口的逻辑开关读入的四位数。
2)设计分析
根据设计内容的要求可分析得出:
即要求从逻辑开关读入的四位数字,依次左移从四个LED数码管上显示出来,而且显示的时间间隔要求为一秒。
可以选用8255A作为8位数字显示电路和微处理器的接口芯片。
2.问题的提出及解决方法
1)硬件部分
提出问题
首先是输入和输出问题,输入该选什么?
选键盘还是逻辑开关?
为什么?
其次是输入接口和输出接口的选择。
为什么选择8255A而不选择8279或者其他的芯片。
解答问题
首先输入设备选择的是逻辑开关而没有选择小键盘的原因如下:
表1-1比较1
器件名称
特点
小键盘
键盘(Keyboard)是常用的输入设备,键盘通过一根螺旋形的电缆与主机相联,该电缆有屏蔽,其内芯有电源(+5V)、地线和两根双向信号线,电缆长度约为183cm,键盘内还有一单片微处理器,负责控制整个键盘的工作,故结构相对复杂,一般价格为50多元。
逻辑开关
只有两种状态,开关闭合表示输入0,开关断开表示输入1,4位开关可以置0~15的数。
结构简单,使用方便,价格便宜,高电平:
+5V、低电平:
0V
经过比较得知:
我们选择数字开关电路作为输入设备较方便。
其次本课题选择的输出设备是七段LED显示器,而没有选择LCD,原因如下:
表1-2比较2
LED
与LCD相比,LED在亮度,功耗可视角度和刷新速率等方面更具有优势,其最显著的特点是使用寿命长,光电转换效能高,绿色环保。
LCD
LCD占用空间小,功耗低,低辐射,能降低视觉疲劳,但会出现闪烁现象。
2)软件部分
初始化8255A的端口地址设置初值,8255A是一种通用可编程并行I/O接口芯片,可由程序来改变其功能,通用性强,使用灵活,通过8255A,CPU可直接同外设相连接,是应用最广
的并行I/O接口芯片。
二、硬件设计
1.8255芯片:
并行输入/输出接口。
1)8255引脚图:
8255是可编程并行接口,内部有3个相互独立的8位数据端口,即A口、B口和C口。
三个端口都可以作为输入端口或输出端口。
A口有三种工作方式:
即方式0、方式1和方式2,而B口只能工作在方式0或方式1下,而C口通常作为联络信号使用。
8255的工作只有当片选CS有效时才能进行。
而控制逻辑端口实现对其他端口的控制。
2)CPU接口(数据总线缓冲器和读/写控制逻辑)
数据总线缓冲器
这是一个8位双向三态缓冲器,三态是由读/写控制逻辑控制的。
这个缓冲器是8255A与CPU数据总线的接口。
所有数据的输入/输出,以及CPU用输出指令向8255A发出的控制字和用输入指令从8255A读入的外设状态信息,都是通过这个缓冲器传递的。
读/写控制逻辑
它与CPU的6根控制线相连,控制8255A内部的各种操作。
控制线RESET用来使8255A复位。
和地址线A1及A0用于芯片选择和通道寻址。
控制线用来决定8位内部和外部数据总线上信息传送的方向,即控制把CPU的控制命令或输出的数据送到相应的通道,或把状态信息或输入数据送到CPU。
8255A的读/写控制逻辑的作用,是从CPU的地址和控制总线上接受输入的信号,转变成各种命令送到A组或B组控制电路进行相应的操作。
3)8255A的引脚信号
与外设相连的
PA7~PA0:
A口数据信号线。
PB7~PB0:
B口数据信号线。
PC7~PC0:
C口数据信号线。
与CPU相连的
RESET:
复位信号。
当此信号来时,所有寄存器都被清除。
同时三个数据端口被自动置为输入端口。
D7~D0:
它们是8255A的数据线和系统总线相连。
CS:
片选信号。
在系统中,一般根据全部接口芯片来分配若于低位地址(比如A5、A4、A3)组成各种芯片选择码,当这几位地址组成某一个低电平,于8255A被选中。
只有当有效时,读信号写才对8255进行读写。
RD:
读信号。
当此信号有效时,CPU可从8255A中读取数据。
WR:
写信号。
当此信号有效时,CPU可向8255A中写入数据。
A1、A0:
端口选择信号。
8255A内部有3个数据端口和1个控制端口,共4个端口。
规定当A1、A0:
为00时,选中A端口;为01时,选中B端口;为10时,选中C端口;为11时,选中控制口。
8255的基本操作:
图2-18255的基本操作
2.8255A的技术参数
表2-18255A的技术参数
标识符
最小
最大
测试条件
输入低电平(VIL)
-0.5V
0.8V
输入高电平(VIH)
2.0V
5V
输出低电平(VOL)DB
0.45V
IOL=2.5mA
输出低电平(VOL)PER
0.45V
IOL=1.7mA
输出高电平(VOH)DB
2.4V
IOH=-400μA
输出高电平(VOH)PER
2.4V
IOH=-200μA
驱动电流
-1.0mA
-4.0mA
REXT=750Ω,VEXT=1.5V
供应电流
120mA
IIL(INPUTLOADCURRENT
±10μA
VIN=0V~5V
IOFL(Outputfloatleakage
±10μA
VOUT=0.45~5V
其中PER为peripheralport的缩写,
输入最低电压:
min-0.5V,max0.8V,输入最高电压:
2.0V。
输出最低电压:
0.45V
输出最高电压:
2.4V。
8255A的方式控制字:
图2-28255A的方式控制字
1)方式0的工作特点
这种方式通常不用联络信号,不使用中断,三个通道中的每一个都有可以由程序选定作为输入或输出。
其功能为:
①两个8位通道:
通道A、B。
两个四位通道:
通道C高4位和低四位;
②任何一个通道可以作输入/输出;
③输出是锁存的;
④输入是不锁存的;
⑤在方式0时各个通道的输入/输出可有16种不同的组合。
2)选择器件LED
LED在本设计中的作用
LED发光二级管(Light-EmittingDiode),在本设计中采用7段数字发光二级管,做为终端显示。
LED功能分析
物理构造:
LED发光二级管,采用砷化镓、镓铝砷、和磷化镓等材料制成,其内部结构为一个PN结,具有单向导电性。
工作原理:
当在发光二极管PN结上加正向电压时,PN结势垒降低,载流子的扩散运动大于漂移运动,致使P区的空穴注入到N区,N区的电子注入到P区,这样相互注入的空穴与电子相遇后会产生复合,复合时产生的能量大部分以光的形式出现。
数字成像:
将七个发光管进行组合,排列成数字图形8,再根据需要控制七个管的亮与灭,即可显示出定义数字。
LED技术参数
发光二极管的压降一般为1.5~2.0V,其工作电流一般取10~20mA为宜。
发光二极管的发光颜色有:
红色光、黄色光、绿色光、红外光等。
发光二极管应用电路有四种,即直流驱动电路、交流驱动电路、脉冲驱动电路、变色发光驱动电路。
LED显示管段选码编码表
表2-2LED显示管段选码编码表
数字
DP
g
f
e
d
c
b
a
二进制编码(字形)
0
0
0
1
1
1
1
1
1
3FH
1
0
0
0
0
0
0
1
1
03H
2
0
1
0
1
1
0
1
1
5BH
3
0
1
0
0
1
1
1
1
4FH
4
0
1
1
0
0
1
1
0
66H
5
0
1
1
0
1
1
0
1
6DH
6
0
1
1
1
1
1
0
1
7DH
7
0
0
0
0
0
1
1
1
07H
8
0
1
1
1
1
1
1
1
7FH
9
0
1
1
0
1
1
1
1
6FH
A
0
1
1
1
0
1
1
1
77H
B
0
1
1
1
1
1
0
0
7CH
C
0
0
1
1
1
0
0
1
69H
D
0
1
0
1
1
1
1
0
5EH
E
0
1
1
1
1
0
0
1
79H
F
0
1
1
1
0
0
0
1
71H
LED数字显示原理:
如下图为LED数码管及其框图
图2-3LED数字显示原理
上面两图分别为外形图和原理图,当七段数码管点亮其中几段可显示数字和简单的西文字符,将七段数码管负极连接到一起称为公共端,而发光二极管的正极则分别由引脚引出,便于控制哪个发光二极管点亮,在右图中如果在COM端接低电平,而在其他引出线上施加不同的电平,则对高电平的发光二极管就会点亮,由于将8个发光二极管负极全部连接在一起,称为共阴极数码管,还有将8个发光二极管的正极连接在一起,故称之为共阳极数码管,
本次实验用的数码管需动态扫描显示,其接口电路将所有数码管的笔画控制段与a~h同名端连在一起,接到一个并行端口,每个公共极COM端由独立的I/O线控制,CPU向字模输出口送出字形码时,所有数码管接收到相同的字形码,究竟哪个数码管显示,取决于每个LED的COM端,所谓动态扫描,就是显示一位信息时,其他位不能显示,必须采用分时方法,轮流控制COM端。
3.开关
1)开关的作用:
本次设计需要用八位开关置数,故要用到开关,输入0时,开关闭合,输入1时,开关断开。
2)开关功能的分析:
如图所示,开关未合时,与5V电压相连,输入1,当合上之后,开关就将A口接地,也就输入为0,4位开关可以置0~15的数。
3)逻辑开关及其编码
编码
数字
编码
数字
0000
0
1000
8
0001
1
1001
9
0010
2
1010
A
0011
3
1011
B
0100
4
1100
C
0101
5
1101
D
0110
6
1110
E
0111
7
1111
F
表2-3逻辑开关及其编码
图2-4 8路二进制开关
开关高电平:
+5V、低电平:
0V
4.硬件总逻辑图及其说明
图2-5硬件总逻辑图及其说明
三、控制程序设计
1.控制程序设计思路说明
本实验是利用控制程序通过改变外接开关控制量来控制灯的闪烁量及闪烁次序,8255A设置为方式0,因此关键在于通过8255A将PC口所连接的开关控制写入8255A做初值。
在实验中8255A的PA和PB口都用做输出,PC口用作输入数据,同开关引脚相连,提供数据输入;PA口用作段选码,同LED数码管段选码(JP42)引脚相连提供段驱动器的7段代码信息;PB口用作位选码,同LED数码管位选码相连(JP41),提供数位驱动器的选择信号.
2.程序流程图
开始
设置8255工作方式:
C口输入,A、B口输出
等待输入
判断PC6是否为1N
Y
判断PC7是否为1N
Y
开始输入个位数
N
判断PC4是否为1,PC5是否为0
Y
个位数输入完毕,输入十位数
N
判断PC4是否为1,PC5是否为1
Y
十位数输入完毕,输入百位数
N
判断PC4是否为0,PC5是否为1
Y
百位数输入完毕,输入千位数
N
判断PC4是否为0,PC5是否为0
Y
等待输出
N
判断PC7是否为1
Y
输入完毕,显示输出
N
判断PC6是否为0
Y
寄存器清零,等待输入
结束
图3-1硬件逻辑图
3.控制程序
.MODELTINY
PCIBAR3EQU1CH;8位I/O空间基地址(它就是实验仪的基地址,也为DMA&32BITRAM板卡上的8237提供基地址)
Vendor_IDEQU10EBH;厂商ID号
Device_IDEQU8376;设备ID号
.STACK100
.DATA
ssegcodedb00111111b;0
db00000110b;1
db01011011b;2
db01001111b;3
db01100110b;4
db01101101b;5
db01111101b;6
db00000111b;7
db01111111b;8
db01101111b;9
db01110111b;A
db01111100b;b
db00111001b;C
db01011110b;d
db01111001b;E
db01110001b;F
IO_Bit8_BaseAddressDW?
msg0DB'BIOS不支持访问PCI$'
msg1DB'找不到StarPCI9052板卡$'
msg2DB'读8位I/O空间基地址时出错$'
COM_ADDDW00F3H;控制口偏移量
PA_ADDDW00F0H;PA口偏移量
PB_ADDDW00F1H;PB口偏移量
PC_ADDDW00F2H;PC口偏移量
.code
start:
movax,@data
movds,ax
nop
callinitpci
callmodifyaddress;根据PCI提供的基地址,将偏移地址转化为实地址
movdx,com_add;8255控制端口地址,(DX)=34F3
moval,89h;(AL)=89H=10001001B:
设置8255的工作方式:
A口、B口均用于输出且都工作于方式0,C口用于输入。
outdx,al
;读取个位数:
reset1:
;若PC4=0,循环等待
movdx,pc_add
inal,dx
testal,10H;开关量是否为:
00010000
jzreset1
andal,0fh;屏蔽高四位
movbx,offsetssegcode
xlat;字节转换指令
mov[si],al
;读取十位数:
reset2:
;若PC4=1,循环等待
movdx,pc_add
inal,dx
testal,20H;开关量是否为:
00110000
jzreset2
andal,0fh;屏蔽高四位
movbx,offsetssegcode
xlat;字节转换指令
mov[si+1],al
;读取百位数:
reset3:
;若PC4=0,循环等待
movdx,pc_add
inal,dx
movbl,al
testal,10h;开关量是否为:
00100000
jnzreset3
moval,bl
andal,0fh;屏蔽高四位
movbx,offsetssegcode
xlat;字节转换指令
mov[si+2],al
;读取千位数:
reset4:
;若PC4=1,循环等待
movdx,pc_add
inal,dx
movbl,al
testal,20H
jnzreset4
moval,bl
andal,0fh
movbx,offsetssegcode
xlat
mov[si+3],al
movah,11111110b;;(AH)=11111110B,用于位码选择,先从最右边显示
disp1:
movdx,pc_add
inal,dx
testal,40h
jzreset1
disp2:
;内循环,用于同时显示四位数
movbl,ah;BL=11111110B
rolah,1
movbh,ah;BH=11111101B
movcx,80h
LED:
moval,[si]
movdx,pa_add
outdx,al
moval,bl
movdx,pb_add
outdx,al
calldelay1
moval,[si+1]
movdx,pa_add
outdx,al
moval,bh
movdx,pb_add
outdx,al
calldelay1
pushbx
moval,[si+2]
movdx,pa_add
outdx,al
rolbh,1
moval,bh
movdx,pb_add
outdx,al
calldelay1
jmpQi9
disp3:
jmpdisp1;辅助跳转
Qi9:
moval,[si+3]
movdx,pa_add
outdx,al
rolbh,1
moval,bh
movdx,pb_add
outdx,al
calldelay1
popbx
deccx
jnzLED
;左移延迟时间选择
movdx,pc_add
inal,dx
testal,80h
jzQi5
calldelay
jmpQi1
Qi5:
calldelay2
Qi1:
loopdisp3
delayproc
pushax
movah,0ffh
movdx,1000
int21h
popax
delayendp
delay2proc
pushax
movah,0ffh
movdx,500
int21h
popax
delay2endp
delay1proc
pushcx
pushax
movcx,6000h;用于显示延时
lop:
looplop
;刷新
moval,0ffh;(AL)=11111111B
movdx,pb_add;通过8255A的B口(用于位选),控制哪个灯显示
outdx,al
popax
popcx
ret
delay1endp
InitPCIPROCNEAR
MOVAH,00H
MOVAL,03H
INT10H;清屏
MOVAH,0B1H
MOVAL,01H
INT1AH
CMPAH,0
JZInitPCI2
LEADX,msg0
InitPCI1:
MOVAH,09H
INT21H
JMPExit
InitPCI2:
MOVAH,0B1H
MOVAL,02H
MOVCX,Device_ID
MOVDX,Vendor_ID
MOVSI,0
INT1AH
JNCInitPCI3;是否存在StarPCI9052板卡
LEADX,msg1
JMPInitPCI1
InitPCI3:
MOVDI,PCIBAR3
MOVAH,0B1H
MOVAL,09H
INT1AH;读取该卡PCI9052基地址
JNCInitPCI4
LEADX,msg2
JMPInitPCI1
InitPCI4:
ANDCX,0FFFCH
MOVIO_Bit8_BaseAddress,CX
RET
InitPCIENDP
ModifyAddressPROCNEAR
ADDCOM_ADD,CX
ADDPA_ADD,CX
ADDPB_ADD,CX
ADDPC_ADD,CX
RET
ModifyAddressENDP
Exit:
MOVAH,4CH
INT21H
ENDSTART
四、上机调试过程
1.硬件
按照预习报告上的硬件总逻辑图接线,注意输入线与位选择线不能接反,否则显示在LED显示器上数字会倒置,连线松动常导致LED显示器上显示不出实验结果,所以硬件调试时一定要确保连线的紧度。
8255A的片选线CS8255接线路板上DRirer的CS2,8255的PB口和PA口接LED的位选和段选,本实验所用的硬件主要是实验箱及其集成的两个四位LED显示器。
共有四个七段LED显示器,采用的是共阴极接法,七段LED的共阴极接地,CE端接低电平,七段LED的阳极接到八个模拟开关上。
改变开关量,则七段LED显示出相应的数字,硬件调试成功。
2.软件调试
软件调试上一开始用了汇编语言的编译环境,后来用了数据段,并将各个端口的地址定义成常量在数据段中,数码转换表的定义也放在了数据段中,编译成功。
3.联机调试
程序控制中的逻辑判断有误导致执行控制程序时只能显示初值,从而使得缓冲区中的数据没有改变。
先连接紧硬件连线,然后不断地改变逻辑判断语句,针对七段LED显示器上的错误数字,对照数码转换表调整逻辑语句,直到七段LED显示出了正确的结果,调试成功。
4.调试结果及问题的提出
数码管显示数字不对,经检查是实验箱上的逻辑开关PC1有问题。
五、设计结果分析及问题讨论
1.课程设计结果及分析
1)课程设计结果:
通过在八位开关上置数,实现在LED上的自左向右显示,显示间隔为一秒。
然后在老师的要求下,增加了实现自右向左和显示四位数的功能。
改变开关的置数,实现输入模拟量的改变,七段LED显示管显示的数字随之改变,最小值为0,最大值为F;8255A通过获取输入模拟量的值,然后通过译码器和锁存器将之转换成数字量,并通过七段LED显示管显示出来;四位七段LED采用动态刷新显示方式;程序中用SI指向显示缓冲区,以寄存器间接访问的方式操作数据,节约了程序运行时间。
2)设计结果分析:
8255A通过获取输入模拟量的值,然后通过译码器和锁存器将之转换成数字量,并通过七段LED显示管显示出来
2.问题讨论
1)输入问题:
实验中把PC7、PC6、PC5、PC4设置为控制条件,首先将PC6、PC7置1,PC4、PC5置0,处