收藏 分销(赏)

北邮数电实验-数码管扫描显示控制器设计与实现.docx

上传人:pc****0 文档编号:6116173 上传时间:2024-11-28 格式:DOCX 页数:16 大小:516.05KB
下载 相关 举报
北邮数电实验-数码管扫描显示控制器设计与实现.docx_第1页
第1页 / 共16页
北邮数电实验-数码管扫描显示控制器设计与实现.docx_第2页
第2页 / 共16页
北邮数电实验-数码管扫描显示控制器设计与实现.docx_第3页
第3页 / 共16页
北邮数电实验-数码管扫描显示控制器设计与实现.docx_第4页
第4页 / 共16页
北邮数电实验-数码管扫描显示控制器设计与实现.docx_第5页
第5页 / 共16页
点击查看更多>>
资源描述

1、数字电路与逻辑设计实验报告北京邮电大学实 验 报 告实验名称:数码管扫描显示控制器设计与实现 学 院:信息与通信工程学院 班 级: 2011XXXXXX 姓 名: XXX 学 号: 日 期:2013年5月 一实验目的1. 掌握VHDL语言的语法规范,掌握时序电路描述方法2. 掌握多个数码管动态扫描显示的原理及设计方法二实验所用仪器及元器件1. 计算机2. 直流稳压电源3. 数字系统与逻辑设计实验开发板三实验任务要求1. 用VHDL语言设计并实现六个数码管串行扫描电路,要求同时显示0,1,2,3,4,5这六个不同的数字图形到六个数码管上,仿真下载验证其功能。2. 用VHDL语言设计并实现六个数码

2、管滚动显示电路。(选作)I. 循环滚动,始终点亮6个数码管,左出右进。状态为:012345123450234501345012450123501234012345II. 向左滚动,用全灭的数码管充右边,直至全部变灭,然后再依次从右边一个一个地点亮。状态为:01234512345X2345XX345XXX45XXXX5XXXXXXXXXXXXXXXX0XXXX01XXX012XX0123X01234012345,其中X表示数码管不显示。四实验设计思路及过程1.实验原理为使得输入控制电路简单且易于实现,采用动态扫描的方式实现设计要求。动态扫描显示需要由两组信号来控制:一组是字段输出口输出的字形代码

3、,用来控制显示的字形,称为段码;另一组是位输出口输出的控制信号,用来选择第几位数码管工作,称为位码。各位数码管的段线并联,段码的输出对各位数码管来说都是相同的。因此在同一时刻如果各位数码管的位选线都处于选通状态的话,6位数码管将显示相同的字符。若要各位数码管能够显示出与本位相应的字符,就必须采用扫描显示方式,即在某一时刻,只让某一位的位选线处于导通状态,而其它各位的位选线处于关闭状态。同时,段线上输出相应位要显示字符的字型码。这样在同一时刻,只有选通的那一位显示出字符,而其它各位则是熄灭的,如此循环下去,就可以使各位数码管显示出将要显示的字符。虽然这些字符是在不同时刻出现的,而且同一时刻,只有

4、一位显示,其它各位熄灭,但由于数码管具有余辉特性和人眼有视觉暂留现象,只要每位数码管显示间隔足够短,给人眼的视觉印象就会是连续稳定地显示。总之,多个数码管动态扫描显示,是将所有数码管的相同段并联在一起,通过选通信号分时控制各个数码管的公共端,循环一次点亮多个数码管,并利用人眼的视觉暂留现象,只要扫描的频率大于50Hz,将看不到闪烁现象。6个数码管则需要50*6=300Hz以上才能看到持续稳定点亮的现象。2.设计思路设计时序电路,选用模值为6的计数器,通过一个3线至6线译码器,产生段码,依次控制6个LED的亮灭,使得某一时刻有且仅有一个LED点亮,同时产生对应的,将点亮的LED数码管赋值显示为相

5、应的数码予以显示。由于扫描频率较高,6位LED数码管序列将显示持续稳定的0至5的数码。3.VHDL代码A.实验任务1实现代码LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY GKY07P14 IS PORT(clk,clear:IN STD_LOGIC; q:OUT STD_LOGIC_VECTOR(6 DOWNTO 0); countout:OUT STD_LOGIC_VECTOR(5 DOWNTO 0);END GKY07P14;ARCHITECTURE behave OF GKY

6、07P14 IS SIGNAL q_temp:STD_LOGIC_VECTOR(6 DOWNTO 0); SIGNAL count:STD_LOGIC_VECTOR(5 DOWNTO 0); SIGNAL cnt:INTEGER RANGE 0 TO 5;BEGIN p1:PROCESS(clk) BEGIN IF(clkEVENT AND clk=1)THEN IF(cnt=5)THEN cnt=0; ELSE cnt=cnt+1; END IF; END IF; END PROCESS; p2:PROCESS(cnt) BEGIN IF(clear=0)THEN countcount=10

7、1111;q_tempcount=110111;q_tempcount=111011;q_tempcount=111101;q_tempcount=111110;q_tempcount=011111;q_temp=1111110; END CASE; END IF; END PROCESS; countout=count; q=q_temp;END behave; 代码说明通过分频器输入产生选通脉冲,控制0至5号LED数码管依次亮灭,同时使用数码显示信号使得数码管显示相应数码。实现时通过连接引入分频信号,通过数据选择器选择数码管。计数器信号触发数据选择器,赋值给位码触发数码管显示数码。最终实现

8、动态扫描显示数字序列。B.实验任务2-I实现代码LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY GKY07P14 IS PORT( clk,clear:IN STD_LOGIC; q:OUT STD_LOGIC_VECTOR(6 DOWNTO 0); countout:OUT STD_LOGIC_VECTOR(5 DOWNTO 0);END GKY07P14;ARCHITECTURE behave OF GKY07P14 IS SIGNAL q_temp:STD_LOGIC_VECT

9、OR(6 DOWNTO 0); SIGNAL count:STD_LOGIC_VECTOR(5 DOWNTO 0); SIGNAL cnt,cnt1:INTEGER RANGE 0 TO 5; SIGNAL tmp:INTEGER RANGE 0 TO 15999; signal clk1:STD_LOGIC;BEGIN p0:PROCESS(clk,clear) BEGIN IF clear=0 THEN tmp=0; ELSIF clkEVENT AND clk=1 THEN IF tmp=15999 THEN tmp=0; ELSE tmp=tmp+1; END IF; END IF;

10、END PROCESS p0; p1:PROCESS(tmp) BEGIN IF clkEVENT AND clk=1 THEN IF tmp1000 THEN clk1=0; ELSE clk1=1; END IF; END IF; END PROCESS p1; p2:PROCESS(clk) BEGIN IF(clkEVENT AND clk=1)THEN IF(cnt=5)THEN cnt=0; ELSE cnt=cnt+1; END IF; END IF; END PROCESS p2; p3:PROCESS(clk1) BEGIN IF(clk1EVENT AND clk1=1)T

11、HEN IF(cnt1=5)THEN cnt1=0; ELSE cnt1=cnt1+1; END IF; END IF; END PROCESS p3; p4:PROCESS(cnt,cnt1) BEGIN IF(clear=0)THEN q_tempq_tempq_tempq_tempq_tempq_tempq_tempq_tempq_tempq_tempq_tempq_tempq_tempq_temp=0000000; END CASE; END IF; END PROCESS p4; q=q_temp; p5:PROCESS(cnt) BEGIN IF(clear=0)THEN coun

12、tcountcountcountcountcountcountcount=111111; END CASE; END IF; END PROCESS p5; countout=count;END behave; 代码说明代码主体和实验任务1中一致,基本思想也一致。为实现移位,关键改动为新增一个计数器,技术周期远远大于扫描周期,这样,在一个大的计数周期内,对于要显示的6位数码进行动态扫描(和实验任务1中相同),显示出6种移位状态中的一种;通过计数器,实现循环移位。C.实验任务2-II实现代码LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD

13、_LOGIC_UNSIGNED.ALL;ENTITY GKY07P14 IS PORT( clk,clear:IN STD_LOGIC; q:OUT STD_LOGIC_VECTOR(6 DOWNTO 0); countout:OUT STD_LOGIC_VECTOR(5 DOWNTO 0);END GKY07P14;ARCHITECTURE behave OF GKY07P14 IS SIGNAL q_temp:STD_LOGIC_VECTOR(6 DOWNTO 0); SIGNAL count:STD_LOGIC_VECTOR(5 DOWNTO 0); SIGNAL cnt,cnt1:IN

14、TEGER RANGE 0 TO 11; SIGNAL tmp:INTEGER RANGE 0 TO 15999; signal clk1:STD_LOGIC;BEGIN p0:PROCESS(clk,clear) BEGIN IF clear=0 THEN tmp=0; ELSIF clkEVENT AND clk=1 THEN IF tmp=15999 THEN tmp=0; ELSE tmp=tmp+1; END IF; END IF; END PROCESS p0; p1:PROCESS(tmp) BEGIN IF clkEVENT AND clk=1 THEN IF tmp1000

15、THEN clk1=0; ELSE clk1=1; END IF; END IF; END PROCESS p1; p2:PROCESS(clk) BEGIN IF(clkEVENT AND clk=1)THEN IF(cnt=11)THEN cnt=0; ELSE cnt=cnt+1; END IF; END IF; END PROCESS p2; p3:PROCESS(clk1) BEGIN IF(clk1EVENT AND clk1=1)THEN IF(cnt1=11)THEN cnt1=0; ELSE cnt1=cnt1+1; END IF; END IF; END PROCESS p

16、3; p4:PROCESS(cnt,cnt1) BEGIN IF(clear=0)THEN q_tempq_tempq_tempq_tempq_tempq_tempq_tempq_temp=0000000; END CASE; END IF; END PROCESS p4; q=q_temp; p5:PROCESS(cnt) BEGIN IF(clear=0)THEN countcountcountcountcountcountcountcount=111111; END CASE; END IF; END PROCESS p5; countout123450-234501-345012-45

17、0123-501234-012345共六个状态.从图中可以清楚地看出这六个状态转移过程中, 发光二极管管脚的变化情况.输入时钟信号后,6个数码管的选通控制端在同一时刻始终保持一个低电平其余高电平,在0-5对应的数码管上输出实验设定的数字并且由地位向高位依次循环移动. 3.实验任务2-II由波形图可以清楚地看到12个状态的波形,当时钟clk变化一些周期之后,波形就转到下一个状态.如图所示.状态转移关系: 012345-12345X-2345XX-345XXX-45XXXX-5XXXXXX-XXXXXX-XXXXX0 -XXXX01-XXX012-XX0123-X01234-012345六故障及问

18、题分析我在课前完成了代码的编写,刚开始时使用枚举法,虽然原理简单易于编写,但代码较为冗长。后来在一位同学的启发下尝试用上述方法编写,代码大为简化。并且在课前仿真,波形都没有问题。但在课上下载时却遇见了问题。第一个没有问题,第二个出现的问题是:能够实现显示数字的左移,但无法同时显示所有的数据,只能显示当前状态下的数码管所显示的数据。出现这种现象,说明时钟频率的选择有问题,同时也解释了为什么仿真时没有问题。因为时钟频率选得太低,所以在人眼看来,数字无法全部显示。通过添加中间变量cnt,最终解决了这个问题。七实验总结与结论经过逻辑分析,编写VHDL代码,然后调试,进行波形仿真,最后下载到实验板实现,

19、一系列工序之后,成功实现了本实验。我深深的感受到进行数字电路实验,理论分析是十分重要的一环,只有逻辑分析透彻无误了,才能用语言进行描述,进而用硬件实现。这次实验让我对VHDL这样一门硬件描述语言有了更加深刻的认识。语言是描述设计者逻辑思想的,有什么样的逻辑思维就会产生什么样的代码,换句话说,逻辑思维错误将直接导致描述错误,进而不能实现数字逻辑。应该着重优化逻辑思维,才能写出优秀的硬件代码。而硬件描述语言的学习,不同于一般编程语言的描述,它没有汇编那样深入硬件最底层,但从硬件抽象出来的逻辑却与硬件密不可分。编写硬件描述代码,不仅要符合基本编程语言的规范,更应该时时刻刻联系实现功能的硬件,理解时序和组合的关系,理解同步和异步的差异,理解进程和信号的流程等等,这样才能使写出的代码效率更高。这学期数字电路实验就这样结束了,我在实验操作能力有所提升的同时也更深的理解了数字电路与逻辑设计的理论知识,也体会到了数字电路的强大功能。第16页

展开阅读全文
部分上传会员的收益排行 01、路***(¥15400+),02、曲****(¥15300+),
03、wei****016(¥13200+),04、大***流(¥12600+),
05、Fis****915(¥4200+),06、h****i(¥4100+),
07、Q**(¥3400+),08、自******点(¥2400+),
09、h*****x(¥1400+),10、c****e(¥1100+),
11、be*****ha(¥800+),12、13********8(¥800+)。
相似文档                                   自信AI助手自信AI助手
搜索标签

当前位置:首页 > 环境建筑 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        获赠5币

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4008-655-100  投诉/维权电话:4009-655-100

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :gzh.png    weibo.png    LOFTER.png 

客服