8255A与多位数码管的显示
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
微机原理课程设计
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)。