您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 交通运输 > EDA课程设计-彩灯控制器
电子设计自动化大作业题目彩灯控制器的设计学院**学院班级电气**学号**********姓名********二O一二年十月三十一日彩灯控制器的设计一、彩灯控制器的设计要求设计能让一排彩灯(8只)自动改变显示花样的控制系统,发光二极管可作为彩灯用。控制器应有两种控制方式:(1)规则变化。变化节拍有0.5秒和0.x秒两种,交替出现,每种节拍可有4种花样,各执行一或二个周期后轮换。(2)随机变化。无规律任意变化。二、彩灯控制器的设计原理本次彩灯控制器的设计包含几个主要模块,一是彩灯显示和扬声器的时序控制部分,二是发光二极管的动态显示和数码管的动态显示,本次设计中,二者的显示同步变化;三是扬声器的控制部分。流程图如下所示:图1彩灯控制器的设计流程图彩灯控制器的设计核心主要是分频器的使用,显示部分的设计较简易。分频的方法有很多种,本次设计之采用了其中较简易的一种,通过计数器的分频,将控制器外接的频率分为几个我们预先设定的值。当计数器达到预先设定的值,即产生一个上升沿,从而实现分频。扬声器通过不同的频率控制发出不同的声音。同样发光二极管和数码管的显示速度也由其中分出来的一种频率控制(控制显示频率在1~4之间为宜)。通过使能端的控制可以控制不同的数码管显示预先设定的图案,数码管依次显示的图案为AA、BB、CC,并随着发光二极管同步动态显示。AA为自左向右显示,BB为自右向左显示,CC从二边向中间再由中间向二边发散显示。与此同时,显示不同的花型时扬声器发出不同的声音,代表不同的花型。本次设计还带有复位功能,通过复位可以使彩灯控制器恢复到最初的状态。三、程序设计和分析libraryieee;useieee.std_logic_1164.all;useieee.std_logic_unsigned.all;建立设计库和标准程序包实体部分:entitypanisport(clk:instd_logic;clr:instd_logic;speak:outstd_logic;led7s1:outstd_logic_vector(6downto0);led7s2:outstd_logic_vector(7downto0);led_selout:outstd_logic_vector(7downto0);endentity;实体名为pan,定义端口,输入端口为clk和clr,其中clk接脉冲信号,clr接复位端;输出端口speak接扬声器,led7s1接数码管的七段显示部分,led7s接八个发光二极管,led_selout接八个数码管的使能端,控制数码管的循环显示。结构体部分:architectureoneofpanissignals:std_logic_vector(4downto0);signalclk1:std_logic;signalclk2:std_logic;signalclk3:std_logic;定义4个信号,cq,cllk1,clk2,clk3.process(clk)variablea:std_logic_vector(5downto0);beginifclr='1'thenclk1='0';elseifclk'eventandclk='1'thenifa=110010thena:=000000;clk1='1';elsea:=a+1;clk1='0';endif;endif;endif;endprocess;以上程序为第一次分频,为50分频,当clk发生变化,使a从000000变化到110010时产生一个上升沿clk1。如果a没有变化到110010则a继续自加,直到110010为止产生下一个上升沿。process(clk)variableb:std_logic_vector(4downto0);beginifclr='1'thenclk2='0';-----复位信号elseifclk'eventandclk='1'thenifb=11001thenb:=00000;clk2='1';elseb:=b+1;clk2='0';endif;endif;endif;endprocess;以上程序为对clk进行25分频,原理同上,产生信号clk2。process(clk)variablec:std_logic_vector(2downto0);beginifclr='1'thenclk3='0';----复位信号elseifclk'eventandclk='1'thenifc=111thenc:=000;clk3='1';elsec:=c+1;clk3='0';endif;endif;endif;endprocess;以上程序为对clk进行8分频,产生一个新的时钟脉冲信号clk3。数码管及二极管循环显示时序控制程序:process(clk2)variablez:integerrange0to20;beginifclr='1'thens=00000;-------复位信号elseifclk'eventandclk='1'thenz:=z+1;ifz=20thens=s+1;s:=0;ifs=10111thens=00000;elses=s+1;endif;endif;endif;endif;endprocess;该段程序的目的是对clk2再进行一次分频,当clk2发生变化,并且变化为上升沿时,z就加1,直到加到为20时,s就发生变化,加1,每当s发生变化,加到30时,s就加1。当s从00000变化到10111时,就对s清零,从而实现数码显示管和发光二极管的循环显示,以达到显示速度的要求。发光二极管及数码管显示程序:process(s)begincasesiswhen00000=led7s1=0001000;led7s2=01111111;speak=clk1;led_selout=11000000;when00001=led7s1=0001000;led7s2=10111111;speak=clk1;led_selout=01100000;when00010=led7s1=0001000;led7s2=11011111;speak=clk1;led_selout=00110000;when00011=led7s1=0001000;led7s2=11101111;speak=clk1;led_selout=00011000;when00100=led7s1=0001000;led7s2=11110111;speak=clk1;led_selout=00001100;when00101=led7s1=0001000;led7s2=11111011;speak=clk1;led_selout=00000110;when00110=led7s1=0001000;led7s2=11111101;speak=clk1;led_selout=00000011;when00111=led7s1=0001000;led7s2=11111110;speak=clk1;led_selout=10000001;此段程序就是当敏感信号s发生变化,对数码管进行置位和置型,0001000也就是对相应的数码管使之显示花型为A,通过对数码管使能端的置位,控制显示的数码管显示为AA,并且发光二极管最右边显示为亮。当S每变化一次,数码管向左移动一格,发光二极管也同步向左移动,每次只亮一个灯。当s变化到00111之后执行下一段程序,同时扬声器发出声音。when01000=led7s1=0000011;led7s2=11111110;speak=clk2;led_selout=00000011;when01001=led7s1=0000011;led7s2=11111101;speak=clk2;led_selout=00000110;when01010=led7s1=0000011;led7s2=11111011;speak=clk2;led_selout=00001100;when01011=led7s1=0000011;led7s2=11110111;speak=clk2;led_selout=00011000;when01100=led7s1=0000011;led7s2=11101111;speak=clk2;led_selout=00110000;when01101=led7s1=0000011;led7s2=11011111;speak=clk2;led_selout=01100000;when01110=led7s1=0000011;led7s2=10111111;speak=clk2;led_selout=11000000;when01111=led7s1=0000011;led7s2=01111111;speak=clk2;led_selout=10000001;此段程序就是当敏感信号s发生变化至01000时,对数码管进行置位和置型,0000011也就是对相应的数码管使之显示花型为B,通过对数码管使能端的置位,控制显示的数码管显示为BB,并且发光二极管最左边显示为亮。当S每变化一次,数码管向右移动一格,发光二极管也同步向右移动,每次只亮一个灯。当s变化到01111之后执行下一段程序,同时扬声器发出声音。when10000=led7s1=1000110;led7s2=01111110;speak=clk3;led_selout=10000001;when10001=led7s1=1000110;led7s2=10111101;speak=clk3;led_selout=01000010;when10010=led7s1=1000110;led7s2=11011011;speak=clk3;led_selout=00100100;when10011=led7s1=1000110;led7s2=11100111;speak=clk3;led_selout=00011000;when10100=led7s1=1000110;led7s2=11100111;speak=clk3;led_selout=00011000;when10101=led7s1=1000110;led7s2=11011011;speak=clk3;led_selout=00100100;when10110=led7s1=1000110;led7s2=10111101;speak=clk3;led_selout=01000010;when10111=led7s1=1000110;led7s2=01111110;speak=clk3;led_selout=10000001;whenothers=null;endcase;endprocess;end;此段程序就是当敏感信号s发生变化至10000时,对数码管进行置位和置型,1000110也就是对相应的数码管使之显示花型为C,通过对数码管使能端的置位,控制显示的数码管显示为CC,并且发光二极管最左边第一个和最右边第一个显示为亮。当S每变化一次,数码管向中间移动一格,发光二极管也同步中间移动,可以看到由二边向中间移动再发散到二边的变化过程。当s变化到10111之后执行再循环显示A花型,同时扬声器发出声音。四、波形仿真分析程序经过编译之后即可进行波形的仿真,为了方便观察显示结果,这里调节仿真时间为3us,脉冲频率clk的周期为5ns,复位信号暂且不进行仿真.。执行Quartus软件中的processing--startsimulation选项,即可观察到波形仿真图像。如下图所示为显示花型AA的仿真结果。图2花型A波形仿真图由图2可知,当clk发生变化,来上升沿时,led7s1为0001
本文标题:EDA课程设计-彩灯控制器
链接地址:https://www.777doc.com/doc-5858391 .html