六位数码管动态扫描显示电路设计与实现
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
可编程逻辑器件技术项目设计报告
课题名称:六位数码管动态扫描显示电路设计与实现班级:13电子(2)班
******
指导老师:***
一、设计要求
1)用VHDL语言设计一个可以实现以下功能的程序:六个数码管可以同时工作,显示不同的数字。
2)编写完程序之后并在开发系统上进行硬件测试。
二、任务分析
串行连接,即每个数码管对应的引脚都要连接在一起(如每个数码管的a引脚都要接到一起,然后再接到CPLD/FPGA上的一个引脚上),通过控制公共端(图5中的K端)控制相对应的数码管亮、灭(共阴极数码管的公共端为高电平时,LED不亮;共阳极的公共端为低电平时,LED不亮)。
串行法的优点在于消耗的系统资源少,占用的I/O口少,N个数码管只需要(7+N)个引脚(如果需要小数点,则是(8+N)个引脚)。其缺点是控制起来不如并行法容易。
三、设计原理
四、硬件要求
主芯片EPM240T100C5,六个共阴极七段数码管。
五、源程序
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity dt is
port(
clock:in std_logic;
numa,numb: in integer range 0 to 9;
en:out std_logic_vector(0 to 5);
display:out std_logic_vector(0 to 6)--(a~g) );
end;
architecture decoder of dt is
signal counter:integer range 0 to 9;
signal clk_1:std_logic;
signal numc,numd,nume,numf:integer range 0 to 9; begin
numc<=0;
numd<=0;
nume<=0;
numf<=0;
process(clock)
variable cnt1: integer range 0 to 1000;
variable cnt2: integer range 0 to 50;
-------------------------------------------------------
-----------1000Hz
begin
if rising_edge(clock) then
if cnt1=1000 then
cnt1:=0;
If cnt2=50 then
cnt2:=0;
clk_1<=not clk_1;
else
cnt2:=cnt2+1;
end if;
else
cnt1:=cnt1+1;
end if;
end if;
end process;
-------------------------------------------------------
----------------
process(clk_1)
variable num:integer range 0 to 9; begin
if rising_edge(clk_1) then
if counter=5 then
counter<=0;
else
counter<=counter+1;
end if;
case counter is
when 0=>en<="011111";
num:=numa;
when 1=>en<="101111";
num:=numb;
when 2=>en<="110111";
num:=numc;
when 3=>en<="111011";
num:=numd;
when 4=>en<="111101";
num:=nume;
when 5=>en<="111110";
num:=numf;
when others=>en<="000000";
num:=0;
end case;
case num is
when 0=>display<="1111110";
when 1=>display<="0110000";
when 2=>display<="1101101";
when 3=>display<="1111001";
when 4=>display<="0110011";
when 5=>display<="1011011";
when 6=>display<="0011111";
when 7=>display<="1110000";
when 8=>display<="1111111";
when 9=>display<="1111011";
when others=>display<="0000000"; end case;
end if;
end process;
end;
六、接线图
七、现象描述
以上程序在硬件上的现象是从左往右数,前四个显示字形为0,后两个数码管由八个拨码开关控制显示字形。拨码开关打到相应位置的二进制数,对应在七段数码管上显示相应字形,形如七段数码管显示译码器的硬件现象测试。
八、总结
通过这次动态扫描设计实验,明显加强了对译码器程序的编写。对比七段数码管显示译码器的实验,更加熟练的运用各程序模块。对于本次实验,个人觉得也还有可以改进,结合十进制的程序,改动本程序,利用分频等让七段数码管按照一定时间改变