您的当前位置:首页正文

8255A与多位数码管的显示

来源:好兔宠物网


微机原理课程设计

8255A与多位数码管的显示

姓名:曹诗凤 学号:12010240520 学院:物理电气信息学院

专业:通信工程 年级:2010级 指导老师:李萍

完成日期:2012年12月9日

基于VHDL语言的16路彩灯控制器

[摘要]分析多路彩灯控制器设计原理,采用硬件描述语言VHDL实现多路彩灯控制器的设计,具有

可编程性、线路简单、可靠性高等特点,并通过仿真对结果进行了验证。

[关键字]VHDL,彩灯,仿真,控制

随着科技的发展,在现代生活中,彩灯作为一种装饰既可以增强人们的感观,起到广告宣传作用,又可以增添节日气氛,为人们的生活增添亮丽。而EDA技术的应用及VHDL语言作为可编程逻辑器件的标准语言描述能力强,覆盖面广,抽象能力强。在这个阶段,人们开始追求贯彻整个系统设计的自动化,进而从繁重的设计工作中彻底解脱出来,把精力集中在创造性的方案与概念构思上,从而可以提高设计效率,缩短产品的研制周期。整个过程通过EDA工具自动完成,大大减轻了设计人员的工作强度,提高了设计质量,减少了出错的机会。本文介绍应用美国ALTERA公司的CycloneII平台,使用VHDL硬件描述语言实现的多路彩灯控制器。

一、多路彩灯控制器设计原理

设计一个彩灯控制程序器,可以实现十六路彩灯6种花型循环变化,有清零开关,并且可以选择快慢两种节拍。整个系统共有三个输入信号:控制彩灯节奏快慢的基准时钟信号CLK_IN,系统清零信号CLR,彩灯节奏快慢选择开关CHOSE_KEY;共有16个输出信号LED[15..0],分别用于控制十六路彩灯。硬件电路的设计要求在彩灯的前端加74373锁存器。用来对彩灯进行锁存控制。此彩灯控制系统设定有六种花样变化,这六种花样可以循环切换,设有两种快慢节拍,这两种节拍可以自由选择。

二、多路彩灯控制器的结构框图

本控制电路采用VHDL语言设计,运用自顶而下的设计思想,按功能逐层分割实现层次化设计。根据多路彩灯控制器的设计原理,将整个控制器分为两个部分,据此,我们可将整个彩灯控制器CDKZQ分为两大部分:时序控制电路SXKZ和显示控制电路XSKZ,整个系统的组成原理图如图1所示。时序控制电路SXKZ主要完成多路彩灯的节奏快慢控制,显示控制电路XSKZ完成多路彩灯的花型自动切换。

图1 彩灯控制器组成原理图

三、VHDL源程序

利用VHDL语言实现该功能程序如下: 3.1 时序控制电路的VHDL源程序 LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY SXKZ IS

PORT(CHOSE_KEY:IN STD_LOGIC;--CHOSE_KEY:彩灯节奏快慢选择; CLK_IN:IN STD_LOGIC;--CLK_IN:基准时钟信号; CLR:IN STD_LOGIC;-- CLR:系统清零信号;

CLK:OUT STD_LOGIC);--CLK:输出快慢节拍不同的时钟信号; END ENTITY SXKZ;

ARCHITECTURE ART OF SXKZ IS SIGNAL CLLK:STD_LOGIC; BEGIN

PROCESS(CLK_IN,CLR,CHOSE_KEY) IS

VARIABLE TEMP:STD_LOGIC_VECTOR(2 DOWNTO 0); BEGIN

IF CLR='1' THEN --当CLR='1'时清零,否则正常工作 CLLK<='0';TEMP:=\"000\";

ELSIF RISING_EDGE(CLK_IN) THEN IF CHOSE_KEY='1' THEN

IF TEMP=\"011\" THEN—除4; TEMP:=\"000\";

CLLK<=NOT CLLK ;--除2;

ELSE

TEMP:=TEMP+1; END IF;

-- 当CHOSE_KEY='1'时产生基准时钟频率的1/8的时钟信号,否则产生基准时钟 --频率的1/16的时钟信号 ELSE

IF TEMP=\"111\" THEN--除8;

TEMP:=\"000\";

CLLK<=NOT CLLK ;--除2; ELSE

TEMP:=TEMP+1; END IF; END IF; END IF; END PROCESS; CLK<=CLLK;

END ARCHITECTURE ART;

3.2 显示控制电路的VHDL源程序 LIBRARY IEEE;--花型产生 USE IEEE.STD_LOGIC_1164.ALL; ENTITY XSKZ IS

PORT( CLK:IN STD_LOGIC; CLR:IN STD_LOGIC;

LED:OUT STD_LOGIC_VECTOR(15 DOWNTO 0)); END ENTITY XSKZ;

ARCHITECTURE ART OF XSKZ IS TYPE STATE IS(S0,S1,S2,S3,S4,S5,S6); SIGNAL CURRENT_STATE:STATE;

SIGNAL FLOWER:STD_LOGIC_VECTOR(15 DOWNTO 0); BEGIN

PROCESS(CLR,CLK) IS--定义6个花型;

CONSTANT F1:STD_LOGIC_VECTOR(15 DOWNTO 0):=\"0001000100010001\"; CONSTANT F2:STD_LOGIC_VECTOR(15 DOWNTO 0):=\"1010101010101010\"; CONSTANT F3:STD_LOGIC_VECTOR(15 DOWNTO 0):=\"0011001100110011\"; CONSTANT F4:STD_LOGIC_VECTOR(15 DOWNTO 0):=\"0100100100100100\"; CONSTANT F5:STD_LOGIC_VECTOR(15 DOWNTO 0):=\"1001010010100101\"; CONSTANT F6:STD_LOGIC_VECTOR(15 DOWNTO 0):=\"1101101101100110\"; BEGIN

IF CLR='1' THEN

CURRENT_STATE<=S0; ELSIF RISING_EDGE(CLK) THEN

CASE CURRENT_STATE IS--6种花型自动切换; WHEN S0=>

FLOWER<=\"ZZZZZZZZZZZZZZZZ\"; CURRENT_STATE<=S1; WHEN S1=>

FLOWER<=F1;

CURRENT_STATE<=S2; WHEN S2=>

FLOWER<=F2;

CURRENT_STATE<=S3;

WHEN S3=>

FLOWER<=F3;

CURRENT_STATE<=S4; WHEN S4=>

FLOWER<=F4; CURRENT_STATE<=S5; WHEN S5=>

FLOWER<=F5;

CURRENT_STATE<=S6; WHEN S6=> FLOWER<=F6; CURRENT_STATE<=S1;

WHEN others => CURRENT_STATE<=S0; END CASE; END IF;

END PROCESS;

LED<=FLOWER;

END ARCHITECTURE ART;

3.3 整个电路系统的VHDL源程序 --CDKZQ.VHD LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL; ENTITY CDKZQ IS

PORT(CLK_IN:IN STD_LOGIC;--CLK_IN:基准时钟信号;

CLR:IN STD_LOGIC;-- CLR:系统清零信号;

CHOSE_KEY:IN STD_LOGIC;--CHOSE_KEY:彩灯节奏快慢选择;

LED:OUT STD_LOGIC_VECTOR(15 DOWNTO 0));--16路彩灯亮灭控制信号; END ENTITY CDKZQ;

ARCHITECTURE ART OF CDKZQ IS COMPONENT SXKZ IS

PORT(CHOSE_KEY:IN STD_LOGIC; CLK_IN:IN STD_LOGIC; CLR:IN STD_LOGIC; CLK:OUT STD_LOGIC); END COMPONENT SXKZ; COMPONENT XSKZ IS PORT(CLK:IN STD_LOGIC;

CLR:IN STD_LOGIC;

LED:OUT STD_LOGIC_VECTOR(15 DOWNTO 0)); END COMPONENT XSKZ; SIGNAL S1:STD_LOGIC;

BEGIN

U1:SXKZ PORT MAP(CHOSE_KEY,CLK_IN,CLR,S1); U2:XSKZ PORT MAP(S1,CLR,LED);

END ARCHITECTURE ART;

四、功能仿真

各模块VHDL程序经过编译优化后,选择合适的目标芯片进行综合、管脚配置。本电路选用ALTERA公司的可编程逻辑芯片EPM2C35484I8,由CycloneII进行仿真,整个电路系统CDKZQ、时序控制电路SXKZ和显示控制电路XSK及的仿真图分别如图2、图3和图4所示。

图2-1整个电路系统CDKZQ仿真图

从整个电路系统CDKZQ仿真波形2-1可以看出,CLR高电平有效,一旦清零信号有效,不论控制器花型变化处于何种状态,都会无条件即刻清零,恢复到初始状态。此设计可以实现六种不同花样彩灯的相互变换,六种花样彩灯可以循环变化。但是如果系统的固有频率很大,彩灯的闪烁速度非常快,看到的现象是每个花样的16个彩灯同时被点亮,为了实现绚丽多彩的景象,必须将基准时钟信号CLK_IN分频,此设计中将基准时钟信号的8分频和16分频作为点亮彩灯的控制时钟。控制分频的信号是CHOSE_KEY,这个信号课调节彩灯节奏快慢。但CHOSE_KEY=0时为16分频,CHOSE_KEY=1时为8分频,CHOSE_KEY取值不同,彩灯节奏不同,仿真结果如图2-2所示

图2-2整个电路系统CDKZQ仿真图

图3是序控制电路SXKZ仿真波形,CHOSE_KEY的电平高低不同,CLK输出的方波信号频率不同。CLK_IN是基准时钟信号,CHOSE_KEY是控制分频次数的信号,但CHOSE_KEY=1时,CLK输出CLK_IN的8分频信号,CHOSE_KEY=0时,CLK输出CLK_IN的16分频信号.。CLR高电平有效,一旦CLR信号有效,CLK立即清零。

图4是显示控制电路XSKZ仿真波形,在信号CLK的作用下,LED信号循环六种状态,即六种花型。CLR是清零信号,高电平有效,一旦有效,LED信号回到初始状态。LED信号有16位,每1位用于控制1路彩灯,16位用于控制16路彩灯的亮灭。

图3时序控制电路SXKZ仿真图

图4 显示控制电路XSKZ仿真图

五、设计分析

(1) 在时序控制电路SXKZ的设计中,利用计数器计数达到分频值时,对计数器进行清零,同时将输出信号反向,这就非常简洁地实现了对输入基准时钟信号的分频,并且分频信号的占空比为0.5。 (2) 在显示控制电路XSKZ的设计中,利用状态机非常简洁地实现了六种花型的循环变化,同时利用六个十六位常数的设计,可非常方便地设置和修改六种花型。

(3) 对于顶层程序的设计,因本系统模块较少,既可使用文本的程序设计方式,也可使用原理图的设计方式。但对于模块较多的系统,最好使用文本的程序设计方式。

六、系统扩展思路

(1) 在彩灯的快慢节奏的控制上,若去掉快慢节奏控制开关,如何控制快慢节奏的交替变化。 (2) 设计外围电路:系统用方波信号源、直流工作电源、彩灯控制的驱动电路。

(3) 若为课程设计,除要求设计调试程序、外围电路外,还可要求设计、制作整个系统,包括PCB的制作。

七、结束语

本次设计的实验表明,此设计方法能够满足六种不同花样彩灯的变化要求,并且该方法便于扩展不同变化模式的彩灯花样,各个不同花样的相互转变是自动切换实现的。

使用VHDL语言设计电路,思路简单,功能明了。使用CycloneII设计电路不仅可以进行逻辑仿真,而且具有门级仿真器,可以进行功能仿真或时序仿真,能够产生精确的仿真结果。使用FPGA不仅省去了电路制作的麻烦,还可以反复进行硬件的实验,非常方便地修改设计,且设计的电路的保密性强。用FPGA数字系统,有集成度高、速度快、功耗小、可靠性高等有点。总之,采用EDA技术使得复杂的电子系统的设计变的简单易行,提高了设计的效率。

[参考文献]

[1] 吕晓兰1基于VHDL实现的十六路彩灯控制系统[M]1信息技 术, 2007, (6)

[2] 范秋华等1基于VHDL的彩灯控制[M]1现代电子技术, 2004, (2)

[3] 吴长虹等1基于VHDL的数字系统优化设计[M]1电脑知识与 技术, 2006, (12)

[4] 齐京礼等1VHDL语言在FPGA中的应用[M]1微计算机信息, 2006, (12)

因篇幅问题不能全部显示,请点此查看更多更全内容