久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3768|回復: 1
打印 上一主題 下一主題
收起左側

基于FPGA的交通燈vhdl程序設計

[復制鏈接]
跳轉到指定樓層
樓主


單片機源程序如下:
  1.   -------------------------------------
  2.    --  Title:交通燈控制器             --
  3.    --  Data: 2019-12-11               --
  4.    -------------------------------------
  5. library ieee;
  6. use ieee.std_logic_1164.all;
  7. use ieee.std_logic_arith.all;
  8. use ieee.std_logic_unsigned.all;
  9. --------------------------------------------------------------------
  10. entity traffic_light is
  11.   port( Clk       :  in   std_logic;   --時鐘輸入    為50MHz
  12.         Rst       :  in   std_logic;   --復位輸入
  13.         R1,R2     :  out  std_logic;   --紅燈輸出
  14.         Y1,Y2     :  out  std_logic;   --黃燈輸出
  15.         G1,G2     :  out  std_logic;   --綠燈輸出
  16.         Display   :  out  std_logic_vector(6 downto 0);  --七段碼管顯示輸出
  17.         SEG_SEL   :  buffer  std_logic_vector(3 downto 0) --七段碼管掃描驅動(四位數碼管)
  18.        );      
  19. end traffic_light ;
  20. --------------------------------------------------------------------
  21. architecture behave of traffic_light is
  22.   signal Disp_Temp     : integer range 0 to 15;
  23.   signal Disp_Decode   : std_logic_vector(6 downto 0);   --段選緩存
  24.   signal SEC1,SEC10    : integer range 0 to 9;
  25.   signal Direction     : integer range 0 to 15;

  26.   signal Clk_Count1    : std_logic_vector(9 downto 0);   --產生0.5Hz時鐘的分頻計數器
  27.   signal Clk1Hz        : std_logic;
  28.   signal Dir_Flag      : std_logic;    --方向標志
  29.   signal C             : integer range 0 to 50000:=0;    --50MHz轉1kHz
  30.   signal L             : integer range 0 to 50000:=0;    --50MHz轉1kHz
  31.   signal Wei_Flag      : std_logic_vector(1 downto 0);           --當前掃描數碼管位數
  32.   signal Wei           : std_logic_vector(3 downto 0);   --位選緩存

  33.    
  34.   begin
  35.     process(Clk)
  36.       begin
  37.         if(Clk'event and Clk='1') then
  38.            C<=C+1;
  39.            if(C>=50000) then                                  --50MHz轉1kHz
  40.              C<=0;
  41.              if(Clk_Count1<1000) then
  42.                Clk_Count1<=Clk_Count1+"01";   
  43.              else
  44.                Clk_Count1<="0000000001";
  45.              end if;
  46.            end if;
  47.         end if;
  48.     end process;
  49.     Clk1Hz<=Clk_Count1(9);
  50.     process(Clk1Hz,Rst)
  51.       begin
  52.         if(Rst='0') then
  53.            SEC1<=0;
  54.            SEC10<=2;
  55.            Dir_Flag<='0';
  56.         elsif(Clk1Hz'event and Clk1Hz='1') then
  57.            if(SEC1=0) then
  58.               SEC1<=9;
  59.               if(SEC10=0) then
  60.                  SEC10<=1;
  61.                else
  62.                  SEC10<=SEC10-1;
  63.                end if;
  64.            else
  65.               SEC1<=SEC1-1;
  66.            end if;
  67.            if(SEC1=0 and SEC10=0) then
  68.               Dir_Flag<=not Dir_Flag;
  69.            end if;
  70.         end if;
  71.     end process;

  72.     process(Clk1Hz,Rst)
  73.       begin
  74.         if(Rst='0') then
  75.            R1<='1';
  76.            G1<='0';
  77.            R2<='1';
  78.            G2<='0';
  79.         else                             --正常運行
  80.            if(SEC10>0 or SEC1>3) then
  81.               if(Dir_Flag='0') then      --橫向通行
  82.                  R1<='0';
  83.                  G1<='1';
  84.                  R2<='1';
  85.                  G2<='0';            
  86.               else
  87.                  R1<='1';
  88.                  G1<='0';
  89.                  R2<='0';
  90.                  G2<='1';            
  91.               end if;
  92.            else
  93.               if(Dir_Flag='0') then      --橫向通行
  94.                  R1<='0';
  95.                  G1<='0';
  96.                  R2<='1';
  97.                  G2<='0';            
  98.               else
  99.                  R1<='1';
  100.                  G1<='0';
  101.                  R2<='0';
  102.                  G2<='0';   
  103.               end if;                 
  104.            end if;
  105.         end if;
  106.     end process;

  107.     process(Clk1Hz)
  108.       begin
  109.         if(SEC10>0 or SEC1>3) then
  110.            Y1<='0';
  111.            Y2<='0';
  112.         elsif(Dir_Flag='0') then
  113.            Y1<=Clk1Hz;
  114.            Y2<='0';
  115.         else
  116.            Y1<='0';
  117.            Y2<=Clk1Hz;
  118.         end if;      
  119.     end process;

  120.     process(Dir_Flag)
  121.       begin
  122.         if(Dir_Flag='0') then   --橫向
  123.            Direction<=10;
  124.         else                    --縱向
  125.            Direction<=11;
  126.         end if;
  127.     end process;

  128.     process(Wei_Flag)      
  129.       begin
  130.         case (Wei_Flag+"01") is
  131.           when "00"=>
  132.                Wei<="1110";
  133.                Disp_Temp<=Direction;
  134.           when "01"=>
  135.                     Wei<="1101";
  136.                Disp_Temp<=Direction;
  137.           when "10"=>
  138.                Wei<="1011";
  139.                Disp_Temp<=SEC10;
  140.           when "11"=>
  141.                Wei<="0111";
  142.                Disp_Temp<=SEC1;
  143.        end case;   
  144.     end process;

  145.     process(Clk)
  146.       begin
  147.         if(Clk'event and Clk='1') then    --掃描累加
  148.            L<=L+1;                             --50MHz轉1kHz
  149.            if(L>=50000) then
  150.              L<=0;
  151.              SEG_SEL<=Wei;
  152.              Wei_Flag<=Wei_Flag+1;        --準備下一數碼管
  153.              Display<=Disp_Decode;
  154.            end if;
  155.         end if;
  156.     end process;
  157.     process(Disp_Temp)      --顯示轉換
  158.       begin
  159.         case Disp_Temp is
  160.           when 0=>Disp_Decode<="0111111";   --'0'
  161.           when 1=>Disp_Decode<="0000110";   --'1'
  162.           when 2=>Disp_Decode<="1011011";   --'2'
  163.           when 3=>Disp_Decode<="1001111";   --'3'
  164.           when 4=>Disp_Decode<="1100110";   --'4'
  165.           when 5=>Disp_Decode<="1101101";   --'5'
  166.           when 6=>Disp_Decode<="1111101";   --'6'
  167.           when 7=>Disp_Decode<="0000111";   --'7'
  168.           when 8=>Disp_Decode<="1111111";   --'8'
  169.           when 9=>Disp_Decode<="1101111";   --'9'
  170.           when 10=>Disp_Decode<="1001000";   --'='
  171.           when 11=>Disp_Decode<="0110110";   --'||'
  172.           when others=>Disp_Decode<="0000000";   --全滅
  173.         end case;
  174.     end process;   

  175. end behave;
復制代碼

所有資料51hei提供下載:
交通燈.pdf (137.48 KB, 下載次數: 37)
traffic_light.zip (1.56 KB, 下載次數: 42)


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏2 分享淘帖 頂1 踩
回復

使用道具 舉報

沙發
ID:704585 發表于 2020-4-8 14:23 | 只看該作者
謝謝樓主分享
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 日韩一区二区成人 | 国产日韩中文字幕 | 精品亚洲一区二区 | 日本一卡精品视频免费 | 91免费看片 | 伊人精品在线 | 精品国产视频 | 在线日韩在线 | 欧美日韩一区二区视频在线观看 | 国产成都精品91一区二区三 | 99精品视频在线 | 一区二区三区中文 | 国产成人精品免费视频 | 亚洲成人精 | 九九九视频精品 | 亚洲精品电影在线观看 | 国产激情偷乱视频一区二区三区 | 性高湖久久久久久久久aaaaa | 久久精品性视频 | 国产精品久久精品 | 在线观看av免费 | 久久久久中文字幕 | 国产精品久久久久无码av | 国产一区二区三区久久久久久久久 | 日韩成人av在线 | 久久久视频在线 | 日本高清中文字幕 | 亚洲美女在线视频 | 日韩精品一区二区三区视频播放 | 夜夜爽99久久国产综合精品女不卡 | 伊人久久麻豆 | 国产精品美女一区二区三区 | 99久久久99久久国产片鸭王 | 日韩高清一区 | 日韩综合在线 | 成人午夜视频在线观看 | 龙珠z在线观看 | 国产免费一区二区 | 成人高潮片免费视频欧美 | 午夜精品一区二区三区在线 | 色婷婷av一区二区三区软件 |