北邮数电实验数码管扫描显示控制器设计与实现1_第1页
北邮数电实验数码管扫描显示控制器设计与实现1_第2页
北邮数电实验数码管扫描显示控制器设计与实现1_第3页
北邮数电实验数码管扫描显示控制器设计与实现1_第4页
北邮数电实验数码管扫描显示控制器设计与实现1_第5页
已阅读5页,还剩11页未读 继续免费阅读

下载本文档

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

文档简介

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

2、. 循环滚动,始终点亮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 GKY07P14 IS SIGN

6、AL 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(clk'EVENT 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'

7、;)THEN count<="111111" ELSE CASE cnt IS WHEN 1=>count<="101111"q_temp<="0110000" WHEN 2=>count<="110111"q_temp<="1101101" WHEN 3=>count<="111011"q_temp<="1111001" WHEN 4=>count<="111101&quo

8、t;q_temp<="0110011" WHEN 5=>count<="111110"q_temp<="1011011" WHEN 0=>count<="011111"q_temp<="1111110" END CASE; END IF; END PROCESS; countout<=count; q<=q_temp;END behave; 代码说明通过分频器输入产生选通脉冲,控制0至5号LED数码管依次亮灭,同时使用数码显示信号使得数码管显

9、示相应数码。实现时通过连接引入分频信号,通过数据选择器选择数码管。计数器信号触发数据选择器,赋值给位码触发数码管显示数码。最终实现动态扫描显示数字序列。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 GKY07P1

10、4;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: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 cl

11、k'EVENT 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 clk'EVENT AND clk='1' THEN IF tmp<1000 THEN clk1<='0' ELSE clk1<='1' END IF; END IF; END PROCESS p1; p2:PROCESS(clk) BEG

12、IN IF(clk'EVENT 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(clk1'EVENT AND clk1='1')THEN IF(cnt1=5)THEN cnt1<=0; ELSE cnt1<=cnt1+1; END IF; END IF; END PROCESS p3; p4:PROCESS(cnt,cnt1) BEGIN IF(

13、clear='0')THEN q_temp<="0000000" ELSE CASE cnt+cnt1 IS WHEN 0=>q_temp<="1111110" WHEN 1=>q_temp<="0110000" WHEN 2=>q_temp<="1101101" WHEN 3=>q_temp<="1111001" WHEN 4=>q_temp<="0110011" WHEN 5=>q_t

14、emp<="1011011" WHEN 6=>q_temp<="1111110" WHEN 7=>q_temp<="0110000" WHEN 8=>q_temp<="1101101" WHEN 9=>q_temp<="1111001" WHEN 10=>q_temp<="0110011" WHEN 11=>q_temp<="1011011" WHEN OTHERS =>q

15、_temp<="0000000" END CASE; END IF; END PROCESS p4; q<=q_temp; p5:PROCESS(cnt) BEGIN IF(clear='0')THEN count<="111111" ELSE CASE cnt IS WHEN 0=>count<="011111" WHEN 1=>count<="101111" WHEN 2=>count<="110111" WHEN 3=&

16、gt;count<="111011" WHEN 4=>count<="111101" WHEN 5=>count<="111110" WHEN OTHERS =>count<="111111" END CASE; END IF; END PROCESS p5; countout<=count;END behave; 代码说明代码主体和实验任务1中一致,基本思想也一致。为实现移位,关键改动为新增一个计数器,技术周期远远大于扫描周期,这样,在一个大的计数周期内,对于要显示

17、的6位数码进行动态扫描(和实验任务1中相同),显示出6种移位状态中的一种;通过计数器,实现循环移位。C.实验任务2-II实现代码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

18、GKY07P14 IS SIGNAL q_temp:STD_LOGIC_VECTOR(6 DOWNTO 0); SIGNAL count:STD_LOGIC_VECTOR(5 DOWNTO 0); SIGNAL cnt,cnt1:INTEGER 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 clk'EVENT AND clk='

19、;1' THEN IF tmp=15999 THEN tmp<=0; ELSE tmp<=tmp+1; END IF; END IF; END PROCESS p0; p1:PROCESS(tmp) BEGIN IF clk'EVENT AND clk='1' THEN IF tmp<1000 THEN clk1<='0' ELSE clk1<='1' END IF; END IF; END PROCESS p1; p2:PROCESS(clk) BEGIN IF(clk'EVENT AND

20、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(clk1'EVENT AND clk1='1')THEN IF(cnt1=11)THEN cnt1<=0; ELSE cnt1<=cnt1+1; END IF; END IF; END PROCESS p3; p4:PROCESS(cnt,cnt1) BEGIN IF(clear='0')THEN

21、 q_temp<="0000000" ELSE CASE cnt+cnt1 IS WHEN 6=>q_temp<="1111110" WHEN 7=>q_temp<="0110000" WHEN 8=>q_temp<="1101101" WHEN 9=>q_temp<="1111001" WHEN 10=>q_temp<="0110011" WHEN 11=>q_temp<="101101

22、1" WHEN OTHERS =>q_temp<="0000000" END CASE; END IF; END PROCESS p4; q<=q_temp; p5:PROCESS(cnt) BEGIN IF(clear='0')THEN count<="111111" ELSE CASE cnt IS WHEN 0=>count<="011111" WHEN 1=>count<="101111" WHEN 2=>count<=&

23、quot;110111" WHEN 3=>count<="111011" WHEN 4=>count<="111101" WHEN 5=>count<="111110" WHEN OTHERS =>count<="111111" END CASE; END IF; END PROCESS p5; countout<=count;END behave; 代码说明此处为关键部分代码,其余代码同实验任务2-I中基本相同。实现基本思路为:先左移位,方法同实验任

24、务2-I,进行加运算,稍有不同为左移出的数码不从右移入,因而没有取余运算,大于6的数码状态为灭灯,实现了左移且右端数码依次熄灭。待全部灯熄灭后数码依次从右移入,此时进行减运算,右端数码最先达到0,显示数码“0”,然后是右端第二位达到0,显示数码“0”,右端第一位为1,显示数码“1”,其余灯灭,以此类推,实现了右端逐位移入数码的功能。五仿真波形及分析1.仿真波形1.实验任务12.实验任务2-I3.实验任务2-II3.波形分析1实验任务1clear为高电平时,六个数码管串行扫描。numn分别对应着数码管的7段,数码管高电平为亮,低电平暗。Catn为低电平时,数字n即通过numn显示。比如,数字5,

25、cat“111110”num=“1011011”.只要数码管闪烁频率足够高,就可以看到六个数码管分别显示0-5六个不同的数字. clear为低电平时,有效,波形清零.2.实验任务2-I因为要实现的是循环左滚动,且状态转移的顺序是012345->123450->234501->345012->450123->501234->012345共六个状态.从图中可以清楚地看出这六个状态转移过程中, 发光二极管管脚的变化情况.输入时钟信号后,6个数码管的选通控制端在同一时刻始终保持一个低电平其余高电平,在0-5对应的数码管上输出实验设定的数字并且由地位向高位依次循环移动. 3.实验任务2-II由波形图可以清楚地看到12个状态的波形,当时钟clk变化一些周期之后,波形就转到下一个状态.如图所示.状态转移关系: 012345->12345

温馨提示

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

评论

0/150

提交评论