数码管扫描显示控制器设计与实现——北京邮电数字电路实验报告.doc_第1页
数码管扫描显示控制器设计与实现——北京邮电数字电路实验报告.doc_第2页
数码管扫描显示控制器设计与实现——北京邮电数字电路实验报告.doc_第3页
数码管扫描显示控制器设计与实现——北京邮电数字电路实验报告.doc_第4页
数码管扫描显示控制器设计与实现——北京邮电数字电路实验报告.doc_第5页
已阅读5页,还剩16页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

数字电路与逻辑设计实验报告北京邮电大学实 验 报 告实验名称:数码管扫描显示控制器设计与实现 学 院: 信息与通信工程学院 班 级: 姓 名: 学 号: 日 期: 2010年5月 索 引一实验目的3二实验所用仪器及元器件3三实验任务要求3四实验设计思路及过程41.实验原理42.设计思路43.VHDL代码5A.实验任务15B.实验任务2-I8C.实验任务2-II11五仿真波形及分析121.仿真波形12实验任务112实验任务2-I133.波形分析17实验任务117实验任务2-I17六故障及问题分析181.频率设置问题182.触发问题183.逻辑实现问题18七本实验总结与结论19八学期总结19九参考文献19一实验目的1. 掌握VHDL语言的语法规范,掌握时序电路描述方法2. 掌握多个数码管动态扫描显示的原理及设计方法二实验所用仪器及元器件1. 计算机2. 直流稳压电源3. 数字系统与逻辑设计实验开发板三实验任务要求1. 用VHDL语言设计并实现六个数码管串行扫描电路,要求同时显示0,1,2,3,4,5这六个不同的数字图形到六个数码管上,仿真下载验证其功能。2. 用VHDL语言设计并实现六个数码管滚动显示电路。(选作)I. 循环滚动,始终点亮6个数码管,左出右进。状态为:012345123450234501345012450123501234012345II. 向左滚动,用全灭的数码管充右边,直至全部变灭,然后再依次从右边一个一个地点亮。状态为:01234512345X2345XX345XXX45XXXX5XXXXXXXXXXXXXXXX0XXXX01XXX012XX0123X01234012345,其中X表示数码管不显示。四实验设计思路及过程1.实验原理为使得输入控制电路简单且易于实现,采用动态扫描的方式实现设计要求。动态扫描显示需要由两组信号来控制:一组是字段输出口输出的字形代码,用来控制显示的字形,称为段码;另一组是位输出口输出的控制信号,用来选择第几位数码管工作,称为位码。各位数码管的段线并联,段码的输出对各位数码管来说都是相同的。因此在同一时刻如果各位数码管的位选线都处于选通状态的话,6位数码管将显示相同的字符。若要各位数码管能够显示出与本位相应的字符,就必须采用扫描显示方式,即在某一时刻,只让某一位的位选线处于导通状态,而其它各位的位选线处于关闭状态。同时,段线上输出相应位要显示字符的字型码。这样在同一时刻,只有选通的那一位显示出字符,而其它各位则是熄灭的,如此循环下去,就可以使各位数码管显示出将要显示的字符。虽然这些字符是在不同时刻出现的,而且同一时刻,只有一位显示,其它各位熄灭,但由于数码管具有余辉特性和人眼有视觉暂留现象,只要每位数码管显示间隔足够短,给人眼的视觉印象就会是连续稳定地显示。总之,多个数码管动态扫描显示,是将所有数码管的相同段并联在一起,通过选通信号分时控制各个数码管的公共端,循环一次点亮多个数码管,并利用人眼的视觉暂留现象,只要扫描的频率大于50Hz,将看不到闪烁现象。6个数码管则需要50*6=300Hz以上才能看到持续稳定点亮的现象。2.设计思路设计时序电路,输入时钟经过一个分频器,产生2kHz的扫描信号作为时钟,驱动计数器工作。选用模值为6的计数器,通过一个3线至6线译码器,产生段码,依次控制6个LED的亮灭,使得某一时刻有且仅有一个LED点亮,同时产生对应的,将点亮的LED数码管赋值显示为相应的数码予以显示。由于扫描频率较高,6位LED数码管序列将显示持续稳定的0至5的数码。3.VHDL代码A.实验任务1实现代码-2kHz 分频器library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity div2k isport(clk_in : in std_logic; clk_out : out std_logic);end;architecture a of div2k issignal cnt : integer range 0 to 999;signal clk_tmp : std_logic;beginprocess(clk_in)beginif (clk_inevent and clk_in=1) thenif cnt=999 thencnt=0; clk_tmp= not clk_tmp;elsecnt=cnt+1;end if;end if;end process;clk_outCLK,clk_out=clk_tmp);P1:process(CNT6) BEGIN CASE CNT6 IS -3线至6线译码器 WHEN 0 = BT = 011111 ; A BT = 101111 ; A BT = 110111 ; A BT = 111011 ; A BT = 111101 ; A BT = 111110 ; A NULL ; END CASE ; END PROCESS P1;P2:process(clk_tmp) BEGIN IF clk_tmpEVENT AND clk_tmp = 1 THEN -实现模6计数器CNT6 = CNT6 + 1; if CNT6 = 5 thenCNT6 SG SG SG SG SG SG NULL ; END CASE ; END PROCESS P3; END arc;代码说明通过分频器输入产生选通脉冲,控制0至5号LED数码管依次亮灭,同时使用数码显示信号使得数码管显示相应数码。实现时通过连接引入分频信号,通过数据选择器选择数码管。计数器信号触发数据选择器,赋值给位码触发数码管显示数码。最终实现动态扫描显示数字序列。B.实验任务2-I实现代码LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY scan_led_2 IS PORT ( CLK : IN STD_LOGIC; SG : OUT STD_LOGIC_VECTOR(6 DOWNTO 0); BT : OUT STD_LOGIC_VECTOR(5 DOWNTO 0) ); END;ARCHITECTURE arc OF scan_led_2 IScomponent div2kport(clk_in: in std_logic; clk_out: out std_logic);end component; SIGNAL CNT6 : INTEGER RANGE 0 TO 6; SIGNAL A : INTEGER RANGE 0 TO 5;SIGNAL COUNT : INTEGER RANGE 0 TO 5001 := 0;SIGNAl FLAG : INTEGER RANGE 0 TO 7 := 0; SIGNAl FLAG_A : INTEGER RANGE 0 TO 5;SIGNAL clk_tmp : STD_LOGIC;BEGINu1:div2k port map(clk_in=CLK,clk_out=clk_tmp);P1:process(CNT6) BEGIN CASE CNT6 IS WHEN 0 = BT = 011111 ; A BT = 101111 ; A BT = 110111 ; A BT = 111011 ; A BT = 111101 ; A BT = 111110 ; A NULL ; END CASE ; END PROCESS P1;P2:process(clk_tmp) BEGIN IF clk_tmpEVENT AND clk_tmp = 1 THEN -实现模6计数器CNT6 = CNT6 + 1; if CNT6 = 5 then CNT6 = 0;end if;IF (FLAG = 6) THEN-设置标志 FLAG = 0; END IF;IF COUNT = 5000 THEN-相当于另一个时钟COUNT = 0;-计数周期为5000FLAG = FLAG + 1; -当记满5000时左移动一位 ELSECOUNT = COUNT + 1;-不满5000继续计数END IF; END IF; END PROCESS P2;P3:process(A)BEGIN FLAG_A SG SG SG SG SG SG NULL ; END CASE ; END PROCESS P3; END arc;代码说明代码主体和实验任务1中一致,基本思想也一致。为实现移位,关键改动为新增一个计数器,技术周期远远大于扫描周期,这样,在一个大的计数周期内,对于要显示的6位数码进行动态扫描(和实验任务1中相同),显示出6种移位状态中的一种;在下一个大的周期内,利用FLAG标志,并使用求余运算将显示位的数码移位,比如,大的计数周期为0时,FLAG为0,显示“012345”六位数码,大的周期为1时,FALG为1,此时各位求余(即FLAG_A求余)对应的数码为123450,显示的数码也就为“123450”。以此类推,实现循环移位。C.实验任务2-II实现代码P2:process(clk_tmp) BEGIN IF clk_tmpEVENT AND clk_tmp = 1 THEN CNT6 = CNT6 + 1; -模6计数器if CNT6 = 6 thenCNT6 = 0;end if;IF (FLAG = 7) THEN FLAG_SC = 1; -序列反移位标志END IF;IF (FLAG = 0) THEN FLAG_SC = 0; -序列左移位标志END IF;IF COUNT = 5000 THENCOUNT = 0;IF FLAG_SC = 1 THENFLAG = FLAG - 1 ; -记满大周期序列反移位ELSEFLAG = FLAG + 1 ; -记满大周期序列左移位END IF;ELSECOUNT = COUNT + 1;END IF;IF FLAG_SC = 1 THENFLAG_A = A - FLAG ;-序列反移位ELSEFLAG_A = A + FLAG ;-序列左移位END IF; END IF; END PROCESS P2;代码说明此处为关键部分代码,其余代码同实验任务2-I中基本相同。实现基本思路为:先左移位,方法同实验任务2-I,进行加运算,稍有不同为左移出的数码不从右移入,因而没有取余运算,大于6的数码状态为灭灯,实现了左移且右端数码依次熄灭。待全部灯熄灭(此时FLAG已经加到了7)后数码依次从右移入,此时进行减运算(加减运算由FLAG_SC控制),右端数码最先达到0,显示数码“0”,然后是右端第二位达到0,显示数码“0”,右端第一位为1,显示数码“1”,其余灯灭,以此类推,实现了右端逐位移入数码的功能。五仿真波形及分析1.仿真波形实验任务1实验任务2-I3.波形分析实验任务1由波形可见,随着时钟模六计数的不断重复,0至5号LED数码管依次打开,其余管熄灭,同时,数码管显示数字从0至5依次出现,两者保持同步,即n号管亮时显示的数码为n。这样每计数6次循环依次,可知仿真结果正确。当扫描速度很快时,人眼将能看到持续稳定的0至5号数码显示。在实验室实际测试时,下载到电路板测试成功,完成实验任务。实验任务2-I为了使仿真结果便于打印,这里修改了COUNT值为6,也即在一个大的计数周期内,只扫描一遍(实际实现时需要动态扫描多次,如同实验任务1,产生稳定显示,只需把COUNT值加大即可)。由波形可见,随着大计数周期的增加,依次产生012345123450234501345012450123501234012345 ,这样便实现了循环移位。实验室实测时,加大COUNT值为5000,观察到稳定持续的周期循环移位的数码显示,完成实验任务。六故障及问题分析1.频率设置问题当频率设置过高时,计数周期将大大增加,每个周期内的扫描次数也增加,但考虑到人眼的分辨能力,频率只需大于300Hz即可,过大将增大系统开销,故采用2kHz分频器。2.触发问题初始编写代码时,误将COUNT计数器放入p3进程中,导致触发逻辑错误,大周期计数不工作,显示数码不能移位。后将模6和模5000两个计数器同时放入p2进程,统一使用一个时钟边沿触发,这样符合了同步时序电路设计的基本思想,触发正确,显示数码才正常移位。3.逻辑实现问题实验任务2-II中,为节省硬件开销,摈弃使用过多CASE语句产生大量数据选择器的穷举法,采用一个加法器和一个减法器代替,小周期计数器控制每位数码的显示,大周期计数器控制数码的移位,加法器实现左移出,减法器实现右移入,综合起来实现实验任务要求。逻辑分析包括硬件分析均无问题,但实际下载到电路板上实现时,部分移位出现乱码。在实验室规定的时间内没能调试成功,真是遗憾。分析问题可能出在移位时间的选择上,需要再从仿真波形着手,仔细分析逻辑中的小BUG。七本实验总结与结论1.经过逻辑分析,编写VHDL代码,然后调试,进行波形仿真,最后下载到实验板实现,一系列工序之后,成功实现了本实验要求的比做任务1和选作任务2-I,选作任务2-II逻辑上稍有问题,还需进一步改进编码,仿真测试。2.进行数字电路实验,理论分析是十分重要的一环,只有逻辑分析透彻无误了,才能用语言进行描述,进而用硬件实现。这次实验让我对VHDL这样一门硬件描述语言有了更加深刻的认识。语言是描述设计者逻辑思想的,有什么样的逻辑思维就会产生什么样的代码,换句话说,逻辑思维错误将直接导致描述错误,进而不能实现数字逻辑。应该着重优化逻辑思维,才能写出优秀的

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论