eda8路彩灯控制系统vhdl
程序设计。院系:@@院。
专业: 0802班。
学号。姓名:@@
一、设计要求
1、设计一个七段数码管动态扫描电路。数码管个数为8个,共阴极接法。
2、设计一电路,控制上述电路实现“12345678”八个数字的显示,要求显示方式为:
1)自左至右逐个点亮数码管,最后全亮;再重复以上动作。
2)自左至右点亮数码管,每次只点亮一个,最后全息灭,再重复以上动作。
3) 先中间两个点亮,再依次向外点亮;全亮后,再依次向中间熄灭;重复上述步骤。
二、设计方案()
整个系统共有三个输入信号:控制彩灯节奏快慢的基准时钟信号clk,彩灯变化频率选择开关xuanping,彩灯花样选择开关xuanhuayang;共有8个输出信号out[7..0],分别用于控制八路彩灯。
系统整体框图如下:
主要模块组成:时序控制电路模块和显示电路模块。时序控制电路模块由分频和选频两部分构成,可以控制彩灯变化的快慢。
三,设计过程。
1、主程序:8路彩灯。
library ieee;
use use
use entity color8 is
port (clk,rst:in std_logic;
sel:in std_logic_vector(1 downto 0);
aout:out std_logic_vector(7 downto 0));
end color8;
architecture color of color8 is
type state_1 is (s0,s1,s2,s3,s4,s5,s6,s7,s8);
signal state_2:state_1;
beginpr_1:process (clk,rst)
begin
if rst='1' then state_2<=s0;
elsif clk'event and clk='1' then
case state_2 is
when s0=> state_2<=s1;
when s1=> state_2<=s2;
when s2=> state_2<=s3;
when s3=> state_2<=s4;
when s4=> state_2<=s5;
when s5=> state_2<=s6;
when s6=> state_2<=s7;
when s7=> state_2<=s8;
when s8=> state_2<=s0;
end case;
end if;
end process pr_1;
pr_2:process(sel,state_2)
beginif sel="00" then
--when "00" =
case state_2 is
when s0=> aout<="00000000";
when s1=> aout<="10000000";
when s2=> aout<="11000000";
when s3=> aout<="11100000";
when s4=> aout<="11110000";
when s5=> aout<="11111000";
when s6=> aout<="11111100";
when s7=> aout<="11111110";
when s8=> aout<="11111111";
end case;
elsif sel="01" then
case state_2 is
when s0=> aout<="00000000";
when s1=> aout<="10000000";
when s2=> aout<="01000000";
when s3=> aout<="00100000";
when s4=> aout<="00010000";
when s5=> aout<="00001000";
when s6=> aout<="00000100";
when s7=> aout<="00000010";
when s8=> aout<="00000001";
end case;
--when "10"=>
elsif sel="10" then
case state_2 is
when s0=> aout<="00000000";
when s1=> aout<="00011000";
when s2=> aout<="00111100";
when s3=> aout<="01111110";
when s4=> aout<="11111111";
when s5=> aout<="01111110";
when s6=> aout<="00111100";
when s7=> aout<="00011000";
when s8=> aout<="00000000";
end case;
end if;
end process pr_2;
end color8;
**结果如下图:
1)当sel为“00”时, 8路彩灯被选中运行方式一,即自左至右逐个点亮数码管,最后全亮;再重复以上动作。此时波形图如下:
注:由于rst高电平时是复位,所以**时便将它一直设为低电平。
2)当sel为“01”时, 8路彩灯被选中运行方式二,即自左至右点亮数码管,每次只点亮一个,最后全息灭,再重复以上动作。此时波形图如下:
3)当sel为“10”时, 8路彩灯被选中运行方式三,即先中间两个点亮,再依次向外点亮;全亮后,再依次向中间熄灭;重复上述步骤。此时波形图如下:
注:由于之前都有9个状态,这个彩灯的花样只需要8个状态即可,但为了与主控时序进程中的状态转换设计相符合,我将最后一个状态变为全零即与第一个状态相同。所以在此**中有连续两个clk上升沿出现全零的状况。
2、同步时钟clk频率计算。
clk频率计算:
根据人的视觉暂留现象,一个数码管所要显示的字符只要在一秒内点亮24次以上,则感觉上该数码管没有熄灭一样。若8只数码管要出现这种效果,要求在一秒内每只数码管要闪亮24次以上。则clk频率应为24x8=192hz以上,为了减少闪烁现象,达到较好的显示效果,取clk频率为1024hz,每秒内每个数码管显示次数为128次。
分频器程序。
library ieee;
use use
entity fenpin is
port(clk : in std_logic;
clk1 : out std_logic;
clk2 : out std_logic);
end fenpin ;
architecture a of fenpin is
signal cou : std_logic_vector(3 downto 0);
beginprocess(clk)
beginif clk'event and clk='1' then
cou <=cou+1;
end if;
end process;
clk1 <=cou(2);
clk2 <=cou(1);
end a;
**波形:3、频率选择模块(选择不同的模块实现快慢不同节奏)
library ieee;
use entity xuanzepl is
port(clk1,clk2,s: in std_logic;
clkout: out std_logic);
end xuanzepl;
architecture a of xuanzepl is
signal sel: std_logic;
begin
process(clk1,clk2,s)
beginif s='0' then
clkout<=clk1;
elseclkout<=clk2;
end if;
sel<=s;
end process;
end a;
**结果如下:
结果分析:当s为高电平时,clkout选择clk2,当s为低电平时,选择clk1。
EDA课程设计
题目一 数字钟设计 学号1 15 一 实验目的。学习并掌握数字钟的原理 设计方法。二 实验内容。计数始终由模60秒计数器 模60分计数器 模24小时计数器 报时模块 分 时设定模块及输出显示模块构成。可以采用同步计数器或异步计数器设计方法。三 实验要求。计时范围为0小时0分0秒至23小时59分59秒...
eda课程设计
哈尔滨工业大学 威海 信电学院电子信息工程。一 软硬件介绍。1软件部分介绍。1.1 quartus ii 是altera公司的综合性pld fpga开发软件,支持原理图 vhdl veriloghdl以及ahdl altera hardware description language 等多种设计输...
eda课程设计
目录。1 引言 2 1.1 课程设计的目的与任务 2 1.2 课程设计的内容 2 1.3课程设计仪器设备 2 1.4 课程设计的题目 2 1.5 方案的选择 2 2设计方案 3 2.1 设计原理 3 2.2各功能模块的原理及其源程序 3 2.2.1控制模块 3 2.2.2分频模块 4 2.2.3计时...