本文主要是介绍汽车尾灯控制电路设计VHDL课程设计,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
汽车尾灯控制电路设计
- 题目
- 分析
- 代码
- 板载测试
题目
(1)使用开发板上最左与最右两组指示灯作为汽车尾部左右灯组,使用按键开关作为操控汽车的控制信号。
(2)要求:汽车启动时尾灯全亮,持续约1-2秒钟后熄灭,汽车正常行驶时指示灯全灭,右转时最右一组指示灯(八个)向右依次反复循环点亮;左转时最左一组指示灯(八个)向左依次反复循环点亮;刹车时两组灯全亮,熄火时全灭。
分析
五个功能:启动、熄火、刹车、左转、右转。
代码
LIBRARY IEEE;
USE ieee.std_logic_1164.all;
USE ieee.std_logic_arith.all;
USE ieee.std_logic_unsigned.all;
ENTITY pan is
port(clk,start,left,right,brake,stop:in std_logic;LR:out std_logic_vector(15 downto 0));
END ENTITY pan;ARCHITECTURE one of pan is
TYPE STATETP IS(S1,S2,S3,S4,S5,S6); --6个状态
SIGNAL regl,regr,regb,regs,regt:STD_LOGIC;
BEGINPROCESS(clk)
variable count:INTEGER RANGE 0 TO 8;
variable num:INTEGER RANGE 0 TO 200:=0;
variable S:STATETP;
variable TAP:std_logic_vector(15 downto 0);
BEGIN
if clk'EVENT AND clk='1' then regl<=left;regr<=right;regt<=start;regb<=brake; --上升沿来到检查并且选择状态regs<=stop; if regl='0' AND left='1' then --左转的键由关到开S:=S1;TAP:="1000000000000000";elsif regr='0'AND right='1' then --右转的键由关到开S:=S2;TAP:="0000000000000001";elsif regb='0' AND brake='1' then --刹车键由关到开S:=S3;TAP:="1111111111111111";elsif regs='0' AND stop='1' then --熄火键由关到开S:=S4;TAP:="0000000000000000";elsif regt='0' AND start='1' then --启动键由关到开S:=S5;TAP:="1111111111111111";num:=0;elsif regl='1' AND left='0' then --左转的键由开到关S:=S6;TAP:="0000000000000000";elsif regr='1'AND right='0' then --右转的键由开到关S:=S6;TAP:="0000000000000000";elsif regb='1' AND brake='0' then --刹车键由开到关S:=S6;TAP:="0000000000000000";end if;count:=count+1;if count=8 THENcount:=0;if S=S1 THEN --通过拼接实现左转TAP(15 DOWNTO 8):=TAP(14 DOWNTO 8)&TAP(15);elsif S=S2 THEN --通过拼接实现右转TAP(7 DOWNTO 0):=TAP(0)&TAP(7 DOWNTO 1);elsif S=S3 THENTAP:="1111111111111111";elsif S=S4 THENTAP:=TAP;elsif S=S5 THEN --通过计数实现启动后1~2s由亮到灭if num<40 then num:=num+1;TAP:="1111111111111111";elseTAP:="0000000000000000";end if;elsif S=S6 THENTAP:=TAP;end if;end if;
end if;
LR<=TAP;
end PROCESS;
end one;
板载测试
编角
测试
左转、右转是循环显示,只能发视频才能观察到,所以就拍个全亮的吧,其他功能都已实现,并且符合题意与现实生活。
这篇关于汽车尾灯控制电路设计VHDL课程设计的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!