引用 基于VHDL的交通灯设计
人工智能论文
一、丁字路口

如图当西方向和南方向绿灯亮时,其他方向亮红灯容许西向左转至南,当东西方向绿灯亮时,南北方向红灯亮容许北向右转至东,当北西方向绿灯时其他方向红灯亮并容许北左转至西。交通灯维持变亮的时间取决于键盘输入的控制键值。总体由状态机实现控制,本设计中使用状态机设有7个状态分别控制东西和南北两个方向的交通,分别对应西南绿灯亮东北红灯亮、南向黄灯亮并闪烁5秒、东西红绿亮南北红灯亮、东黄灯亮、西北绿灯亮东南红灯亮和出现紧急状况时所有方向上的红灯同时变亮。 键盘输入模块控制倒数计数时间以及复位等功能,控制电路模块用来接收键盘产生的倒计数时间分配输出的各个红绿灯的亮灭,实现各种状态的转换,倒计秒数显示倒计时时间,红绿灯显示为最终输出结果。同时键盘有复位功能,交通灯控制具有复位初始状态的功能。数码管显示分为四组,分别用来显示红、绿、黄灯倒计时,状态循环周期,以及键盘输入值显示。
1、键值输入识别程序段 library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; use ieee.std_logic_arith.all;
entity KeyIN is port( clk:in std_logic; RL :in std_logic_vector(7 downto 0); getkey:out std_logic; keyvalue : buffer std_logic_vector(3 downto 0); kb0 :buffer std_logic:='0'); end KeyIN;
architecture arch of KeyIN is FUNCTION coder(RL:std_logic_vector(7 downto 0)) --coder函数,列值译码 RETURN std_logic_vector IS variable result:std_logic_vector(2 downto 0); begin case RL(7 downto 0) is when "11111110" =>result:="000"; when "11111101" =>result:="001"; when "11111011" =>result:="010"; when "11110111" =>result:="011"; when "11101111" =>result:="100"; when "11011111" =>result:="101"; when "10111111" =>result:="110"; when others =>result:="111"; end case; RETURN result; end coder; signal delay : std_logic :='1'; BEGIN read:PROCESS(clk) variable count: integer:=0; variable keycode:std_logic_vector(3 downto 0); begin if(clk'event and clk='1')then --按行扫描,kb0='0'或'1'时,分别扫第0、1行; 默认kb0='0'。 getkey<=delay; if(RL/="11111111")then --有按键时,列值不为全1 count:=count+1; if(delay='1')then if(count=20)then keycode(3):=kb0; keycode(2 downto 0):=coder(RL); --调用coder函数 keyvalue<=keycode; --获取键值 delay<='0'; end if; end if; else --无按键,换状态,kb0取反 kb0<=not(kb0); delay<='1'; count:=0; end if; end if; end process read; end arch;
[1] [2] [3] [4] 下一页
人工智能论文
毕业论文 论文 优秀作文网 论文网 |