数电实验四(2)_第1页
数电实验四(2)_第2页
数电实验四(2)_第3页
数电实验四(2)_第4页
数电实验四(2)_第5页
已阅读5页,还剩1页未读 继续免费阅读

下载本文档

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

文档简介

1、一课题名称:数码管扫描显示控制器设计与实现二实验目的1.掌握VHDL语言的语法规范,掌握时序电路描述方法2.掌握多个数码管动态扫描显示的原理及设计方法三实验所用仪器及元器件1.计算机2.直流稳压电源3.数字系统与逻辑设计实验开发板四实验任务要求1.用VHDL语言设计并实现六个数码管串行扫描电路,要求同时显示0,1,2,3,4,5这六个不同的数字图形到六个数码管上,仿真下载验证其功能,并下载到实验板上测试。2.用VHDL语言设计并实现六个数码管滚动显示电路。(选作) 循环左滚动,始终点亮6个数码管,左出右进。状态为:0123451234502345013450124501235012340123

2、45 向左滚动,用全灭的数码管充右边,直至全部变灭,然后再依次从右边一个一个地点亮。状态为:01234512345X2345XX345XXX45XXXX5XXXXXXXXXXXXXXXX0XXXX01XXX012XX0123X01234012345,其中X表示数码管不显示。五实验设计思路及过程1.实验原理为使得输入控制电路简单且易于实现,采用动态扫描的方式实现设计要求。动态扫描显示需要由两组信号来控制:一组是字段输出口输出的字形代码,用来控制显示的字形,称为段码;另一组是位输出口输出的控制信号,用来选择第几位数码管工作,称为位码。多个数码管动态扫描显示,是将所有数码管的相同段并联在一起,通过选

3、通信号分时控制每个数码管的公共端,循环依次点亮多个数码管,利用人眼的视觉暂留现象,只要扫描的频率大于50Hz,将看不到闪烁现象。扫描显示方式就是在某一时刻,只让某一位的位选线处于导通状态,而其它各位的位选线处于关闭状态。同时,段线上输出相应位要显示字符的字型码。这样在同一时刻,只有选通的那一位显示出字符,而其它各位则是熄灭的,如此循环下去,就可以使各位数码管显示出将要显示的字符。当闪烁显示的发光二级管闪烁频率较高时我们将看到持续点亮的现象。同理,当多个数码管一次显示,当切换速度足够快时,我们将看到所有的数码管都是同时在显示。一个数码管要稳定显示要求显示频率大于50Hz,那么6个数码管则需要50

4、*6=300Hz以上才能看到持续稳定点亮的现象。2.设计思路数码管亮灭的控制:设计时序电路,产生数码管的选通控制信号,分别对应6个共阴极数码管的公共端,当cat=0时,其对应的数码管被点亮,因此,通过控制cat1cat6,就可以控制6个数码管循环依次点亮。要求任意时刻,最多只有一个cat为0,其余为1。由于扫描信号大于300Hz,人眼将看到数码管持续稳定点亮。数码管显示字形的控制:定义七维数组num,分别控制数码管的abcdefg七段,高电平亮,低电平灭,故可以实现012345等数字。异步清零的控制:从外部输入信号clear,高电平时控制数码管正常显示,低电平时数码管全部熄灭。3.VHDL代码

5、实验任务1:串行扫描电路-shumaguanlibrary ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;use ieee.std_logic_arith.all;entity shumaguan is -定义数码管实体port ( clear,clkin:in std_logic; num:out std_logic_vector(6 downto 0); -控制字形的数码管段输入端信号 cat:out std_logic_vector(5 downto 0) -选通控制信号 );end shumaguan;

6、architecture behave of shumaguan is -数码管行为 signal state:integer range 0 to 6; -定义随机变量 描述数码管状态begin process(clear,clkin) begin if clear='0' then state<=0; -清零 所有数码管灭灯 elsif(clkin'event and clkin='1') then -上升沿有效 if state=6 then state<=1; -状态在16之间循环 else state<=state+1; en

7、d if; end if; end process; process(state) -输出状态,控制哪个数码管亮灯 begin case state is when 1=> num <="1111110"cat<="011111" -第一个数码管显示0 when 2=> num <="0110000"cat<="101111" -第二个数码管显示1 when 3=> num <="1101101"cat<="110111"

8、 -第三个数码管显示2 when 4=> num <="1111001"cat<="111011" -第四个数码管显示3 when 5=> num <="0110011"cat<="111101" -第五个数码管显示4 when 6=> num <="1011011"cat<="111110" -第六个数码管显示5 when others=> num <="0000000"cat<=&

9、quot;000000" end case; end process;end behave;实验任务2-1:循环向左滚动-shumaguan gundongshixianlibrary ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity gundongxianshi1 is -定义实体port ( clear,clkin:in std_logic; num:out std_logic_vector(6 downto 0); -控制段输入端 cat:out std_logic_vector(0

10、to 5) -控制数码管亮灭 );end gundongxianshi1;architecture behave of gundongxianshi1 is -定义行为 signal state:integer range 0 to 6; -定义随机变量 描述数码管状态 signal x:integer range 0 to 5:=0; signal s:integer range 0 to 11:=0; -循环显示012345012345 signal clkout:std_logic_vector(0 to 5); -输出 begin process(clear,clkin) begin

11、if clear='0' then state<=0; -异步清零 elsif(clkin'event and clkin='1') then -上升沿有效 if state=6 then state<=1; x<=x+1; -数码管1到6循环扫描 else state<=state+1; -状态移动 end if; if x=6 then x<=0; end if; for i in 0 to 5 loop if state<i+1 then clkout(i)<='1' elsif state

12、<i+2 then clkout(i)<='0' else clkout(i)<='1' end if; end loop; for i in 0 to 5 loop cat(i)<=clkout(i); -将clkout值赋给cat,控制数码管亮灭 end loop; s<=state+x; case s is -实现数码管的显示功能 when 1 => num <="1111110" when 2 => num <="0110000" when 3 => num <="1101101" when 4 => num <="1111001" when 5 => num <="0110011" when 6 => num <="1011011" when 7 => num <="1111110" when 8 => num <="0110000" when 9 =>

温馨提示

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

评论

0/150

提交评论