花型变换彩灯设计.docx
《花型变换彩灯设计.docx》由会员分享,可在线阅读,更多相关《花型变换彩灯设计.docx(24页珍藏版)》请在冰豆网上搜索。
![花型变换彩灯设计.docx](https://file1.bdocx.com/fileroot1/2023-2/3/7f42ae83-0767-4d1b-844e-7633ec585102/7f42ae83-0767-4d1b-844e-7633ec5851021.gif)
花型变换彩灯设计
赣南师院
物理与电子信息学院
课程设计报告书
姓名:
邱亚莲
班级:
电子科学与技术06级
学号:
060803048
时间:
2008年12月25日
论文题目
花型变换彩灯设计
课程论文
要求
设计要求:
节目彩灯能够美化生活,又能增添节目的喜庆气氛,人们都喜欢在节日的时候用彩灯来装饰房间,使家里增添喜庆的气氛,在很多的城市里都用彩灯来装饰城市的夜晚,用来美化城市,在现代的大都市应用非常的广泛。
当然如果只有一种花型则会显得很单调,所以,人们一般都是用好几种花型来相互转换。
请设计一个节日彩灯,由采用不同色彩搭配方案的16路彩灯构成,由以下四种花型:
花型1:
16路彩灯同时亮灭,亮、灭节拍交替进行;
花型2:
16路彩灯每次8路灯亮,8路灯灭,且亮、灭相间,交替亮灭;
花型3:
16彩灯先从左至右逐路点亮,到全亮后再从右至左逐路熄灭,循环演示;
花型4:
16路彩灯分左、右8路,左8路从左至右逐路点亮,右8路从右至左逐路点亮,到全亮后,左8路从右至左逐路熄灭,右8路从左至右逐路熄灭,循环演示。
要求彩灯亮、灭一次的时间为1秒,每32秒自动转换一种花型,花型转换的顺序为:
花型1、花型2、花型3、花型4,演示完一次后在进行下一次的循环,如此的一次一次的循环下去。
要求利用系统设计的方法,每种花型的变化都是从全0开始的。
设计过程
1、设计目的
A.熟悉数字电路课本知识,并学会巧妙地应用。
B.了解数字电路课程设计的基本思路。
C.掌握电路中各个芯片的具体功能,学会定时器,寄存器等芯片的功能及使用方法。
D.将理论应用到实践,更深地了解数电知识在实际生活中的应用,活学活用。
E.提高分析问题和解决问题的能力。
2、设计方案:
方案一:
VHDL语言设计
节日彩灯控制器可以分为4个模块:
(1)定时器模块T32S
由于彩灯亮、灭一次的时间是1s,所以选择系统时钟CLK的频率唯1HZ,使亮灭节拍与系统时钟周期相同。
此时,32s花型转换周期可以用以个模32的计数器对CLK脉冲计数来放方便地实现定时,定时器模块取名为T32S。
(2)左、右两个8位移位寄存器模块LSR8和SR8
由设计要求可知:
花型1、花型2演示一遍需要2个周期;花型3演示一遍需要32个周期;花型4演示一遍需要16个周期。
根据彩灯的亮灭规律,为了便与控制,采用移位型系统方案,即用移位寄存器模块的输出驱动彩灯,彩灯亮、灭和花型的转换通过改变移位寄存器的工作方式来实现。
16路彩灯需要移位寄存器模块的规模为16位,但为了方便实现4花型的转换,将其分为左、右两个8位移位寄存器模块LSR8和RSR8。
(3)控制子系统模块CONTR
(4)顶层模块LIGHT
节日彩灯控制系统的结构框图如下图1所示:
16路彩灯
定时器T32S
左移寄存器LSR8
右移寄存器RSR8
控制器CONTR
图1:
16路彩灯控制器的结构框图
4个模块的VHDL代码:
//LIGHT.VHD//
libraryIEEE;
useIEEE.std_logic_1164.all;
useIEEE.std_logic_unsigned.all;
useIEEE.std_logic_arith.all;
entityLIGHTis
port(RST,CLK:
inSTD_LOGIC;
Y,Z:
bufferSTD_LOGIC_VECTOR(7downto0));
endentityLIGHT;
architectureLIGHT_ARCHofLIGHTis
signalT01,PR1,PL1,QR1,QL1:
STD_LOGIC;
signalP1,W1:
STD_LOGIC_VECTOR(7downto0);
signalA1,B1:
STD_LOGIC_VECTOR(1downto0);
componentT128Sis
port(CLR,CLK:
inSTD_LOGIC;
CO:
OUTSTD_LOGIC);
endcomponentT128S;
componentSR8is
port(CLK,DR,DL:
inSTD_LOGIC;
M:
inSTD_LOGIC_VECTOR(1downto0);
D:
inSTD_LOGIC_VECTOR(7downto0);
Q:
outSTD_LOGIC_VECTOR(7downto0));
endcomponentSR8;
componentCONTRis
port(RST,CLK,T0,L7,L0,R7,R0:
inSTD_LOGIC;
PR,PL,QR,QL:
outSTD_LOGIC;
P,W:
outSTD_LOGIC_VECTOR(7downto0);
A,B:
outSTD_LOGIC_VECTOR(1downto0));
endcomponentCONTR;
begin
u1:
T128Sportmap(CLR=>RST,CLK=>CLK,CO=>T01);
u2:
SR8portmap(CLK=>CLK,DR=>PR1,DL=>PL1,D=>P1,M=>B1,Q=>Z);
u3:
SR8portmap(CLK=>CLK,DR=>QR1,DL=>QL1,D=>W1,M=>A1,Q=>Y);
u4:
CONTRportmap(RST=>RST,CLK=>CLK,T0=>T01,L7=>Z(7),L0=>Z(0),
R7=>Y(7),R0=>Y(0),PR=>PR1,PL=>PL1,QR=>QR1,QL=>QL1,
P=>P1,W=>W1,A=>A1,B=>B1);
endarchitectureLIGHT_ARCH;
//T32S.VHD//
libraryIEEE;
useIEEE.std_logic_1164.all;
useIEEE.std_logic_unsigned.all;
useIEEE.std_logic_arith.all;
entityT32Sis
port(CLR,CLK:
inSTD_LOGIC;
CO:
outSTD_LOGIC);
endentityT32S;
architectureT128S_ARCHofT32Sis
signalIQ:
STD_LOGIC_VECTOR(6downto0);
begin
process(CLR,CLK,IQ)is
begin
if(CLR='0')thenIQ<=(others=>'0');
elsif(CLK'eventandCLK='1')then
IQ<=IQ+1;
endif;
if(IQ=15)thenCO<='1';
elseCO<='0';
endif;
endprocess;
endarchitectureT32S_ARCH;
//SR8.VHD//
libraryIEEE;
useIEEE.std_logic_1164.all;
entitySR8is
port(CLK,DR,DL:
inSTD_LOGIC;
M:
inSTD_LOGIC_VECTOR(1downto0);
D:
inSTD_LOGIC_VECTOR(7downto0);
Q:
outSTD_LOGIC_VECTOR(7downto0));
endentitySR8;
architectureRTLofSR8is
signalIQ:
STD_LOGIC_VECTOR(7downto0);
begin
process(CLK)is
begin
if(CLK'eventandCLK='0')then
caseMis
when"00"=>NULL;
when"01"=>IQ<=DR&IQ(7downto1);
when"10"=>IQ<=IQ(6downto0)&DL;
when"11"=>IQ<=D;
whenothers=>NULL;
endcase;
endif;
Q<=IQ;
endprocess;
endarchitectureRTL;
//COUNTR.VHD//
libraryIEEE;
useIEEE.std_logic_1164.all;
entityCONTRis
port(RST,CLK,T0,L7,L0,R7,R0:
inSTD_LOGIC;
PR,PL,QR,QL:
outSTD_LOGIC;
P,W:
outSTD_LOGIC_VECTOR(7downto0);
A,B:
outSTD_LOGIC_VECTOR(1downto0));
endentityCONTR;
architectureCONTR_ARCHofCONTRis
typeSTATE_TYPEis(S0,S1,S2,S3,S4,S5,S6,S7);
signalSTATE:
STATE_TYPE;
begin
CIRCUIT_STATE:
process(RST,CLK)is
begin
if(RST=’0’)thenSTATE<=S0;
elsif(CLK’eventandCLK=’1’)then
caseSTATEis
whenS0=>STATE<=S1;
whenS1=>if(T0=’0’)thenSTATE<=S0;
elseSTATE<=S2;
endif;
whenS2=>STATE<=S3;
whenS3=>if(T0=’0’)thenSTATE<=S2;
elseSTATE<=S4;
endif;
whenS4=>if(R0=’0’)thenSTATE<=S4;
elseSTATE<=S5;
endif;
whenS5=>if(T0=’0’)then
if(L7=’1’)thenSTATE<=S5;
elseSTATE<=S4;
endif;
elsestate<=S6;
endif;
whenS6=>if(L0=’0’)thenSTATE<=S6;
elseSTATE<=S7;
endif;
whenS7=>if(T0=’1’)thenSTATE<=S0;
elsif(L7=’1’)thenSTATE<=S7;
endif;
endcase;
endif;
endprocessCIRCUIT_STATE;
output:
process(STATE,T0)is
begin
caseSTATEis
whenS0=>PR<=’1’;PL<=R7;P<=”11111111”;B<=”11”;
QR<=L0;QL<=’0’;W<=”11111111”;A<=”11”;
whenS1=>PR<=’1’;PL<=R7;P<=”00000000”;B<=”11”;
QR<=L0;QL<=’0’;W<=”00000000”;A<=”11”;
whenS2=>PR<=’1’;PL<=R7;P<=”01010101”;B<=”11”;
QR<=L0;QL<=’0’;W<=”01010101”;A<=”11”;
whenS3=>if(T0=’0’)then
PR<=’1’;PL<=R7;P<=”01010101”;B<=”10”;
QR<=L0;QL<=’0’;W<=”01010101”;A<=”10”;
else
PR<=’1’;PL<=R7;P<=”00000000”;B<=”11”;
QR<=L0;QL<=’0’;W<=”00000000”;A<=”11”;
endif;
whenS4=>PR<=’1’;PL<=R7;P<=”11111111”;B<=”01”;
QR<=L0;QL<=’0’;W<=”11111111”;A<=”01”;
whenS5=>if(T0=’0’)then
PR<=’1’;PL<=R7;P<=”11111111”;B<=”10”;
QR<=L0;QL<=’0’;W<=”11111111”;A<=”10”;
else
PR<=’1’;PL<=’0’;P<=”00000000”;B<=”11”;
QR<=’0’;QL<=’1’;W<=”00000000”;A<=”11”;
endif;
whenS6=>PR<=’1’;PL<=’0’;P<=”11111111”;B<=”01”;
QR<=’0’;QL<=’1’;W<=”11111111”;A<=”10”;
whenS7=>PR<=’1’;PL<=’0’;P<=”11111111”;B<=”10”;
QR<=’0’;QL<=’0’;W<=”11111111”;A<=”01”;
endcase;
endprocessOUTPUT;
endarchitectureCONTR_ARCH;
彩灯系统综合图如图2所示:
图2:
彩灯系统综合图
如上面所示电路图与EL实验箱连接即可出结果,但因我们还没过多地接触VHDL语言,所以不做为本次课程设计的主要方案。
方案二:
74系列芯片组合成彩灯控制电路
主要思路同VHDL语言设计一样,不同的是,本方案中用普通的74系列芯片分别组成定时器、移位寄存器、控制子系统CONTR及彩灯控制器。
A.由于彩灯亮、灭一次的时间为1秒,所以选择系统的时钟CLK的频率为1HZ使亮灭节拍与系统时钟周期相同。
此时,32秒花型转换周期可以用一个模32的计数器对CLK脉冲计数来方便的实现定时,定时器模块取名为T32S。
为了方便操作,设置一个加电后的手工复位信号RST。
当RET有效时,将控制模块CONTR置于合适的初始状态,使其从花型1开始演示;同时将定时器模块T32S异步清零,使计时电路一开始就能正常工作。
如下图3所示:
图3:
16彩灯的定时器T32S
模为32的计数器的仿真图如下图4所示:
图4:
模为32的计数器的仿真图
因为每32秒自动转换一种花型,而一个时钟周期为1秒,所以每一种花型的总共的周期数都为32个时钟周期。
当第32个时钟脉冲输入时,此时有T0=1,由第一种花型向第二种花型转换;当第64个时钟脉冲输入时,此时又有T0=1,由第二种花型向第三种花型转换:
当第96个时钟脉冲输入时,此时又有T0=1,由第三种花型向第四种花型转换;当第128个时钟脉冲输入时,此时又有T0=1,由第四种花型向第一种花型转换,如此的循环下去。
B.实现数据子系统操作控制功能的部分即为发控制子系统,控制器模块取名为CONTR,如下图5所示:
图5:
16彩灯的控制系统CONTR
因为控制子系统需要异步位功能,所以选择74161作为控制器的状态存储芯片。
其中一些激励和输出表达式为:
D=0C=QCB=QBA=QCQAL7
PR=(QC
QB)R7QR=
L0QL=
P7=
=P5=P3=P1=Q7=Q5=Q3=Q1
P6=
=P4=P0=P2=Q6=Q4=Q2=Q0
为了保证开始工作时控制器处于S0(000)状态,加电后首先通过复位信号RST将控制器异步清零
C.把定时器T32S、控制系统CONTR和移位寄存器组成总的电路图,如下图6所示:
图6:
16彩灯的总的电路图
DR,DL分别为移位寄存器模块的右移和左移串行数据输入端,M1、M0为移位寄存器模块的方式控制端。
当M1M0=00时,移位寄存器处于保持状态;
当M1M0=01时,移位寄存器处于右移状态;
当M1M0=10时,移位寄存器处于左移状态;
当M1M0=01时,移位寄存器处于置数状态。
3、上机设计与仿真结果
A.用MAXPLUSII软件在电脑上画出电路原理图,保存,设置画出的原理图为当前原理图;
B.选择合适的芯片,然后对原理图进行编译;
C.编译选择,添加仿真激励源信号波形,选择仿真时间,保存当前的文件,并进行仿真,观察电路仿真结果,得到以下图7的仿真结果:
图7:
16彩灯的仿真图
4.上机实验—-性能测试
A.打开之前画好的原理图,设置为当前原理图;
B.选择与EL试验箱相同的芯片后,对我们所画的原理图进行编译;
C.编译正确无误后,下载到电脑上;
D.下载完毕后,对管脚进行分配,按照管脚的分配接好电路,输入端CLK接1HZ的脉冲,复位端RST与按键开关相连,用LED灯来表示16路彩灯,将Y0…Y1、Z0…Z7对应的管脚分别与16只LED等相连。
得到如下表1:
16彩灯的真值表:
个数
Z7
Z6
Z5
Z4
Z3
Z2
Z1
Z0
Y7
Y6
Y5
Y4
Y3
Y2
Y1
Y0
1
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
2
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
3
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
4
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
…
…
…
…
…
…
…
…
…
…
…
…
…
…
…
…
…
33
0
1
0
1
0
1
0
1
0
1
0
1
0
1
0
1
34
1
0
1
0
1
0
1
0
1
0
1
0
1
0
1
0
35
0
1
0
1
0
1
0
1
0
1
0
1
0
1
0
1
36
1
0
1
0
1
0
1
0
1
0
1
0
1
0
1
0
…
…
…
…
…
…
…
…
…
…
…
…
…
…
…
…
…
65
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
66
1
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
67
1
1
0
0
0
0
0
0
0
0
0
0
0
0
0
0
68
1
1
1
0
0
0
0
0
0
0
0
0
0
0
0
0
69
1
1
1
1
0
0
0
0
0
0
0
0
0
0
0
0
70
1
1
1
1
1
0
0
0
0
0
0
0
0
0
0
0
71
1
1
1
1
1
1
0
0
0
0
0
0
0
0
0
0
72
1
1
1
1
1
1
1
0
0
0
0
0
0
0
0
0
73
1
1
1
1
1
1
1
1
0
0
0
0
0
0
0
0
74
1
1
1
1
1
1
1
1
1
0
0
0
0
0
0
0
75
1
1
1
1
1
1
1
1
1
1
0
0
0
0
0
0
76
1
1
1
1
1
1
1
1
1
1
1
0
0
0
0
0
77
1
1
1
1
1
1
1
1
1
1
1
1
0
0
0
0
78
1
1
1
1
1
1
1
1
1
1
1
1
1
0
0
0
79
1
1
1
1
1
1
1
1
1
1
1
1
1
1
0
0
80
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
0
81
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
82
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
0
83
1
1
1
1
1
1
1
1
1
1
1
1
1
1
0
0
84
1
1
1
1
1
1
1
1
1
1
1
1
1
0
0
0
85
1
1
1
1
1
1
1
1
1
1
1
1
0
0
0
0
86
1
1
1
1
1
1
1
1
1
1
1
0
0
0
0
0
87
1
1
1
1
1
1
1
1
1
1
0
0
0
0
0
0
88
1
1
1
1
1
1
1
1
1
0
0
0
0
0
0
0
89
1
1
1
1
1
1
1
1
0
0
0
0
0
0
0
0
90
1
1
1
1
1
1
1
0
0
0
0
0
0
0
0
0
91
1
1
1
1
1
1
0
0
0
0
0
0
0
0
0
0
92
1
1
1
0
1
0
0
0
0
0
0
0
0
0
0
0
93
1
1
1
1
0
0
0
0
0
0
0
0
0
0
0
0
94
1
1
0
0
0
0
0
0
0
0
0
0
0
0
0
0
95
1
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
96
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
97
1
0
0
0
0
0
0
0
0
0
0
0
0
0
0
1
98
1
1
0
0
0
0
0
0
0
0
0
0
0
0
1
1
99
1
1
1
0
0
0
0
0
0
0
0
0
0
1
1
1
100
1
1
1
1
0
0
0
0
0
0
0
0
1
1
1
1
101
1
1
1
1
1
0
0
0
0
0
0
1
1
1
1
1
102
1
1
1
1
1
1
0
0
0
0
1
1
1
1
1
1
103
1
1
1
1
1
1
1
0
0
1
1
1
1
1
1
1
104
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
105
1
1
1
1
1
1
1
0
0
1
1
1
1
1
1
1
106
1
1
1