交通灯信号控制器的设计实验报告Word格式文档下载.docx
《交通灯信号控制器的设计实验报告Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《交通灯信号控制器的设计实验报告Word格式文档下载.docx(19页珍藏版)》请在冰豆网上搜索。
在定时单元CNT45S和CNT25S的设计中,根据设计要求需要进行减计数,但本设计中仍使用的是加法计数,只是在将计数结果转换成两位BCD码时,将计数的最小值对应转换成显示定时的最大值,计数值加1时,转换的显示值减1,以此类推。
同时,由于主、支道从亮绿灯转到亮红灯中间有5s亮黄灯的时间过渡,因此对应的支、主道亮红灯的时间比对应的主、支道亮绿灯的时间要多5s,考虑到此原因,CNT45S和CNT25S计数器在把计数结果转换成显示的BCD码值时,将用于驱动绿灯的BCD码按实际定时要求转换,而将对应的用于驱动红灯的BCD码在实际定时要求的基础上加5进行转换。
4、实验设计
1)
系统原理框图
本系统总体可分为两个两个层次,即LED显示和数码管显示,核心模块为JTDKZ产生系统的所有信号
2)VHDL程序
◆JTDKZ的VHDL程序
--Jtdkz.vhd
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
ENTITYJTDKZIS
PORT(CLK,SM,SB:
INSTD_LOGIC;
MR,MY,MG,BR,BY,BG:
OUTSTD_LOGIC);
ENDENTITYJTDKZ;
ARCHITECTUREARTOFJTDKZIS
TYPESTATE_TYPEIS(A,B,C,D);
SIGNALSTATE:
STATE_TYPE:
=A;
BEGIN
CNT:
PROCESS(CLK)IS
VARIABLES:
INTEGERRANGE0TO45:
=0;
VARIABLECLR:
BIT:
='
0'
;
VARIABLEEN:
BEGIN
IF(CLK'
EVENTANDCLK='
1'
)THEN
IFCLR='
THENS:
ELSIFEN='
=S;
ELSES:
=S+1;
ENDIF;
CASESTATEIS
WHENA=>
MR<
MY<
MG<
BR<
BY<
BG<
IF(SBANDSM)='
THEN
IFS=45THENSTATE<
=B;
CLR:
EN:
ELSESTATE<
ENDIF;
ELSIF(SBAND(NOTSM))='
STATE<
=C;
--STATE<
=B
ELSESTATE<
--
ENDIF;
WHENB=>
IFS=5THENSTATE<
ELSESTATE<
ENDIF;
WHENC=>
IFS=25THENSTATE<
=D;
ELSIFSB='
THENSTATE<
ELSIFS=25THENSTATE<
WHEND=>
WHENOTHERS=>
ENDCASE;
ENDPROCESSCNT;
ENDARCHITECTUREART;
◆XSKZ的VHDL程序
--Xskz.vhd
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYXSKZIS
PORT(EN45,EN25,EN05M,EN05B:
AIN45M,AIN45B,AIN25M,AIN25B,AIN05:
INSTD_LOGIC_VECTOR(7DOWNTO0);
DOUTM,DOUTB:
OUTSTD_LOGIC_VECTOR(7DOWNTO0));
ENDENTITYXSKZ;
ARCHITECTUREARTOFXSKZIS
BEGIN
PROCESS(EN45,EN25,EN05M,EN05B,AIN45M,AIN45B,AIN25M,AIN25B,AIN05)IS
IFEN45='
THENDOUTM<
=AIN45M(7DOWNTO0);
DOUTB<
=AIN45B(7DOWNTO0);
ELSIFEN05M='
=AIN05(7DOWNTO0);
ELSIFEN25='
=AIN25M(7DOWNTO0);
=AIN25B(7DOWNTO0);
ELSIFEN05B='
ENDPROCESS;
◆CNT05S的VHDL程序
--Cnt05s.vhd
ENTITYCNT05SIS
PORT(CLK,EN05M,EN05B:
DOUT5:
ENDENTITYCNT05S;
ARCHITECTUREARTOFCNT05SIS
SIGNALCNT3B:
STD_LOGIC_VECTOR(2DOWNTO0);
PROCESS(CLK,EN05M,EN05B)IS
BEGIN
IF(CLK'
IFEN05M='
THENCNT3B<
=CNT3B+1;
ELSIFEN05B='
=CNT3B-CNT3B-1;
ENDIF;
ENDIF;
ENDPROCESS;
PROCESS(CNT3B)IS
CASECNT3BIS
WHEN"
000"
=>
DOUT5<
="
00000101"
001"
00000100"
010"
00000011"
011"
00000010"
100"
00000001"
WHENOTHERS=>
00000000"
ENDCASE;
◆CNT25S的VHDL程序
--Cnt25s.vhd
ENTITYCNT25SIS
PORT(SB,SM,CLK,EN25:
DOUT25M,DOUT25B:
ENDENTITYCNT25S;
ARCHITECTUREARTOFCNT25SIS
SIGNALCNT5B:
STD_LOGIC_VECTOR(4DOWNTO0);
PROCESS(SB,SM,CLK,EN25)IS
IF(SB='
ORSM='
)THENCNT5B<
=CNT5B-CNT5B-1;
ELSIF(CLK'
IFEN25='
THENCNT5B<
=CNT5B+1;
ELSIFEN25='
PROCESS(CNT5B)IS
CASECNT5BISWHEN"
00000"
DOUT25M<
00100101"
DOUT25B<
00110000"
WHEN"
00001"
00100100"
00101001"
WHEN"
00010"
00100011"
00101000"
00011"
00100010"
00100111"
00100"
00100001"
00100110"
00101"
00100000"
00110"
00011001"
00111"
00011000"
01000"
00010111"
01001"
00010110"
01010"
00010101"
01011"
00010100"
01100"
00010011"
01101"
00010010"
01110"
00010001"
01111"
00010000"
10000"
00001001"
10001"
00001000"
10010"
00000111"
10011"
00000110"
10100"
10101"
10110"
10111"
11000"
WHENOTHERS=>
◆CNT45S的VHDL程序
--Cnt45s.vhd
ENTITYCNT45SIS
PORT(SB,SM,CLK,EN45:
DOUT45M,DOUT45B:
ENDENTITYCNT45S;
ARCHITECTUREARTOFCNT45SIS
SIGNALCNT6B:
STD_LOGIC_VECTOR(5DOWNTO0);
PROCESS(SB,SM,CLK,EN45)IS
IFSB='
ORSM='
THENCNT6B<
=CNT6B-CNT6B-1;
IFEN45='
=CNT6B+1;
ELSIFEN45='
PROCESS(CNT6B)IS
CASECNT6BIS
000000"
DOUT45M<
01000101"
DOUT45B<
01010000"
000001"
01000100"
01001001"
000010"
01000011"
01001000"
000011"
01000010"
01000111"
000100"
01000001"
01000110"
000101"
01000000"
000110"
00111001"
000111"
00111000"
001000"
00110111"
001001"
00110110"
001010"
00110101"
001011"
00110100"
001100"
00110011"
001101"
00110010"
001110"
00110001"
001111"
010000"
010001"
010010"
010011"
010100"
010101"
010110"
010111"
WHEN"
011000"
011001"
011010"
011011"
011100"
011101"
011110"
011111"
100000"
100001"
100010"
100011"
100100"
100101"
100110"
100111"
101000"
101001"
101010"
101011"
101100"