实验报告 - - 实验七 - 八段数码管显示实验

更新时间:2023-10-06 09:25:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

EDA实验报告 之 实验七 八段数码管显示实验

1、实验目的

1)了解数码管动态显示的原理。 2)了解用总线方式控制数码管显示

2、实验要求:利用实验仪提供的显示电路, 动态显示一行数据.

提示:把显示缓冲区(例如可为60H~65H作为缓冲区)的内容显示出来,当修改显示缓冲区的内容时,可显示修改后的内容(为键盘扫描、显示实验做准备)。

3、实验说明

本实验仪提供了6 位8段码LED显示电路,学生只要按地址输出相应数据,就可以实现对显示器的控制。显示共有6位,用动态方式显示。8位段码、6位位码是由两片74LS374输出。位码经MC1413或ULN2003倒相驱动后,选择相应显示位。

本实验仪中 8位段码输出地址为0X004H,位码输出地址为0X002H。此处X是由KEY/LED CS 决定,参见地址译码。

做键盘和LED实验时,需将KEY/LED CS 接到相应的地址译码上。以便用相应的地址来访问。例如,将KEY/LED CS接到CS0上,则段码地址为08004H,位码地址为08002H。

七段数码管的字型代码表如下表:

a ----- f| |b | | ----- | g | e| |c -----

d 。h

显示字形 g f e d c b a 段码 0 0 1 1 1 1 1 1 3fh 1 0 0 0 0 1 1 0 06h 2 1 0 1 1 0 1 1 5bh 3 1 0 0 1 1 1 1 4fh 4 1 1 0 0 1 1 0 66h 5 1 1 0 1 1 0 1 6dh 6 1 1 1 1 1 0 1 7dh 7 0 0 0 0 1 1 1 07h 8 1 1 1 1 1 1 1 7fh

9 1 1 0 1 1 1 1 6fh A 1 1 1 0 1 1 1 77h b 1 1 1 1 1 0 0 7ch C 0 1 1 1 0 0 1 39h d 1 0 1 1 1 1 0 5eh E 1 1 1 1 0 0 1 79h F 1 1 1 0 0 0 1 71h

4、原理图及连线

5、实验内容

1) 使用仪器、仪表,开发平台型号

本实验用到了WAVE 6000软件平台,电脑一台,LAB6000实验箱,示波器,若干连线,串行数据线。

2) 性能指标、技术要求、思路方案、流程图

5.1 性能指标、技术要求见实验目的和实验要求。

5.2 思路方案:将数据放入显示缓冲区60—65H单元,通过位选信号,段选信号控制数码管显示相应的内容,其中,段选信号由查表得到。为了动态显示富有变化,每一轮显示完毕后,需要改变数据单元的内容。为了数码管显示不抖动,还需要对每一轮数据显示一定的次数,具体见代码。

5.3 流程图:(见下页)

流程图:

主程序:子程序:显示缓冲区内容DISPLAY设置每一轮数据的显示次数初始化显示缓冲区INITIALIZE显示缓冲区内容DISPLAY设置位选信号,初始化显示字节计数器,缓冲区数据地址是改变缓冲区内容CHANGE否延时一段时间DELAY否是否显示完0—F共16个数据给位选信号修改位选信号并压栈否给数码管段码信号这一轮数据是否显示完是总轮数是否显示完是返回

3) 源程序(为了程序看起来更规范和容易理解,最好将各部分功能分离,在主程序中以子程序调用的形式调用相应的子程序)

ORG LJMP ORG

BEGIN:

LCALL DIS:

LCALL LCALL LCALL DJNZ SJMP SJMP

0000H BEGIN 0030H

INITIALIZE ;设置60H--65H单元的初值

DISPLAY ;显示缓冲区单元的数据 CHANGE ;改变缓冲区单元的数据

DELAY ;为了两轮显示间时间间隔久一些 R5,DIS ;是否显示完一遍0-F,是则重新开始 BEGIN ;重新开始 $

;============== DISPLAY: ;===

MOV R6,#40 BEGIN0:

MOV MOV MOV ;*** LOOP:

MOV MOVX

RL PUSH MOV MOV LCALL MOVX LCALL ;***

INC R0 POP A DJNZ R2,LOOP DJNZ R6,BEGIN0 RET

;============== initialize:

mov 60h,#00h mov 61h,#01h

A,#01H R2,#6 R0,#60H

;设置每一轮显示的次数 ;位选通信号

;显示缓冲区只有6个字节单元 ;显示缓冲区单元数据地址

DPTR,#8002H ;位选输出地址 @DPTR,A

A ;修改位信号 A

DPTR,#8004H ;数据输出地址 A,@R0 CHECK ;查表 @DPTR,A DELAY ;显示一个数后稍等一会

;这一轮是否显示完

;总轮数显示40次,是否显示完

mov 62h,#02h mov 63h,#03h mov 64h,#04h mov 65h,#05h

MOV R5,#11 RET

;============== DELAY:

MOV R7,#03H MOV R3,#0FFH LOOPP:

DJNZ R3,$ DJNZ R7,LOOPP RET

;============== CHANGE:

;为了显示0---F,需要调用change子函数11次

MOV R2,#6 ;6次 MOV R0,#60H ;数据地址 LOOP1:

INC @R0 INC R0

DJNZ R2,LOOP1 RET

;============== CHECK:

INC A MOVC A,@A+PC RET

;============== TABLE:

DB 3FH,06H,5BH,4FH,66H DB 6DH,7DH,07H,7FH,6FH DB 77H,7CH,39H,5EH,79H DB 71H

4) 实验步骤,完成情况

4.1 在WAVE 6000中新建文件,并将代码写入文件中,保存为EXPERIMENT7.ASM; 4.2 在WAVE 6000中新建项目,并在模块文件中包含上述EXPERIMENT7.ASM文件,最后保存为EXPERIMENT7.PRG。

4.3 编译程序,按照提示改正错误的地方,直到没有语法错误为止。 4.4 完成上一步后,检查是否有逻辑错误。

4.5 按连线图连好线,经师兄确认后打开电源。

4.6 观察数码管的输出是否正确。如果错误,检查连线,源程序,并修改错误的地方,直到调试出正确的波形为止。

4.7 结果正确后,等师兄检查完毕。然后收拾实验仪器,包括电源线、导线、串口线,示波器等,收拾桌面和凳子。

6、本实验遇到问题及解决方案

6.1 第一次做这个实验的时候,由于没有找到能用的电脑,和实验箱,以至于一直只能处于模拟调试的阶段,所以没有什么进展。

解决方案:俗话说,早起的鸟儿有虫吃,所以呢,以后实验课得早点去,呵呵。

6.2 实验中遇到一个问题:数码管显示的数据很是奇妙,非常诡异,而且复位后显示缓冲区的数据也被改得乱七八糟,着实让人头大。

解决方案:经过仔细(几乎是单步调试了)后,发现,原来是R3在两个不同的地方被误用了,改正后程序就没问题了。这也给我一个教训:用了什么寄存器单元资源,应该做到心中有数。

6.3 数码管显示的时候感觉总是有抖动。

解决方案: 这是程序中delay的延时没有设置适当导致的,经过尝试几个不同的延时数值后,终于得到比较好的显示效果。一点经验:实践是检验真理的唯一标准,做硬件实验更是如此。呵呵。

7、对本实验的改进建议和疑难问题:

7.1 改进建议:

为了增大难度,可以将显示缓冲区改为外部数据存储单元,还可以将显示数据单元的内容增大一些。

7.1 疑难问题:

如何将数码管的显示抖动去除得更好,这是一个问题。除了实验过程中采用的尝试的方法以外,有没有什么科学的计算推理方法呢?这值得思考。

2009-5-6

本文来源:https://www.bwwdw.com/article/svgd.html

Top