eda液晶显示控制电路课程设计
『壹』 EDA做出租车计价器课程设计数码管显示怎么改成液晶屏显示啊
你好,楼主
首先改成液晶显示屏的话,要有一个液晶控制模块才可以的
其它的就没有什么啦,主要是液晶的那个控制器做出来就ok。
『贰』 EDA课程设计——数字电子钟 设计一个电子时钟,要求可以显示时、分、秒,用户可以设置时间。 扩展功能:秒
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity code is
port( clk: in std_logic;--电路工作时的时钟信号
clk1: in std_logic;--闹铃产生需要的时钟信号
k: in std_logic;--高电平表示输入1
led: out std_logic;--输入正确时亮
led1: out std_logic;--输入错误时亮
reset: in std_logic;-- 按下时复位
want: in std_logic;--是否修改密码
alarm: out std_logic;--输出闹铃声
show: out std_logic_vector(3 downto 0));--提示作用
end;
architecture a of code is
signal temp: std_logic_vector(3 downto 0);--输入一位加1
signal code: std_logic_vector(7 downto 0);--储存密码
signal getcode: std_logic_vector(7 downto 0);--储存修改后的密码
signal counter: std_logic_vector(3 downto 0);--计数
signal allow: std_logic;--是否允许修改密码
signal ring:std_logic;--是否接通闹铃
begin
process(clk)
begin
if ring='1' then
alarm<=clk1;--闹铃接通
else
alarm<='0';--闹铃截至
end if;
if reset='1' then--按下reset后,密码归为初始密码
getcode<="00000000";--初始密码
counter<="0000";--内部计数
code<="11001000";--密码
led<='0';
led1<='0';
allow<='0';
elsif clk'event and clk='1' then--输入clk脉冲,则接收1位密码
getcode<=getcode(6 downto 0)&k;--将这1位密码并入getcode中的最后一位
if counter="1000" then--输入为8位数码时比较
if code=getcode then
led<='1';--正确灯亮
led1<='0';
ring<='0';
allow<='1';--允许修改密码
elsif allow='1' and want='1' then--如果允许输入且想输入
code<=getcode;--输入新密码
led<='0';
led1<='0';
else
allow<='0';
led<='0';
led1<='1';--错误灯亮
ring<='1';--闹铃响
end if;
counter<="0000";--重新计数
else
counter<=counter+1; --累加
temp<=temp+1;--为防止泄露密码,特别设置
end if;
end if;
show <= temp;
end process;
end;
『叁』 EDA点阵式led显示屏控制电路设计 控制16*16点阵显示字母,预置四个字母或汉字连续显示求程序
制的16*16点阵显示汉字,出现字体是镜像的现象是由于取点阵时扫描方向搞反了。改正方法是逆序读点阵数组数据,即原来从数组0下标开始读
『肆』 eda液晶显示屏课程设计求助啊加
什么液晶屏呢,LCD1602吗,还是可以显示中文的12864?我这里有一些资料,需要可以来找我,在线,等待回复。我这里有一些资料,需要可以来找我,在线,等待回复。
『伍』 EDA课程设计 项目:乐曲演奏电路的设计
路过,关注下问题!
『陆』 EDA课程设计心得体会
这个是我做的“微机控制系统”的你照着改一下:
心得体会:
本系统主要介绍了锅炉的液位检测控制,还介绍了对温度和压力的检测控制,介绍了8051单片机和其它一些单片机在锅炉控制系统中的应用,介绍了它们的引脚和在系统中的电路图,本设计还采用了多种传感器来对液位、温度和压力的信号采集,利用LED来进行信号的输出显示,我设计的硬件系统的结构简化,系统精度高,具有良好的人机交互功能,并设有液位报警、高压、低压和阀门失灵等故障报警,有问题立即就能发现。通过自动调节控制液位并实现锅炉内温度和水位的报警。液位控制在设定值上正常运行不需要人工干预,操作人员劳动强度小。
采用单片机设计出的工业锅炉控制器,能够针对汽包水位的不同状态和不同外界条件进行控制,汽包水位运行稳定、控制品质良好、控制效果明显改善;同时大大提高了控制系统的抗干扰能力,保证了工业锅炉的稳定运行。控制装置具有成本低、抗干扰能力强、控制性能好等优点,且系统硬、软件维护简单方便,尤其适用于工业控制现场,具有良好的应用前景。
本系统所采用的传感器性能稳定,测量准确,大大简化现场安装,具有较高的性价比,有较大的工程应用价值,而且利用计算机单片机技术对锅炉生产过程进行自动控制有着重要的意义。其优越性主要在于:首先,通过对锅炉燃烧过程进行有效控制,使燃烧在合理的空燃比条件下进行,可以提高燃烧效率。由于工业锅炉耗煤量大,燃烧热效率每提高 1%都会产生巨大的经济效益。其次,锅炉控制过程的自动化处理以及监控软件良好的人机界面,操作人员在监控计算机上能根据控制效果及时修运行参数,这样能有效地减少工人的疲劳和失误,提高生产过程的实时性、安全性。随着计算机控制技术应用的普及、可靠性的提高及价格的下降,工业锅炉的微机控制必将得到更加广泛的应用。
『柒』 EDA课程设计——数字电子钟
1、基本要求:能利用现有的硬件系统设计一个至少能显示分、秒的控制电路。分和秒均用两位数码管指示,并具有调时、复位功能;
2、扩展要求:能同时显示小时(两位数码管)并能调节小时功能;具有闹钟定时功能。
3、设计方法:采用模块化描述方法,可分为分频模块、调时控制模块、数码显示模块、复位等模块,每个模块既可以编辑成独立的HDL文件或GDF文件,也可以作为HDL程序中的一个进程模块,最后进行系统仿真加以验证,在此基础上下载到硬件上进行现场测试。
4、输入、输出端口描述:输入信号——时钟信号clk、复位信号clr、时间设置键set、时间上调键tup、时间下调键tdown;输出信号——扫描式七段数码管段选输出端led[7..0]、位选输出端ctrlbit[3..0]。
我来帮他解答
2011-6-1 17:06
满意回答
设计原理
计数时钟由模为60的秒计数器模块、模为60的分计数模块、模为24的小时计数器模块、指示灯与报警器的模块、分/小时设定模块及输出显示模块等组成。秒计数器模块的进位输出为分计数器模块的进位输入,分计数器模块的进位输出为小时计数器模块的进位输入。其中秒计数器模块中应有分钟的设定,分计数器模块中应有小时的设定。
内容
设计一个计数时钟,使其具有24小时计数功能。通过“多功能复用按键F1-F12”信号接线组“F1_12(T)”的F9~F12的任意引线插孔可设置小时和分钟的值,并具有整点报时的功能。
电路原理图
模块说明:计数时钟由60秒计数器模块XSECOND、60分计数器模块XMINUTE、24小时计数器模块XHOUR等六个模块构成。秒计数器模块的进位输出为分计数器模块的进位输入,分计数器模块中有小时的设定。通过SW1、SW2、SW3、SW4可设定小时和分钟的值,并具有整点报时的功能。
输入信号:SETMIN为分钟设置信号;SETHOUR为小时设置信号;RESET为全局复位信号;CLK为全局时钟信号;CKDSP为数码管动态扫描信号。
输出信号:SPEAK为蜂鸣器报时信号;LAMP[2..0]为指示灯信号;A~G为数码管七个段位信号;SS[2..0]为数码管段位译码控制信号。
说明与电路连线
指示灯信号LAMP2~LAMP0为独立扩展下载板上CPLD器件的第11、10、9脚,内部已连接并已锁定,无需外接连线。
蜂鸣器报时信号SPEAK为独立扩展下载板CPLD器件的第31脚,内部已连接并已锁定,无需外接连线。
拨码开关SW1~SW7内部已连接并已锁定,无需外接连线。
数码管七个段位信号A~G为独立扩展下载板上CPLD器件的第86、87、88、89、90、92、93脚,应接数码管段位引线接线组KPL_AH,从左到右依次对应的A、B、C、D、E、F、G引线插孔。
数码管段位译码控制信号SS0、SS1、SS2为独立扩展下载板上CPLD器件的第68、69、70脚,为数码管的位选扫描信号,分别接信号接线组DS1-8A(T)的SS0、SS1、SS2引线插孔(即在电源引线插孔组GND孔处)。
复位信号RESET为独立扩展下载板上CPLD器件的第71脚,应接“多功能复用按键F1-F12”信号接线组“F1_12(T)”的F9~F12的任意一个插孔。
小时设置信号SETHOUR为独立扩展下载板CPLD器件的第73脚,应接“多功能复用按键F1-F12”信号接线组“F1_12(T)”的F9~F12的任意一个插孔。
分钟设置信号SETMIN为独立扩展下载板上CPLD器件的第74脚,应接“多功能复用按键F1-F12”信号接线组“F1_12(T)”的F9~F12的任意一个插孔。
时钟信号CLK为独立扩展下载板上CPLD器件的183脚(即GCLK2),应接时钟信号接线组“CLOCK(T)”的“FRQ(21)”引线插孔。
数码管动态扫描信号CKDSP为独立扩展下载板上CPLD器件的79脚(即GCLK1),应接时钟信号接线组“CLOCK(T)”的“FRQ(11)”引线插孔。
参考源程序
library IEEE;
use IEEE.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
use ieee.std_logic_arith.all;
entity xsecond is
port (
clk: in STD_LOGIC;
clkset: in STD_LOGIC;
setmin: in STD_LOGIC;
reset: in STD_LOGIC;
secout: out STD_LOGIC_VECTOR (6 downto 0);
enmin: out STD_LOGIC
);
end xsecond;
architecture xsecond_arch of xsecond is
signal sec : std_logic_vector(6 downto 0);
signal emin : std_logic;
signal sec1 : std_logic;
begin
-- <<enter your statements here>>
process(reset,sec,emin,setmin,clkset)
begin
if reset='0' then
enmin<='0';
secout<="0000000";
sec1<='1';
else
sec1<='0';
secout<=sec;
if clkset='1' and clkset'event then
if setmin='0' then
enmin<='1';
else
enmin<=emin;
end if;
end if;
end if;
end process;
process(clk,sec1)
alias lcount : std_logic_vector(3 downto 0) is sec(3 downto 0);
alias hcount : std_logic_vector(2 downto 0) is sec(6 downto 4);
begin
if sec1='1' then
sec<="0000000";
else
if (clk='1' and clk'event) then
if lcount=9 then
lcount<="0000";
if hcount/=5 then
hcount<=hcount+1;
emin<='0';
else
hcount<="000";
emin<='1';
end if;
else
lcount<=lcount+1;
emin<='0';
end if;
end if;
end if;
end process;
end xsecond_arch;
library IEEE;
use IEEE.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
use ieee.std_logic_arith.all;
entity xminute is
port (
clkmin: in STD_LOGIC;
reset: in STD_LOGIC;
sethour: in STD_LOGIC;
clk: in STD_LOGIC;
minout: out STD_LOGIC_VECTOR (6 downto 0);
enhour: out STD_LOGIC
);
end xminute;
architecture xminute_arch of xminute is
signal min : std_logic_vector(6 downto 0);
signal ehour : std_logic;
signal min1 : std_logic;
begin
-- <<enter your statements here>>
process(reset,clk,sethour,min,ehour)
begin
if reset='0' then
enhour<='0';
minout<="0000000";
min1<='0';
else
min1<='1';
minout<=min;
if clk='1' and clk'event then
if sethour='0' then
enhour<='1';
else
enhour<=ehour;
end if;
end if;
end if;
end process;
process(clkmin,min1)
alias lcountm : std_logic_vector(3 downto 0) is min(3 downto 0);
alias hcountm : std_logic_vector(2 downto 0) is min(6 downto 4);
begin
if min1='0' then
min<="0000000";
else
if (clkmin='1' and clkmin'event) then
if lcountm=9 then
lcountm<="0000";
if hcountm/=5 then
hcountm<=hcountm+1;
ehour<='0';
else
hcountm<="000";
ehour<='1';
end if;
else
lcountm<=lcountm+1;
ehour<='0';
end if;
end if;
end if;
end process;
end xminute_arch;
library IEEE;
use IEEE.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
use ieee.std_logic_arith.all;
entity xhour is
port (
clkhour: in STD_LOGIC;
reset: in STD_LOGIC;
hourout: out STD_LOGIC_VECTOR (5 downto 0)
);
end xhour;
architecture xhour_arch of xhour is
signal hour : std_logic_vector(5 downto 0);
begin
-- <<enter your statements here>>
process(reset,clkhour,hour)
alias lcount : std_logic_vector(3 downto 0) is hour(3 downto 0);
alias hcount : std_logic_vector(1 downto 0) is hour(5 downto 4);
begin
if reset='0' then
hourout<="000000";
hour<="000000";
else
if (clkhour='1' and clkhour'event) then
if lcount=9 then
lcount<="0000";
hcount<=hcount+1;
else
if hour="100011" then
hour<="000000";
else
lcount<=lcount+1;
end if;
end if;
end if;
hourout<=hour;
end if;
end process;
end xhour_arch;
library IEEE;
use IEEE.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
use ieee.std_logic_arith.all;
entity xalert is
port (
clk: in STD_LOGIC;
d_in: in STD_LOGIC_VECTOR (6 downto 0);
speak: out STD_LOGIC;
d_out: out STD_LOGIC_VECTOR (2 downto 0)
);
end xalert;
architecture xalert_arch of xalert is
type state is (s1,s2,s3,s4);
signal next_state,current_state : state;
begin
-- <<enter your statements here>>
process(clk,current_state,d_in)
begin
if d_in/="0000000" then
speak<='0';
next_state<=s1;
current_state<=s1;
d_out<="000";
else
if clk='1' and clk'event then
speak<='1';
current_state<=next_state;
end if;
case current_state is
when s1 =>
d_out<="000";
next_state<=s2;
when s2 =>
d_out<="001";
next_state<=s3;
when s3 =>
d_out<="010";
next_state<=s4;
when s4 =>
d_out<="100";
next_state<=s1;
when others =>
d_out<="000";
null;
end case;
end if;
end process;
end xalert_arch;
library IEEE;
use IEEE.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
use ieee.std_logic_arith.all;
entity xsettime is
port (
hour: in STD_LOGIC_VECTOR (5 downto 0);
min: in STD_LOGIC_VECTOR (6 downto 0);
sec: in STD_LOGIC_VECTOR (6 downto 0);
reset: in STD_LOGIC;
clk: in STD_LOGIC;
sel: out STD_LOGIC_VECTOR (2 downto 0);
d_out: out STD_LOGIC_VECTOR (3 downto 0)
);
end xsettime;
architecture xsettime_arch of xsettime is
signal sel1 : std_logic_vector(2 downto 0);
begin
-- <<enter your statements here>>
process(clk,reset,sel1,hour,min,sec)
begin
if reset='0' then
sel<="000";
d_out<="0000";
sel1<="000";
else
if (clk='1' and clk'event) then
if sel1<5 then
sel1<=sel1+1;
else
sel1<="000";
end if;
end if;
sel<=sel1;
case sel1 is
when "000" =>
d_out(3)<='0';
d_out(2)<='0';
d_out(1)<=hour(5);
d_out(0)<=hour(4);
when "001" =>
d_out<=hour(3 downto 0);
when "010" =>
d_out(3)<='0';
d_out(2)<=min(6);
d_out(1)<=min(5);
d_out(0)<=min(4);
when "011" =>
d_out<=min(3 downto 0);
when "100" =>
d_out(3)<='0';
d_out(2)<=sec(6);
d_out(1)<=sec(5);
d_out(0)<=sec(4);
when "101" =>
d_out<=sec(3 downto 0);
when others =>
null;
end case;
end if;
end process;
end xsettime_arch;
library IEEE;
use IEEE.std_logic_1164.all;
entity xdeled is
port (
d_in: in STD_LOGIC_VECTOR (3 downto 0);
a: out STD_LOGIC;
b: out STD_LOGIC;
c: out STD_LOGIC;
d: out STD_LOGIC;
e: out STD_LOGIC;
f: out STD_LOGIC;
g: out STD_LOGIC
);
end xdeled;
才五分啊,太少了吧
哥刚的
『捌』 EDA课程设计:彩灯控制器
以前做的设计,粘贴时图形没出来,参考一下,记得给分啊
一.设计目的
1、学习EDA开发软件和MAX+plus Ⅱ的使用方法,熟悉可编程逻辑器件的使用,通过制作来了解彩灯控制系统。
2、进一步掌握数字电路课程所学的知识。
3、了解数字电路设计的一般思路,进一步解决和分析问题。
4、培养自己的编程和谨慎的学习态度
二、.设计题目内容和要求
(1)课题内容:
用EDA技术设计一个彩灯控制器,使彩灯(LED管)能连续发出三种以上不同的花型(自拟);
随着彩灯显示图案的变化,发出不同的音响声。
要求使用7段数码管显示当前显示的花型,如第一种花型显示A1,第二种花型显示b2,第三种花型显示C3
(2)主要任务:完成该系统的硬件和软件的设计,并利用实验箱制作出实物演示,调试好后并能实际运用(指导教师提供制作所需的器件),最后就课程设计本身提交一篇课程设计报告。
三、总体方案设计与选择
1 总体方案的设计
方案一:电路分为三个部分:彩灯花型模块、声音模块,时钟模块。用时钟控制声音和花型,整体使用相同的变量与信号,主体框图如下;
图三—1-1方案一的的流程图
方案二:电路分为五个模块:分频器模块、16进制计数器、4进制计数器,4选1选择器、彩灯控制器。其中彩灯控制器是用来输出不同的花样,彩灯控制器的输出则是用一个16进制的计数器来控制,扬声器的输出时用不同的频率来控制,所以用了一个集成分频器来使输入的频率被分为几种不同的频率,不同频率的选择性的输出则是用一个4选一的选择器来控制。整体框图如下:
图三—1-2方案二的流程图
2、方案的选择
方案一是将融合在一起,原理思路简单,元件种类使用少,但是在编程时要使用同一变量和信号,这样就会给编程带来很大的困难,另外中间单元连线较多,不容易检查,门电路使用较多,电路的抗干扰能力会下降。
方案二将彩灯花型控制与声音控制分开,各单元电路只实现一种功能,电路设计模块化,且编程时将工作量分开,出现错误时较容易检查,连线较少且容易组装和调试。
结合两个方案的优缺点,我选择容易编程、组装和调试的方案二。
四、模块电路的设计
1、分频器模块
设计要求显示不同的彩灯的时候要伴随不同的音乐,所以设计分频器来用不同的频率控制不同的音乐输出。
模块说明:
Rst:输入信号 复位信号 用来复位分频器的输出使输出为“0”,及没有音乐输出。
Clk:输入信号 模块的功能即为分频输入的频率信号。
Clk_4、clk8、clk_12、clk_16:输出信号 即为分频模块对输入信号clk的分频,分别为1/4分频输出、1/8分频输出、1/12分频输出、1/16分频输出。不同的频率会发出不同的声音。如图
图四-1分频器电路图
2、16进制计数器
16进制模块用来控制彩灯输出模块,即确定彩灯控制器的不同的输出。
Rst:输入信号 复位信号 用来复位16进制使其输出为“00000”,即彩灯不亮。
Clk1:输入信号 用来给模块提供工作频率。
Count_out[3..0]:输出信号 即为16进制计数器的输出,此输出信号作为彩灯的输入信号。
如图四-2
图四-2 16进制计数器电路图
3、4进制计数器模块
4进制计数器作为选择器的输入来控制选择器选择不同的频率作为输出控制扬声器工作。
Clk2:输入信号 来为计数器提供工作频率。
Rst:输入信号 复位信号 使计数器的输出为“00”。
如图四-3
图四-3 4进制计数器电路图
4、4选1选择器模块
Rst:输入信号复位信号使选择器的输出为“0”。
In1、in2、in3、in4:输入信号接分频器的输出。
Inp[1..0]:输入信号接4进制计数器的输出用来控制选择器的选择不同的输入选择不同的输出。
Output2:输出信号直接接扬声器即输出的是不同的频率来控制扬声器播放声音
如图四—4
图四—4 4选1选择器电路图
5、彩灯控制模块
彩灯控制采用的模式6来进行显示。
图四—5—1模式6结构图
彩灯控制模块用来直接控制彩灯的输出,使彩灯表现出不同的花样。
Rst:输入信号 使彩灯控制模块的输出为“00000000”,即让彩灯无输出。
Input[4..0]:输入信号 不同的输入使彩灯控制模块有不同的输出即彩灯显示出不同的花样。
Output3[7..0]:输出信号 直接与数码管相连来控制数码管。
如图四—5—2
图四-5-2 彩灯控制电路图
五、EDA设计与仿真
1、源程序:
----------------------------------------------分频器模块-----------------------------------------
LIBRARYieee;
USEieee.std_logic_1164.all;
ENTITYfenpinqi IS
PORT
(
clk2,rst :IN std_logic;
clk_12,clk_4,clk_16,clk_8 : OUT std_logic
);
ENDfenpinqi;
ARCHITECTUREcd OF fenpinqi IS
begin
p1:process(clk2,rst)
variable a:integer range 0 to 20;
begin
if rst='1' then
clk_4<='0'; ----- 复位信号控制部分
else
if clk2'event and clk2='1'then
if a>=3 then
a:=0;
clk_4<='1';
else
a:=a+1;
clk_4<='0';
end if;
end if;
end if;
endprocess p1;
p2:process(clk2,rst)
variable b:integer range 0 to 20;
begin
if rst='1' then
clk_16<='0'; ----- 复位信号控制部分
else
if clk2'event and clk2='1'then
if b>=15 then
b:=0;
clk_16<='1';
else
b:=b+1;
clk_16<='0';
end if;
end if;
end if;
endprocess p2;
p3:process(clk2,rst)
variable c:integer range 0 to 20;
begin
if rst='1' then
clk_8<='0'; ----- 复位信号控制部分
else
if clk2'event and clk2='1'then
if c>=7 then
c:=0;
clk_8<='1';
else
c:=c+1;
clk_8<='0';
end if;
end if;
end if;
endprocess p3;
p4:process(clk2,rst)
variable d:integer range 0 to 40;
begin
if rst='1' then
clk_12<='0'; ----- 复位信号控制部分
else
if clk2'event and clk2='1'then
if d>=11 then
d:=0;
clk_12<='1';
else
d:=d+1;
clk_12<='0';
end if;
end if;
end if;
endprocess p4;
endcd;
----------------------------------------------4选1选择器---------------------------------------
LIBRARYieee;
USEieee.std_logic_1164.all;
ENTITYxzq4_1 IS
PORT
(
rst:in std_logic;
inp:in integer range 0 to 3;
in1,in2,in3,in4 : In std_logic;
output2 :OUT std_logic
);
ENDxzq4_1;
ARCHITECTUREa OF xzq4_1 IS
BEGIN
PROCESS (rst,inp)
BEGIN
if(rst='1') then output2<='0';
else
case inp is
when 0=>output2<=in1;
when 1=>output2<=in2;
when 2=>output2<=in3;
when 3=>output2<=in4;
when others=>null;
end case;
end if;
END PROCESS;
ENDa;
-------------------------------------------彩灯控制模块----------------------------------------
LIBRARYieee;
USEieee.std_logic_1164.all;
ENTITYcaideng IS
PORT
(
input :
IN INTEGER RANGE
0 TO 15;
rst:in std_logic;
output3 :OUT std_logic_vector(7 downto 0);
sm :out std_logic_vector(6 downto 0)
);
ENDcaideng;
ARCHITECTUREa OF caideng IS
BEGIN
PROCESS (input)
BEGIN
if rst='1' thenoutput3<="00000000";sm<="0000000";
else
case input is
when 0=>output3<="00111000";sm<="0000110";
when1=>output3<="00001111";sm<="0000110";
when2=>output3<="00111110";sm<="0000110";
when3=>output3<="01111111";sm<="0000110";
when4=>output3<="01011011";sm<="1011011";
when5=>output3<="01110110";sm<="1011011";
when6=>output3<="00001111";sm<="1011011";
when7=>output3<="01111111";sm<="1011011";
when8=>output3<="01101101";sm<="1001111";
when9=>output3<="00000111";sm<="1001111";
when10=>output3<="01110111";sm<="1001111";
when11=>output3<="01111011";sm<="1001111";
when12=>output3<="00111000";sm<="1100110";
when13=>output3<="00111111";sm<="1100110";
when14=>output3<="00111110";sm<="1100110";
when 15=>output3<="01111001";sm<="1100110";
when others=>null;
end case;
end if;
end process;
end a;
--------------------------------------------16进制计数器模块-----------------------------------
LIBRARYieee;
USEieee.std_logic_1164.all;
ENTITYcounter_16 IS
PORT
(
clk,rst :IN std_logic;
count_out :
OUT INTEGER RANGE
0 TO 15);
ENDcounter_16;
ARCHITECTUREa OF counter_16 IS
BEGIN
PROCESS (rst,clk)
variable temp:integer range 0 to 16;
BEGIN
IF rst='1' THEN
temp:=0;
ELSIF (clk'event and clk='1') THEN
temp:=temp+1;
if(temp=15) then
temp:=0;
end if;
END IF;
count_out<=temp;
END PROCESS;
ENDa;
-------------------------------4进制计数器模块----------------------------------
LIBRARYieee;
USEieee.std_logic_1164.all;
ENTITYcounter_4 IS
PORT
(
clk,rst :IN std_logic;
count_out :OUT integer range 0 to 3 );
ENDcounter_4;
ARCHITECTUREa OF counter_4 IS
BEGIN
PROCESS (rst,clk)
variable temp:integer range 0 to 16;
BEGIN
IF rst='1' THEN
temp:=0;
ELSIF (clk'event and clk='1') THEN
temp:=temp+1;
if(temp=4) then
temp:=0;
end if;
END IF;
count_out<=temp;
END PROCESS;
ENDa;
-------------------------------------------主程序----------------------------------
LIBRARYieee;
USEieee.std_logic_1164.all;
ENTITYproject IS
PORT (clk1,rst,clk2: IN std_logic;
Out1: OUT std_logic_vector(7 downto 0);
Out2 :out std_logic_vector(6 downto0);
Out3: OUT std_logic);
ENDproject;
ARCHITECTUREstruct OF project IS
COMPONENT counter_16 IS
PORT(clk,rst : IN std_logic;
count_out : OUT integer range 0 to 15 );
ENDCOMPONENT;
COMPONENT fenpinqi IS
PORT(clk2,rst : IN std_logic;
clk_12,clk_4,clk_16,clk_8 : OUT std_logic);
END COMPONENT ;
COMPONENT counter_4 IS
PORT(clk,rst :IN std_logic;
count_out :OUT integer range 0 to 3 );
ENDCOMPONENT;
COMPONENT xzq4_1 IS
PORT
(
rst:in std_logic;
inp:in integer range 0 to 3;
in1,in2,in3,in4 : In std_logic;
output2 :OUT std_logic
);
ENDCOMPONENT;
COMPONENT caideng IS
PORT
(
input: IN INTEGER RANGE 0 TO 15;
rst:in std_logic;
output3 :OUT std_logic_vector(7 downto 0);
sm :out std_logic_vector(6 downto 0)
);
ENDCOMPONENT;
SIGNALu: integer range 0 to 15;
SIGNALw: integer range 0 to 3;
SIGNALv1,v2,v3,v4: std_logic;
BEGIN
U1:counter_16PORT MAP(clk1,rst,u);
U2:fenpinqiPORT MAP(clk2,rst, v1,v2,v3,v4);
U3:counter_4PORT MAP(v3,rst,w);
U4:xzq4_1 PORT MAP(rst,w, v1,v2,v3,v4,out3);
U5:caidengPORT MAP(u,rst,out1,out2);
ENDstruct;
2、彩灯控制器仿真结果及数据分析
分析:如上图,clk1控制的是彩灯模块,clk2控制的是声音模块,当rst为高电平是输出全为0,ck1每出现四个高电平,花型发生一次变化,out2分别显示1、2、3、4,out1显示不同的花型,out3发出声音,如图脉冲数不同表示发出的声音不同,但是声音与花型相比有一定的延迟。
六、硬件实现
1、引脚锁定图
2、硬件仿真图
显示第一组花型之一
显示第二组花型之一
显示第三组花型之一
显示的第四组花型之一
七、总体电路
整个系统就是各个分模块组成来实现最后的彩灯控制功能,系统又两个时钟来控制一个是控制16进制计数器即控制彩灯控制模块来实现彩灯的不同输出,另一个时钟为分频器的输入来进行分频处理,最后用来控制扬声器发出不同的音乐,为了使效果明显尽量达到要求分频处理的时钟的频率比实现彩灯控制的时钟频率要高。
将各个模块连在一起采用在课程中学到的元件例化,将各个模块的引脚连在一起,使之成为一个整体。元件例化是VHDL设计实体构自上而下层次化设计的重要途径。整体电路如图五—1
图七—1 整体电路图
八、心得体会
1、在设计时遇到一些主要问题如下:怎么将各个模块连在一起、开始硬件仿真时总是出现错误,设计方案的选择。最后我选择了元件例化将各个模块连在一起,仿真时是因为短路帽接错了,当时没有注意,在方案的选择时我们选了实现比较简单的分模块方案
2、这次的EDA课程设计我学到得东西很多明白了理论与实践之间的差距,而且对DEA课程有了更深入的理解,尤其是知道了怎么去应用所学的知识,怎么去利用网络实现自己的要求,具体体会如下:
(1)要想完成编程就要对DEA知识很熟悉,这样才能加快编程的速度,另外在编程时一定要小心,稍微有一点粗心都会有很多的错误出现,在出现错误后要学会寻找错误原因如名称前后不一、数据类型不同、符号写错等等
(2)拿道题目后要注意分析,要学会总体把握,然后再一一一细化、学会将复杂的问题简单化,分析时一定要有一个明确的目标。
(3)要学会理论联系实际,在程序导入到实验箱后,居然不显示结果,认真的检查看看操作是否有错误、试验箱中该短路的是否已用短路帽短路、又重新检查了一下程序,结果发现是短路帽接错了,所以看似很简单的操作自己操作起来可能会有很大的漏洞,所以亲自动手是很重要的。
(4)当自己的只是有限时,要注意运用网络等一切资源,要学会知识的灵活运用在查阅的过程中学到了很多在书本所没有学到的知识,通过查阅相关资料进一步加深了对EDA的了解
总的来说,通过这次课程设计不仅锻炼了我们的动手和动脑能力,也使我懂得了理论与实际相结合的重要性,只有理论知识是远远不够的,要把所学的理论知识与实践相结合起来,才能提高自己的实际动手能力和独立思考的能力。还有最重要的一点就是要有一丝不苟的精神和端正认真的态度,遇到困难后要学会积极的面对。
3、在此设计中声音会有一定的延迟,可以考虑用花型输出信号作为4选1的控制信号
九、参考书目:
赵伟军,《Protel99se教程》,北京,人民邮电出版社,1996年
金西,《VHDL与复杂数字系统设计》,西安,西安电子科技大学出版社,2003
汉泽西,《EDA技术及其应用》,北京,北京航空航天大学出版社,2004
[4] 黄任,《VHDL入门.解惑.经典实例.经验总结》,北京,北京航空航天大学出版社,2005
[5] 李洋,《EDA技术 使用教程》,北京,机械工业出版社,2009
[6] 网络资源:EDA课程设计、EDA课程设计—彩灯控制器等