南昌大学实验报告
学生姓名: 学 号: 6100210173 专业班级: 中兴101班
实验类型: □验证 □综合 ■设计 □创新 实验日期: 2012
实验五 十字路口交通灯控制器设计
一、实验目的
1) 熟悉状态机的使用; 2) 熟悉多进程程序设计;
3) 熟悉实验设备和软件,掌握实验操作。 二、实验内容和要求
1、一条主干道,一条乡间公路。组成十字路口,要求优先保证主干道通行。有MR(主红)、MY(主黄)、MG(主绿)、BR(乡红)、BY(乡黄)、BG(乡绿)六盏交通灯需要控制;交通灯由绿→红有5秒黄灯亮的间隔时间,由红→绿没有间隔时间;系统有MRBY、MRBG、MYBR、MGBR四个状态;
2、乡间公路右侧埋有一个传感器,当有车辆通过乡间公路时,发出请求信号SB=1, 余时间S=0;主干道也有一个,当有车经过的时候,发出请求信号SM=1;
3、平时系统停留在MGBR(主干道通行)状态,一旦SB信号有效,经MYBR(黄灯状态)转入MRBG(乡间公路通行)状态,但要保证MGBR的状态不得短于45s;一旦SB信号无效,系统脱离MRBG状态。随即经MRBY(黄灯状态)进入MGBR状态,即使SB信号一直有效,MRBG状态也不得长于25秒钟。
三、设计思想
1、程序部共分为五大模块 1、五秒倒计时
2、二十五秒倒计时 3、四十五秒倒计时 4、状态机设计
5、数码管选择并分配
其中有一个问题,计时时钟和数码管选择不能使用一个时钟,因为数码管选择需要很高频率的时钟,而计时时钟需要1HZ时钟,因此在结构体中还有一个进程,用于把CLKS数码管选择时钟分频后得到CLK,把它用于计时时钟。
2、程序设计所要达到的效果
开始,SM=0、SB=0,处于主绿从红的状态,且这时数码管不计数。若SM=1(主有车)、SB=0(从无车),状态不变;若SM=0、SB=1,此时主干道由绿变黄再变红,而从干道待主干道变红时即变绿;若SM=1、SB=1,此时数码管进行45s倒计时后,转入主黄从红的状态,计时5s后转入主红从绿的状态,计时25s后,在转入主红从黄的状态,最后计时5s后又从新回到主绿从黄的状态。若在状态进行转换的时候SM、SB的状态发生了变化,即按上述SM、SB如何变化进行状态转换。
1
1
3、状态转移图如下 (仅当SM=1时) SB=0 C<5 SB=1 C>45s MGBR MYBR
SB=1 5秒后 5秒后 C<5 SB=1 C<25
MRBY MRBG
SB=1 C>25
四、试验程序
状态控接控制的实验总框图 制程序 红绿黄灯 1000分频 扫描显示程序 45s延时 25s延时 数码管显示控制程序 5s延时
--1000分频程序 LIBRARY IEEE;
2
2
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY cou1 IS
GENERIC(N: INTEGER :=4); --定义一个generic PORT(CLK:IN STD_LOGIC;
CLK1:OUT STD_LOGIC); END cou1;
ARCHITECTURE behav OF cou1 IS
SIGNAL CNT :STD_LOGIC_VECTOR(9 DOWNTO 0) ; BEGIN
PROCESS(CLK) BEGIN
IF CLK'EVENT AND CLK = '1' THEN --产生一个占空比为50%的方波 IF CNT>=N/2-1 THEN CLK1<='1';CNT<=CNT+1;
IF CNT=N-1 THEN CLK1<='0';CNT<=\"0000000000\"; END IF;
ELSE CLK1<='0';CNT<=CNT+1; END IF;
END IF; END PROCESS;
END ARCHITECTURE behav;
--状态控制程序 --JTDKZ.VHD LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL; ENTITY JTDKZ IS
PORT(CLK,SM,SB:IN STD_LOGIC; --MR:主干道红灯 MY:主黄 MG:主绿 MR,MY,MG,BR,BY,BG:OUT STD_LOGIC); --BR:从干道红灯 BY: 从黄 BG:从绿
--以上信号为1时点亮相应的灯
END ENTITY JTDKZ; --SM=1 主干道有车 SM=0 主干道无车 ARCHITECTURE ART OF JTDKZ IS --SB=1 从干道有车 SB=0 从干道无车 TYPE STATE_TYPE IS(A,B,C,D); SIGNAL STATE: STATE_TYPE; BEGIN
CNT:PROCESS(CLK) IS
VARIABLE S:INTEGER RANGE 0 TO 45; VARIABLE CLR,EN:BIT; BEGIN
IF(CLK'EVENT AND CLK='1')THEN IF CLR='0'THEn
3
3
S:=0;
ELSIF EN='0' THEN S:=S; ELSE S:=S+1; END IF;
CASE STATE IS
WHEN A=>MR<='0'; MY<='0'; MG<='1'; --状态一:主绿从红 BR<='1'; BY<='0'; BG<='0';
IF(SB AND SM)='1' THEN --主从干道都有车时进行45s倒 IF S=45 THEN --计时,计完后转入状态二 STATE<=B; CLR:='0'; EN:='0'; ELSE
STATE<=A; CLR:='1'; EN:='1'; END IF;
ELSIF(SB AND (NOT SM))='1' THEN --主干道无车,从干道有车转到状态二 STATE<=B; CLR:='0'; EN:='0'; ELSE
STATE<=A; CLR:='1'; EN:='1'; END IF;
WHEN B=>MR<='0'; MY<='1'; MG<='0'; --状态二:主黄从红 BR<='1'; BY<='0'; BG<='0';
IF S=5 THEN --5s倒计时,计完转入状态三 STATE<=C;CLR:='0'; EN:='0'; ELSE
STATE<=B; CLR:='1'; EN:='1'; END IF;
WHEN C=>MR<='1'; MY<='0'; MG<='0'; --状态三:主红从绿 BR<='0'; BY<='0'; BG<='1';
IF(SM AND SB)='1' THEN --主从干道都有车,25s倒计时后转入 IF S=25 THEN --状态四 STATE<=D; CLR:='0'; EN:='0'; ELSE
STATE<=C; CLR:='1'; EN:='1'; END IF;
ELSIF SB='0' THEN --若从干道此时无车,直接转入状态四 STATE<=D; CLR:='0'; EN:='0'; ELSE
STATE<=C; CLR:='1'; EN:='1'; END IF;
WHEN D=>MR<='1'; MY<='0'; MG<='0'; --状态四:主红从黄 BR<='0'; BY<='1'; BG<='0';
IF S=5 THEN --5s倒计时后转入状态一 STATE<=A;CLR:='0'; EN:='0';
4
4
ELSE
STATE<=D; CLR:='1'; EN:='1'; END IF; END CASE; END IF;
END PROCESS CNT;
END ARCHITECTURE ART;
--45s延时
--CNT45S.VHD LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY CNT45S IS
PORT(SB,CLK,EN45:IN STD_LOGIC;
DOUT45M,DOUT45B:OUT STD_LOGIC_VECTOR(7 DOWNTO 0)); END ENTITY CNT45S;
ARCHITECTURE ART OF CNT45S IS
SIGNAL CNT6B: STD_LOGIC_VECTOR(5 DOWNTO 0); BEGIN
PROCESS(SB,CLK,EN45) IS BEGIN
IF SB='0'THEN CNT6B<=CNT6B-CNT6B-1; --若从干道无车,不计时 ELSIF(CLK'EVENT AND CLK= '1')THEN IF EN45='1'THEN CNT6B<=CNT6B+1;
ELSIF EN45='0'THEN CNT6B<=CNT6B-CNT6B-1; --若主干道不是绿灯不计时 END IF; END IF;
END PROCESS; -- --将顺序计数转化为倒序45s BCD码计数
PROCESS(CNT6B) IS ----DOUT45M从45到0;DOUT45B从50到5,然后从5直接变到0, BEGIN ----因为在状态二的时候有5S黄灯时间需要在从干道上显示,从干道 CASE CNT6B IS --上的人累计等待时间50s
WHEN \"000000\"=>DOUT45M<=\"01000101\"; DOUT45B<=\"01010000\"; WHEN \"000001\"=>DOUT45M<=\"01000100\"; DOUT45B<=\"01001001\"; WHEN \"000010\"=>DOUT45M<=\"01000011\"; DOUT45B<=\"01001000\"; WHEN \"000011\"=>DOUT45M<=\"01000010\"; DOUT45B<=\"01000111\"; WHEN \"000100\"=>DOUT45M<=\"01000001\"; DOUT45B<=\"01000110\"; WHEN \"000101\"=>DOUT45M<=\"01000000\"; DOUT45B<=\"01000101\"; WHEN \"000110\"=>DOUT45M<=\"00111001\"; DOUT45B<=\"01000100\"; WHEN \"000111\"=>DOUT45M<=\"00111000\"; DOUT45B<=\"01000011\"; WHEN \"001000\"=>DOUT45M<=\"00110111\"; DOUT45B<=\"01000010\"; WHEN \"001001\"=>DOUT45M<=\"00110110\"; DOUT45B<=\"01000001\"; WHEN \"001010\"=>DOUT45M<=\"00110101\";DOUT45B<=\"01000000\";
5
5
WHEN \"001011\"=>DOUT45M<=\"00110100\"; DOUT45B<=\"01101001\"; WHEN \"001100\"=>DOUT45M<=\"00110011\"; DOUT45B<=\"00111000\"; WHEN \"001101\"=>DOUT45M<=\"00110010\"; DOUT45B<=\"00110111\"; WHEN \"001110\"=>DOUT45M<=\"00110001\"; DOUT45B<=\"00110110\"; WHEN \"001111\"=>DOUT45M<=\"00110000\"; DOUT45B<=\"00110101\"; WHEN \"010000\"=>DOUT45M<=\"00101001\"; DOUT45B<=\"00110100\"; WHEN \"010001\"=>DOUT45M<=\"00101000\"; DOUT45B<=\"00110011\"; WHEN \"010010\"=>DOUT45M<=\"00100111\"; DOUT45B<=\"00110010\"; WHEN \"010011\"=>DOUT45M<=\"00100110\"; DOUT45B<=\"00110001\"; WHEN \"010100\"=>DOUT45M<=\"00100101\"; DOUT45B<=\"00110000\"; WHEN \"010101\"=>DOUT45M<=\"00100100\"; DOUT45B<=\"00101001\"; WHEN \"010110\"=>DOUT45M<=\"00100011\"; DOUT45B<=\"00101000\"; WHEN \"010111\"=>DOUT45M<=\"00100010\"; DOUT45B<=\"00100111\";
WHEN \"011000\"=>DOUT45M<=\"00100001\"; DOUT45B<=\"00100110\"; WHEN \"011001\"=>DOUT45M<=\"00100000\"; DOUT45B<=\"00100101\"; WHEN \"011010\"=>DOUT45M<=\"00011001\"; DOUT45B<=\"00100100\"; WHEN \"011011\"=>DOUT45M<=\"00011000\"; DOUT45B<=\"00100011\"; WHEN \"011100\"=>DOUT45M<=\"00010111\"; DOUT45B<=\"00100010\"; WHEN \"011101\"=>DOUT45M<=\"00010110\"; DOUT45B<=\"00100001\"; WHEN \"011110\"=>DOUT45M<=\"00010101\"; DOUT45B<=\"00100000\"; WHEN \"011111\"=>DOUT45M<=\"00010100\"; DOUT45B<=\"00011001\"; WHEN \"100000\"=>DOUT45M<=\"00010011\"; DOUT45B<=\"00011000\"; WHEN \"100001\"=>DOUT45M<=\"00010010\"; DOUT45B<=\"00010111\"; WHEN \"100010\"=>DOUT45M<=\"00010001\"; DOUT45B<=\"00010110\"; WHEN \"100011\"=>DOUT45M<=\"00010000\"; DOUT45B<=\"00010101\";
WHEN \"100100\"=>DOUT45M<=\"00001001\"; DOUT45B<=\"00010100\"; WHEN \"100101\"=>DOUT45M<=\"00001000\"; DOUT45B<=\"00010011\"; WHEN \"100110\"=>DOUT45M<=\"00000111\"; DOUT45B<=\"00010010\"; WHEN \"100111\"=>DOUT45M<=\"00000110\"; DOUT45B<=\"00010001\"; WHEN \"101000\"=>DOUT45M<=\"00000101\"; DOUT45B<=\"00010000\"; WHEN \"101001\"=>DOUT45M<=\"00000100\"; DOUT45B<=\"00001001\"; WHEN \"101010\"=>DOUT45M<=\"00000011\"; DOUT45B<=\"00001000\"; WHEN \"101011\"=>DOUT45M<=\"00000010\"; DOUT45B<=\"00000111\"; WHEN \"101100\"=>DOUT45M<=\"00000001\"; DOUT45B<=\"00000110\"; WHEN OTHERS=>DOUT45M<=\"00000000\"; DOUT45B<=\"00000000\"; END CASE; END PROCESS;
END ARCHITECTURE ART;
--25s延时 (与45s延时编程思想一样,这里不做说明了) --CNT25S.VHD LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
6
6
ENTITY CNT25S IS
PORT(SB,SM,CLK,EN25:IN STD_LOGIC;
DOUT25M,DOUT25B:OUT STD_LOGIC_VECTOR(7 DOWNTO 0)); END ENTITY CNT25S;
ARCHITECTURE ART OF CNT25S IS
SIGNAL CNT5B: STD_LOGIC_VECTOR(4 DOWNTO 0); BEGIN
PROCESS(SB,SM,CLK,EN25) IS BEGIN
IF SB='0' OR SM='0' THEN CNT5B<=CNT5B-CNT5B-1;
ELSIF(CLK'EVENT AND CLK= '1')THEN IF EN25='1' THEN CNT5B<=CNT5B+1; ELSIF EN25='0'THEN
CNT5B<=CNT5B-CNT5B-1; END IF; END IF;
END PROCESS;
PROCESS(CNT5B) IS BEGIN
CASE CNT5B IS
WHEN \"00000\"=>DOUT25B<=\"00100101\"; DOUT25M<=\"00110000\"; WHEN \"00001\"=>DOUT25B<=\"00100100\"; DOUT25M<=\"00101001\"; WHEN \"00010\"=>DOUT25B<=\"00100011\"; DOUT25M<=\"00101000\"; WHEN \"00011\"=>DOUT25B<=\"00100010\"; DOUT25M<=\"00100111\"; WHEN \"00100\"=>DOUT25B<=\"00100001\"; DOUT25M<=\"00100110\"; WHEN \"00101\"=>DOUT25B<=\"00100000\"; DOUT25M<=\"00100101\"; WHEN \"00110\"=>DOUT25B<=\"00011001\"; DOUT25M<=\"00100100\"; WHEN \"00111\"=>DOUT25B<=\"00011000\"; DOUT25M<=\"00100011\"; WHEN \"01000\"=>DOUT25B<=\"00010111\"; DOUT25M<=\"00100010\"; WHEN \"01001\"=>DOUT25B<=\"00010110\"; DOUT25M<=\"00100001\"; WHEN \"01010\"=>DOUT25B<=\"00010101\"; DOUT25M<=\"00100000\"; WHEN \"01011\"=>DOUT25B<=\"00010100\"; DOUT25M<=\"00011001\"; WHEN \"01100\"=>DOUT25B<=\"00010011\"; DOUT25M<=\"00011000\"; WHEN \"01101\"=>DOUT25B<=\"00010010\"; DOUT25M<=\"00010111\"; WHEN \"01110\"=>DOUT25B<=\"00010001\"; DOUT25M<=\"00010110\"; WHEN \"01111\"=>DOUT25B<=\"00010000\"; DOUT25M<=\"00010101\"; WHEN \"10000\"=>DOUT25B<=\"00001001\"; DOUT25M<=\"00010100\"; WHEN \"10001\"=>DOUT25B<=\"00001000\"; DOUT25M<=\"00010011\"; WHEN \"10010\"=>DOUT25B<=\"00000111\"; DOUT25M<=\"00010010\"; WHEN \"10011\"=>DOUT25B<=\"00000110\"; DOUT25M<=\"00010001\"; WHEN \"10100\"=>DOUT25B<=\"00000101\"; DOUT25M<=\"00010000\"; WHEN \"10101\"=>DOUT25B<=\"00000100\"; DOUT25M<=\"00001001\";
7
7
WHEN \"10110\"=>DOUT25B<=\"00000011\"; DOUT25M<=\"00001000\"; WHEN \"10111\"=>DOUT25B<=\"00000010\"; DOUT25M<=\"00000111\"; WHEN \"11000\"=>DOUT25B<=\"00000001\"; DOUT25M<=\"00000110\"; WHEN OTHERS=>DOUT25B<=\"00000000\"; DOUT25M<=\"00000000\"; END CASE;
END PROCESS;
END ARCHITECTURE ART;
--5s延时 (与45s类似) --CNT05S.VHD LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY CNT05S IS
PORT(CLK,EN05M,EN05B:IN STD_LOGIC;
DOUT5: OUT STD_LOGIC_VECTOR(7 DOWNTO 0));
END ENTITY CNT05S;
ARCHITECTURE ART OF CNT05S IS
SIGNAL CNT3B: STD_LOGIC_VECTOR(2 DOWNTO 0); BEGIN
PROCESS(CLK,EN05M,EN05B) IS BEGIN
IF(CLK'EVENT AND CLK= '1')THEN IF EN05M='1' OR EN05B='1' THEN CNT3B<=CNT3B+1; ELSE
CNT3B<=\"000\"; END IF; END IF;
END PROCESS;
PROCESS(CNT3B) IS BEGIN
CASE CNT3B IS
WHEN \"000\"=>DOUT5<=\"00000101\"; WHEN \"001\"=>DOUT5<=\"00000100\"; WHEN \"010\"=>DOUT5<=\"00000011\"; WHEN \"011\"=>DOUT5<=\"00000010\"; WHEN \"100\"=>DOUT5<=\"00000001\";
WHEN OTHERS=>--DOUT5<=\"00000000\"; END CASE; END PROCESS;
END ARCHITECTURE ART;
8
8
--数码管显示控制程序 --XSKZ.VHD LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY XSKZ IS
PORT(EN45,EN25,EN05M,EN05B:IN STD_LOGIC;
AIN45M,AIN45B:IN STD_LOGIC_VECTOR(7 DOWNTO 0);
AIN25M,AIN25B,AIN05:IN STD_LOGIC_VECTOR(7 DOWNTO 0); DOUTM,DOUTB: OUT STD_LOGIC_VECTOR(7 DOWNTO 0)); END ENTITY XSKZ;
ARCHITECTURE ART OF XSKZ IS BEGIN
PROCESS(EN45,EN25,EN05M,EN05B) IS BEGIN
IF EN45='1'THEN --读取MG信息,若为1则将45s延时程序中的输出显示出来 DOUTM<=AIN45M(7 DOWNTO 0); DOUTB<=AIN45B(7 DOWNTO 0);
ELSIF EN05M='1'THEN --读取MY信息,若为1则将5s延时程序中的输出显示出来 DOUTM<=AIN05(7 DOWNTO 0); DOUTB<=AIN05(7 DOWNTO 0);
ELSIF EN25='1' THEN --读取BG信息,若为1则将25s延时程序中的输出显示出来 DOUTM<=AIN25M(7 DOWNTO 0); DOUTB<=AIN25B(7 DOWNTO 0);
ELSIF EN05B='1'THEN --读取BY信息,若为1则将5s延时程序中的输出显示出来 DOUTM<=AIN05(7 DOWNTO 0); DOUTB<=AIN05(7 DOWNTO 0); END IF;
END PROCESS;
END ARCHITECTURE ART;
--扫描显示程序(和以前做的类似) LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY YMQ IS
PORT(CLK:IN STD_LOGIC;
sel0,sel1,sel2:buffer STD_LOGIC;
SG:OUT STD_LOGIC_VECTOR(7 DOWNTO 0); A:BUFFER STD_LOGIC_VECTOR(3 DOWNTO 0);
DOUTM,DOUTB: IN STD_LOGIC_VECTOR(7 DOWNTO 0);
SEL:OUT STD_LOGIC_VECTOR(2 DOWNTO 0) ); END YMQ;
ARCHITECTURE behav OF YMQ IS
9
9
SIGNAL CNT8: STD_LOGIC_VECTOR(2 DOWNTO 0); BEGIN
PROCESS( CLK)
BEGIN IF CLK'EVENT AND CLK='1' THEN
IF CNT8<\"111\" THEN CNT8 <=CNT8+1; ELSE CNT8<=(OTHERS=>'0'); END IF; END IF; SEL(0)<=sel0 ; SEL(1)<=sel1 ; SEL(2)<=sel2 ;
CASE CNT8 IS
WHEN \"000\" => sel2<='0';sel1<='0';sel0<='0';A<=\"1010\"; --显示“—” WHEN \"001\" => sel2<='0';sel1<='0';sel0<='1';A<=DOUTM(7 downto 4); --显示主干道计时 WHEN \"010\" => sel2<='0';sel1<='1';sel0<='0';A<=DOUTM(3 downto 0); WHEN \"011\" => sel2<='0';sel1<='1';sel0<='1';A<=\"1010\"; WHEN \"100\" => sel2<='1';sel1<='0';sel0<='0';A<=\"1010\";
WHEN \"101\" => sel2<='1';sel1<='0';sel0<='1';A<=DOUTB(7 downto 4); --显示从干道计时 WHEN \"110\" => sel2<='1';sel1<='1';sel0<='0';A<=DOUTB(3 downto 0); WHEN \"111\" => sel2<='1';sel1<='1';sel0<='1';A<=\"1010\"; WHEN OTHERS =>NULL; END CASE;
END PROCESS ; PROCESS(A) BEGIN
CASE A IS --译码
WHEN \"0000\" =>SG<=\"00111111\"; WHEN \"0001\" =>SG<=\"00000110\"; WHEN \"0010\" =>SG<=\"01011011\"; WHEN \"0011\" =>SG<=\"01001111\"; WHEN \"0100\" =>SG<=\"01100110\"; WHEN \"0101\" =>SG<=\"01101101\"; WHEN \"0110\" =>SG<=\"01111101\"; WHEN \"0111\" =>SG<=\"00000111\"; WHEN \"1000\" =>SG<=\"01111111\"; WHEN \"1001\" =>SG<=\"01101111\"; WHEN \"1010\" =>SG<=\"01000000\"; WHEN OTHERS=>NULL; END CASE;
END PROCESS;
END ARCHITECTURE behav;
10
10
五、实验步骤
1.新建项目,选择项目文件夹,输入工程名称,添加文件(一般为空),选择芯片型号,选择仿真工具(一般为默认),最后生成项目。
2.新建VHDL文件,输入设计语言,保存时要注意与工程文件名相同。如下图: 3.保存好后,进行综合编译,如果有错误,折回修改。
4、建立波形文件,导入结点,并设置好仿真结束时间,保存文件,进行仿真设置,然后进行波形仿真。
波形分析先从交通灯控制器的仿真图来看:
新加的信号clk1是分频后的时钟信号,为方便分析而加的。 5s后返回状态5s后进入状态 SB、SM都为1一:主绿从红 三:主红从黄25s 时,状态一:主绿从红45s 45s后进入状态二:主黄从红5s
25s后进入状态四:主红从黄5s
在图中数clk1的脉冲个数,状态一到状态二正好是45个脉冲,状态二到状态三是5个脉冲,状态三到状态四经过25个,状态四到状态一经过5个,完全符合实验要求。
11
11
下面分析SB、SM改变时,仿真结果是否符合设计要求; SM=0、SB=1时主干道由 SM=1、SB=0时从干道由绿变黄再变红,而从干道 绿变黄再变红,而主干道待主干道变红时即变绿。 待从干道变红时即变绿。 SM=0、SB=0即都没车时,主干道无条件变绿,从干道变红
下面以45s计数完后数码管显示是否合理为例进行分析:
当主干道由绿变黄从干道是红的这一时刻,数码管5、6经译码显示“05”开始计时黄灯5s 当主干道由绿变黄从干道是红的这一时刻,数码管1、2经译码显示也是“05”开始计时黄灯5s 其余的数码管显示以此为例进行分析均满足设计要求。
12
12
下面给出状态转移图,如图所示:
六、硬件测试结果
下载好后,就可以在实验板上观察实验现象了。 开始时SB=0、SM=0在主道绿从道红
(1)若SB=1、SM=0,主道黄从道红,SB=1、SM=1,进行45s倒计时后转到主道黄从道红的状态 (2)这里将SB和SM都为1,45S倒计时完后马上转到主道黄从道红的状态,并进行5s 倒计时。 (3)计时完后即转到主道红从道绿的状态,并进行25s倒计时 (4)计时完后转到主道红从道黄的状态,进行5s倒计时 (5)最后转回主道绿从道黄的状态继续循环
若状态转换的时候SB和SM中途改变,现象皆按预想转换
实验现象与实验要求相符合,因此实验成功。 七、实验心得体会
本次试验设计给我最深刻的体会是:一个好的设计程序应该有一个主控制器,就像人的大脑样,人由大脑来控制身体各部位的运动,进行集中管理,显得有条不紊,不容易出现难以发现或意想不到的错误,以前做的实验对于程序的控制显得十分零散,控制度不够集中,尽管也能完成实验要求,但设计思想显得差了一个层次,本次实验的设计思想是我以后设计程序应该朝向的一个方向。 八、参考文献
《EDA技术实用教程》 潘松 黄继业 《EDA实验指导书》 丁杰 朱启标 《EDA技术综合应用实例与分析》 谭会生 翟遂春
13
13
因篇幅问题不能全部显示,请点此查看更多更全内容