数码管扫描显示控制器设计与实现北京邮电大学数字电路实验报告.docx

上传人:b****2 文档编号:23237940 上传时间:2023-05-15 格式:DOCX 页数:10 大小:92.63KB
下载 相关 举报
数码管扫描显示控制器设计与实现北京邮电大学数字电路实验报告.docx_第1页
第1页 / 共10页
数码管扫描显示控制器设计与实现北京邮电大学数字电路实验报告.docx_第2页
第2页 / 共10页
数码管扫描显示控制器设计与实现北京邮电大学数字电路实验报告.docx_第3页
第3页 / 共10页
数码管扫描显示控制器设计与实现北京邮电大学数字电路实验报告.docx_第4页
第4页 / 共10页
数码管扫描显示控制器设计与实现北京邮电大学数字电路实验报告.docx_第5页
第5页 / 共10页
点击查看更多>>
下载资源
资源描述

数码管扫描显示控制器设计与实现北京邮电大学数字电路实验报告.docx

《数码管扫描显示控制器设计与实现北京邮电大学数字电路实验报告.docx》由会员分享,可在线阅读,更多相关《数码管扫描显示控制器设计与实现北京邮电大学数字电路实验报告.docx(10页珍藏版)》请在冰豆网上搜索。

数码管扫描显示控制器设计与实现北京邮电大学数字电路实验报告.docx

数码管扫描显示控制器设计与实现北京邮电大学数字电路实验报告

北京邮电大学

 

实验报告

院:

信息与通信工程学院

级:

2010211123

名:

XXX

号:

XXXXXXXX

期:

2012年4月20日

一•实验目的3

二•实验所用仪器及元器件3

三•实验任务要求3

四•实验设计思路及过程3

1.实验原理3

2.设计思路4

3.VHDL代码4

五•仿真波形及分析8

1.仿真波形8

2.波形分析9

六•故障及问题分析9

1.频率设置问题9

2.触发问题10

七•本实验总结与结论10

八•学期总结10

 

一.实验目的

1.掌握VHDL语言的语法规范,掌握时序电路描述方法

2.

掌握多个数码管动态扫描显示的原理及设计方法

1.计算机

2.直流稳压电源

3.数字系统与逻辑设计实验开发板

三.实验任务要求

用VHDL语言设计并实现六个数码管串行扫描电路,要求同时显示

0,1,2,3,4,5这六个不同的数字图形到六个数码管上,仿真下载验证其功能。

四.实验设计思路及过程

1.实验原理

为使得输入控制电路简单且易于实现,采用动态扫描的方式实现设计要求。

动态扫描显示需要由两组信号来控制:

一组是字段输出口输出的字形代码,用来控制显示的字形,称为段码;另一组是位输出口输出的控制信号,用来选择第几位数码管工作,称为位码。

各位数码管的段线并联,段码的输出对各位数码管来说都是相同的。

因此

在同一时刻如果各位数码管的位选线都处于选通状态的话,6位数码管将显示

第3页

相同的字符。

若要各位数码管能够显示出与本位相应的字符,就必须采用扫描显示方式,即在某一时刻,只让某一位的位选线处于导通状态,而其它各位的位选线处于关闭状态。

同时,段线上输出相应位要显示字符的字型码。

这样在同一时刻,只有选通的那一位显示出字符,而其它各位则是熄灭的,如此循环下去,就可以使各位数码管显示出将要显示的字符。

虽然这些字符是在不同时刻出现的,而且同一时刻,只有一位显示,其它

各位熄灭,但由于数码管具有余辉特性和人眼有视觉暂留现象,只要每位数码

管显示间隔足够短,给人眼的视觉印象就会是连续稳定地显示。

总之,多个数码管动态扫描显示,是将所有数码管的相同段并联在一起,

通过选通信号分时控制各个数码管的公共端,循环一次点亮多个数码管,并利

用人眼的视觉暂留现象,只要扫描的频率大于50Hz,将看不到闪烁现象。

6个

数码管则需要50*6=300Hz以上才能看到持续稳定点亮的现象。

2.设计思路

设计时序电路,输入时钟经过一个分频器,产生2kHz的扫描信号作为时

钟,驱动计数器工作。

选用模值为6的计数器,通过一个6路的数据分配器,产生段码,依次控制6个LED的亮灭,使得某一时刻有且仅有一个LED点亮,同时产生对应的,将点亮的LED数码管赋值显示为相应的数码予以显示。

由于扫描频率较高,6位LED数码管序列将显示持续稳定的0至5的数码。

3.VHDL代码

①实现代码

libraryieee;

useieee.std_logic_1164.all;

useieee.std_logic_unsigned.all;

 

entitytest1201is

//这是第十二个实验,test1201为文件名

 

//定义三个端口,一个时钟输入,一个控

port(clk_in:

instd」ogic;

 

//定义三个临时信号

//计数值从0到149999

//cat控制信号的临时信号

//上升沿有效

//25000个周期为一个周期,实

//现1KHZ分频的功能。

0-249

//99时第一个数码管亮

//25000-49999时第二个数码管亮

//以下依此类推

cat:

outstd_logic_vector(5downto0);//制哪个数码管工作的cat控制信号,

a_out:

outstd_logic_vector(6downto0));//个控制数码管上的哪些灯亮

endtest1201;

architectureaoftest1201is

signaltmp:

std」ogic_vector(6downto0);

signalcnt:

integerrange0to149999;

signalcat_tmp:

std_logic_vector(5downto0);begin

process(clk_in)

begin

if(clk_in'eventandclk_in='1')then

ifcnt=24999then

cat_tmp<="011111";

cnt<=cnt+1;

elsifcnt=49999then

cat_tmp<="101111";

cnt<=cnt+1;

elsifcnt=74999then

cat_tmp<="110111";cnt<=cnt+1;

elsifcnt=99999then

cat_tmp<="111011";

cnt<=cnt+1;

elsifcnt=124999thencat_tmpv="111101";cnt<=cnt+1;

elsifcnt=149999thencat_tmp<="111110";

cnt<=0;

elsecnt<=cnt+1;

endif;

endif;

 

casecat_tmpis

when"011111"=>tmp<="1111110";

when"101111"=>tmp<="0110000";

when"110111"=>tmp<="1101101";

when"111011"=>tmp<="1111001";

when"111101"=>tmp<="0110011";

when"111110"=>tmp<="1011011";

whenothers=>tmpv="0000000";

endcase;

endprocess;

cat<=cat_tmp;

a_out<=tmp;

enda;

//根据cat_tmp来控制哪个数码管工作

//第一个数码管显示0•需要abcdef亮//第二个数码管显示1,bc亮

//以下依此类推

②代码说明

通过分频器输入产生选通脉冲,控制0至5号LED数码管依次亮灭,同时使用数

码显示信号使得数码管显示相应数码。

实现时通过连接引入分频信号,通过数据选择器选择数码管。

计数器信号触发数据选择器,赋值给位码触发数码管显示数码。

最终实现动态扫描显示数字序列。

 

五.仿真波形及分析

1.仿真波形

 

2.波形分析

由波形可见,随着时钟模六计数的不断重复,0至5号LED数码管依次

打开,其余管熄灭,同时,数码管显示数字从0至5依次出现,两者保持同

步,即n号管亮时显示的数码为n。

具体来说catO为低电平时第一个数码管应该显示0,即abcdef为高电平,亮,g为低电平灭;catl为低电平时,第一个数码管应该显示1,即bc为高电平亮,其余为低电平灭;依此类推。

这样每计数6次循环一次,可知仿真结果正确。

当扫描速度很快时,人眼将能看到持续稳定的0至5号数码显示。

在实验室实际测试时,下载到电路板测试成功,完成实验任务。

6.故障及问题分析

1.频率设置问题

当频率设置过高时,计数周期将大大增加,每个周期内的扫描次数也增加,但

考虑到人眼的分辨能力,频率只需大于300Hz即可,过大将增大系统开销,故采用

1kHz分频器。

2•触发问题

刚开始编写代码时,没有考虑到下载到实验板的问题,没有设置分频电路,而

且cat控制端也没有设置为自动分为六路,而是把它做成了6个输入端。

后来想到

如果要下载到实验板上时不可能靠手动去扳动开关让其控制数码管的工作与否。

于是想到实验板上给出的elk是50MHZ,结合人眼的视觉暂留效应,最后将频率定为1KH;。

设置了一个ent信号用来计数,当cnt=24999时,即elk_in有25000个上升沿时,cat0为低电平,其余为高电平;当cnt=49999时,即clk_in有50000个上升沿后,catl为低电平,其余为高电平;依此类推。

于是就实现了1个50MHz的信号

分成六路1KHz的时钟信号。

然后根据每个数码管需要显示的数字来进行赋值。

7.本实验总结与结论

1.经过逻辑分析,编写VHDL代码,然后调试,进行波形仿真,最后下载到实验板实现,一系列工序之后,成功实现了本实验要求。

2•进行数字电路实验,理论分析是十分重要的一环,只有逻辑分析透彻无误了,才能

用语言进行描述,进而用硬件实现。

这次实验让我对VHDL这样一门硬件描述语言有

了更加深刻的认识。

语言是描述设计者逻辑思想的,有什么样的逻辑思维就会产生什么样的代码,换句话说,逻辑思维错误将直接导致描述错误,进而不能实现数字逻辑。

应该着重优化逻辑思维,才能写出优秀的硬件代码。

3•硬件描述语言的学习,不同于一般编程语言的描述,它没有汇编那样深入硬件最底层,但从硬件抽象出来的逻辑却与硬件密不可分。

编写硬件描述代码,不仅要符合基本编程语言的规范,更应该时时刻刻联系实现功能的硬件,理解时序和组合的关系,理解同步和异步的差异,理解进程和信号的流程等等,这样才能使写出的代码效率更高。

8.本课程总结

1.这学期开始了数字电路与逻辑设计课程,从理论课堂学习基本设计理论到实验课动

测试数字电路参数、编写VHDL代码实现逻辑功能,我对数字电路设计与实现的基本思想方法有了初步的了解,为以后进一步的学习和应用到通信等系统打下了扎实的基础。

2.数字电路与逻辑设计是一门很有用的学科,就像袁老师说的在当今社会书店课本上

得内容已经远远不能满足现在的需求,应运而生的类似quartus的软件发挥着越来越

重要的作用。

在数字电路应用日趋广泛的今天,学习基本数字电路理论和实现方法有十分重要的意义,实验课开始VHDL编程也是很有意义的。

理论分析有助于优化和提升逻辑思维能力,动手操作有利于锻炼实践能力。

这两方面的训练都是很有益处的。

经过一个学期的实验课程的学习我最大的收获就是会初步使用quartus软件进行

VHDL代码的编写并进行波形仿真和下载演示,这虽然是一个简单的入门,但却打下了一个很好的基础,为将来进行更大规模的设计做铺垫。

3.本学期做实验时出现过一些困难,有的在自己独立思考后顺利解决,而有的则通过

询问老师和同学得到解答。

还记得遇到的第一个问题就是process的敏感信号列表的

问题。

最初编程时没有把所有的输入信号全都写在敏感信号列表中,导致时钟信号变化时输出波形没有变化,后来通过看书得以解决这个问题。

还有一个是在做分频器时开始是写了两个进程,第一个进程实现分频功能,第二个进程实现调占空比的功能。

但是后来发现这样编写会出现毛刺,原因是两个进程是并行的,其中有一个进程是逻辑电路会出现毛刺。

将两个进程合成一个进程后得以解决毛刺问题。

4.最后写一点关于这门课程的建议:

一个是延长课时,感觉现在上完了课但是只是一个很初步的入门,我们还有很长的路要走,还有很多的东西需要学习。

建议增加这么实验课的课时,让大家能学得更透彻更深入。

再一个是能布置一些大一点的作业,这学期完成的实验都是一些很小的实验,代码比较短,逻辑关系比较简单。

希望可以有更有难度的大作业,这样对能力有更好的锻炼。

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

当前位置:首页 > 法律文书 > 调解书

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

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