数码管扫描显示控制器设计与实现 下载本文

实验七彩灯控制电路的设计与实现

一、实验目的

1.进一步了解时序电路设计方法

2.熟悉状态机的设计方法 二、实验所用仪器及元器件

1、 计算机

2、 直流稳压电源

3、 数字系统与逻辑设计实验开发板 三、实验内容

用VHDL语言设计并实现一个彩灯控制(8个发光二极管)电路,仿真并下载验证其功能。彩灯有两种工作模式,可以通过拨码开关或者按键进行切换。

(1) 单点移动模式:一个点在8个发光二极管上来回的亮 (2) 幕布模式:从中间两个点,同时向两边一次点亮直至全亮,然后再向中间点灭,依次往复

1.用QuartusII图形输入法设计并实现六个数码管串行扫描电路,要求同时显示0,1,2,3,4,5这6个数字图形到六个数码管上,仿真并下载验证其功能。 四、实验原理图及仿真波形分析

1.用QuartusII图形输入法设计并实现六个数码管串行扫描电路,要求同时显示0,1,2,3,4,5这6个数字图形到六个数码管上,仿真并下载验证其功能。 (1)实验设计:

通过用一个74161同步预置计数器实现模6计数,并与一个38译码器连接,实现6路cat选通信号的实现。同时计数器与一片7448相连,实现将2进制数转化为数码管输出。 (2)逻辑图: (3)仿真波形输出

(4)波形输出分析:由于直接从数码管的8个管脚的输出不易于观察输出的数字,故采用通过输入数码显示管的二进制码B[3..1]观察其为从000到101循环输入,说明数码管0到6扫描显示。F[8..1]为数码显示管的8个管脚输出,Q[6..1]为cat控制信号。箭头表示下一个周期循环显示的开始。 2.用QuartusII图形输入法设计并实现6个数码管滚动显示电路。 (1)循环左滚动,始终点亮6个数码管,左进右出。状态为012345-123450-234501-345012-450123-501234-012345 逻辑原理图:

图中256模块为256分频器,其电路原理图如下: 仿真波形输出:

波形分析:为整体显示输出波形整体情况取消每个状态的扫描时间,将原电路图中的256分频器取消,使控制信号直接与74161的时钟信号相连,输出012345-123450-234501-345012-450123-501234-012345的变化过程。同样为方便观察,采用输入数码显示管的二进制码D[3..1]观察以及输入74138译码器的A[3..1]观察波形图,A[3..1]从000到101循环显示,表示cat[6..1]依次控制数码管从左到右显示,当A[3..1]从000到101循环进入由第一个周期下一个周期时输入数码显示管的二进制码D[3..1]由000到101变为由001到101再到000即实现数码显示管由012345到123450的显示,图中箭头部分标出了进入下一个周期的开始。P[8..1]为数码显示管的8个管脚输出。由于该图的第6个周期没有完全显示,故下面给出每个周期变化的截图。

输入74138译码器的A[3..1]从000到101循环第一个周期,cat[6..1]依次控制数码管从左到右显示,输入数码显示管的二进制码D[3..1]从000到101,实现数码显示管012345。P[8..1]为数码显示管的8个管脚输出。

输入74138译码器的A[3..1]从000到101循环第二个周期,cat[6..1]依次控制数码管从左到右显示,输入数码显示管的二进制码D[3..1]从001-010-011-100-101-000,实现数码显示管123450。P[8..1]为数码显示管的8个管脚输出。

输入74138译码器的A[3..1]从000到101循环第三个周期,cat[6..1]依次控制数码管从左到右显示,输入数码显示管的二进制码D[3..1]从010-011-100-101-000-001,实现数码显示管234501。P[8..1]为数码显示管的8个管脚输出。

输入74138译码器的A[3..1]从000到101循环第四个周期,cat[6..1]依次控制数码管从左到右显示,输入数码显示管的二进制码D[3..1]从011-100-101-000-001-010,实现数码显示管345012。P[8..1]为数码显示管的8个管脚输出。

输入74138译码器的A[3..1]从000到101循环第五个周期,cat[6..1]依次控制数码管从左到右显示,输入数码显示管的二进制码D[3..1]从100-101-000-001-010-011,实现数码显示管450123。P[8..1]为数码显示管的8个管脚输出。

输入74138译码器的A[3..1]从000到101循环第六个周期,cat[6..1]依次控制数码管从左到右显示,输入数码显示管的二进制码D[3..1]从101-000-001-010-011-100,实现数码显示管501234。P[8..1]为数码显示管的8个管脚输出。

六个周期后又回到第一个周期的情况,如此反复进行。输入74138译码器的A[3..1]从000到101,cat[6..1]依次控制数码管从左到右显示,输入数码显示管的二进制码D[3..1]从000到101,实现数码显示管012345。P[8..1]为数码显示管的8个管脚输出。

256分频器的作用就是将每一个状态扫描256次,再变化到下一状态,而不至于数码显示管数字变化过快,而无看出变化规律。

(2)向左滚动,用全灭的数码管填充左边,直至全部变灭,然后再依次从右边一个一个点亮。状态为:012345-12345X-2345XX-345XXX-45XXXX-5XXXXX-XXXXXX-XXXXX0-XXXX01-XXX012-XX0123-X01234-012345,其中X表示数码管不显示。

逻辑电路图:

电路图中256模块为256分频器,与(1)中所用的相同,此就不累赘。 输出波形图:

波形分析:由于直接从数码管的8个管脚的输出不易于观察输出的数字,故采用通过输入数码显示管的二进制码D[3..1]观察,同时为整体显示输出波形整体情况取消每个状态的扫描时间,将原电路图中的256分频器取消,使控制信号直接与74161的时钟信号相连。我是通过比较器产生熄灭信号,勃兴显示输出BI端为输入数码管的熄灭信号BIN,由上图可以看出输入74138译码器的A[3..1]从000到101循环第一个周期,cat[6..1]依次控制数码管从左到右显示,在此期间BI为1说明每个数码管都显示,此时输入数码显示管的二进制码D[3..1]为000-001-010-011-100-101,数码管显示输出012345;当A[3..1]从000到101循环第二个周期时,cat[6..1]不变,而BI在A[3..1]为101的时候为零,说明数码管的最后一个管熄灭信号有效,数码管熄灭,此时输入数码显示管的二进制码D[3..1]为001-010-011-100-101-110数码管输出为12345X,当A[3..1]从000到101循环第三个周期时,cat[6..1]不变,而BI在A[3..1]为100和101的时候为零,说明数码管的后两个管熄灭信号有效,数码管熄灭。此时输入数码显示管的二进制码D[3..1]为010-011-100-101-110-111数码管输出为2345XX,最后的两个管子没有显示。(这里说

明一下为什么在第二个周期和第三个周期中数码管的输入端输入会出现110 111这两个情况,这是我利用比较器说出熄灭信号,当输入数码管的二进制码小于110时输出高电平当大于等于110时就输出低电平,熄灭信号有效BI为低电平,使得数码管熄灭)。

波形分析:由上图可以看到当A[3..1]从000到101循环第四个周期时,cat[6..1]不变,而BI在A[3..1]为011、100、101的时候为零,说明数码管的后三个管熄灭信号有效,数码管输出为345XXX,同样第五个周期第六个周期时,BI分别在A[3..1]为010、011、100、101和A[3..1]为001、010、011、100、101时输出低电平,数码管在第五第六个周期分别输出为45XXXX和5XXXXX,箭头标明每个周期的开始位置。 波形分析:由上图可以看到当A[3..1]从000到101循环第七个周期时,cat[6..1]不变,而BI在A[3..1]为00、001、010、011、100、101的时候全为零,说明六个数码管的熄灭信号有效,数码管输出为XXXXXX,同样第八个周期第九个周期时,BI分别在A[3..1]为101和A[3..1]为100、101时输出高电平,数码管在第七第八个周期分

别输出为XXXXX0和XXXX01,箭头标明每个周期的开始位置。

波形分析:由上图可以看到当A[3..1]从000到101循环第十第十一第十二周期时,cat[6..1]不变,而BI分别在A[3..1]为000、001、010和000、001和000输出低电平,由BI为高电平部分D[3..1]的二进制码决定数码管输出的数字分别为XXX012、XX0123、X01234(箭头表示每个周期的开始位置)

波形分析:由上图可以看出A[3..1]从000到101循环到了13个周期,波形开始重复第一个周期的情况,从而实现了数码管从012345-12345X-2345XX-345XXX-45XXXX-5XXXXX-XXXXXX-XXXXX0-XXXX01-XXX012-XX0123-X01234-012345循环显示。 五、故障及问题分析

问题一:如何实现能预置的模六计数器?

解决问题及分析:已有的带预置功能的都是模十和模十六等模值较大的计数器,要想实现模值小的计数器首先需要通过预置法使模值大的变为模值小的,同时还用利用预置端在需要的时候实现预置功能,预置不同的值,这就意味着有两个信号控制预置端同时在不同信号有效时选择不同的预置值,故采用数据选择器,使得不同预置信号有效时选择不同信号输出到预置端实现不同预置值。

问题二:循环左滚动,左出右进,从012345直接跳至123450,变化太快,无法看清 解决方法及分析:在每个状态进行多次扫描,用分频器使控制信号变化变慢。 问题三:在实现左滚动的基础上如何进行全灭填充?

解决问题及分析:我是利用预置方法实现左出右进,要想继续沿用这个思路来熄灭数码管就遇到困难,故采用比较器将计数器输出与预设值进行比较,将比较的输出作为熄灭控制信号,当比预设值小的时候输出1不熄灭,比预设值大的时候输出0熄灭。 六、总结和结论

总结:实验电路越来越复杂,实验讲究精益求精,其实要想实现一个功能还是比较容易的,但是因为一个小小的功能耗费许多的元件这显然是不考虑实际的,这样的设计没有意义,设计电路就是要用尽量少的元件完成最完善的功能。在设计完电路后还会不断地发现新的问题,这主要是设计的时候考虑得不够全面造成。实验就是要不断探索找到最优的办法,这才是的实验分外的有意思,深深地吸引着我。

结论:这次实验做完,让我明白电路的初步设计是很重要的,不要急于将想到的方法进行计算机仿真,应多想想将每一步都考虑好。这次实验我就是经过了详细的设计,将个方面全面考虑过后,然后通过实验仿真很快就得到了正确的结果。当然也有些跟原有想法不一样的地方,主要是器件本身的问题稍做修改基本都没有问题。