《基于状态机的交通灯控制》由会员分享,可在线阅读,更多相关《基于状态机的交通灯控制(5页珍藏版)》请在金锄头文库上搜索。
1、实验三:基于状态机的交通灯控制设计要求:1、 开发板上三个led等分别代表公路上红黄绿三种颜色交通灯,D3代表红灯,D5代表黄灯,D7代表绿灯 。D3,D5,D7 对应开发板的IO口为120,118,116 。2、 交通灯状态机初始状态为红灯,交通灯工作过程依次是红 绿 黄 红。3、 为了方便观察,本次实验要求红灯的显示时间为9s,绿灯显示时间为6s ,黄灯显示时间为3s ,时间需要倒计时,在数码管Q4上显示。Q4的使能端(低电平有效)对应开发板IO口为168,八段led对应IO口为 AH (144,158,162,160,159,156,163,161)。4、 编程之前要求同学们先画好ASM
2、图。5、 1Hz分频模块请采用第二次实验中的内容(文件夹中的clk_1s.vhd),7段码显示模块请参考书本151页内容。附:八段led译码列表 : A B C D E F G H00 0 0 0 0 0 1 011 0 0 1 1 1 1 02 0 0 1 0 0 1 0 03 0 0 0 0 1 1 0 041 0 0 1 1 0 0 050 1 0 0 1 0 0 06 0 1 0 0 0 0 0 070 0 0 1 1 1 1 08 0 0 0 0 0 0 0 09 0 0 0 0 1 0 0 0Library ieee;Use ieee.std_logic_1164.all;Enti
3、ty traffic isPort(clk:IN std_logic; q4:OUT std_logic; seven_seg_input:OUT std_logic_vector(7 downto 0); light_RGY:OUT std_logic_vector(2 downto 0);End traffic;Architecture behav of traffic isSignal seven_seg_input_reg:std_logic_vector(7 downto 0);Signal time:integer RANGE 0 to 49999999;-Signal q:std
4、_logic;Signal light_time:integer RANGE 0 to 17;Type state_type is(R,G,Y);Signal light_state:state_type;Beginq4 seven_seg_input_reg=00001001;light_state seven_seg_input_reg=00000001;light_state seven_seg_input_reg=00011111;light_state seven_seg_input_reg=01000001;light_state seven_seg_input_reg=01001
5、001;light_state seven_seg_input_reg=10011001;light_state seven_seg_input_reg=00001101;light_state seven_seg_input_reg=00100101;light_state seven_seg_input_reg=10011111;light_state seven_seg_input_reg=01000001;light_state seven_seg_input_reg=01001001;light_state seven_seg_input_reg=10011001;light_sta
6、te seven_seg_input_reg=00001101;light_state seven_seg_input_reg=00100101;light_state seven_seg_input_reg=10011111;light_state seven_seg_input_reg=00001101;light_state seven_seg_input_reg=00100101;light_state seven_seg_input_reg=10011111;light_state seven_seg_input_reg=00000011;end case;seven_seg_inp
7、ut=seven_seg_input_reg;end process;-seqseq:process(clk)beginif rising_edge(clk) thentime= 25000000 then -q=1;if time=49999999 then -time=0;end if;elseq=0;end if;end if;end process seq;-ns:ns:process(q)beginif(rising_edge(q)thenlight_time=light_time + 1;if light_time = 17 thenlight_timelight_RGYlight_RGYlight_RGY=001;end case;end process op;end behav;