Thông báo

Collapse
No announcement yet.

đèn giao thông có hiển thị led 7 đoạn

Collapse
X
 
  • Lọc
  • Giờ
  • Show
Clear All
new posts

  • đèn giao thông có hiển thị led 7 đoạn

    Mình đang viết thử 1 ứng dụng mạch đèn giao thông ngõ ra có 6 led tượng trưng cho 6 đèn và 2LED 7 đoạn để hiển thị thời gian đếm lùi ví dụ chế độ đèn đỏ sẽ đếm lùi 30->00.
    Mình dùng máy trạng thái theo kiểu type định nghĩa, mình bị mắc phần không biết xử lý sao cho biết mỗi lần đổi trạng thái thì LED7 đoạn đếm lùi thời gian khắc nhau ;
    code của mình :
    type states is (st0,st1,st2,st3);
    signal clk1: std_logic;
    signal TT : std_logic_vector (1 downto 0);
    signal pr_state,nx_state: states ;
    signal dem1,dem2 : integer range 0 to 40;
    signal sel :std_logic_vector (1 downto 0);
    --signal bcd: std_logic_vector(11 downto 0);
    begin

    --************************************************** ******
    FUNCTION GM(X1: IN STD_LOGIC_VECTOR (3 downto 0)) RETURN
    STD_LOGIC_VECTOR IS
    VARIABLE Z1: STD_LOGIC_VECTOR (6 downto 0);
    begin

    CASE X1 IS

    WHEN "0000" => Z1 := "1000000";
    WHEN "0001" => Z1 := "1111001";
    WHEN "0010" => Z1 := "0100100";
    WHEN "0011" => Z1 := "0110000";
    WHEN "0100" => Z1 := "0011001";
    WHEN "0101" => Z1 := "0010010";
    WHEN "0110" => Z1 := "0000010";
    WHEN "0111" => Z1 := "1111000";
    WHEN "1000" => Z1 := "0000000";
    WHEN "1001" => Z1 := "0010000";
    WHEN OTHERS => Z1 := "1111111";
    END CASE;
    RETURN Z1;
    END GIAI_MA;
    --************************************************** *******

    process (clk)
    variable chia:integer range 0 to 1000;
    begin
    if clk='1' and clk'event then
    chia:=chia+1; sel<=sel+1; end if;
    if chia=1000 then
    clk1<='1' ;
    else clk1<='0' ;end if;
    end process;
    --************************************************** *******

    process (clk1,clr)
    variable QT1,QT2: STD_LOGIC_VECTOR (3 downto 0);
    begin
    if clr ='0' then pr_state <= st0;TT:="00";
    elsif clk1='1' and clk1'event then dem1<= dem1+1;
    {if TT = "00" then Q..........................
    if dem1= dem2 then dem1<=0;
    pr_state <=nx_state;
    end if ;}-- doạn này chưa biết xử lý sao cả.


    end process;
    process(pr_state)
    begin
    case pr_state is
    when st0 => LED<="100001";
    dem2 <=25;
    TT <= "00"
    nx_state<=st1;

    when st1 => LED<="100010";
    dem2 <=5;
    TT <= "01"
    nx_state<=st2;

    when st2 => LED<="001100";
    dem2 <=35;
    TT <= "10"
    nx_state<=st3;

    when st3 => LED<="010100";
    dem2 <=5;
    TT <= "11"
    nx_state<=st0;
    end case;
    end process;
    --*******************************************

    process(sel)
    begin
    case sel is
    when '0'=> dk <= "10";SEG7<=GM(QT1);
    when '1' => dk <= "01";SEG7<=GM(QT2);
    when others => dk<="111";
    end case;
    end process;

    end Behavioral;

  • #2
    Ngôn ngữ gì vậy bạn!

    Comment


    • #3
      Hình như Pascal thì phải.hihi
      Giờ mới thấy có người lt VDK bằng Pascal đấy.
      Cuộc đời như bánh omi, không biết rồi sẽ về đâu?

      Comment


      • #4
        Nguyên văn bởi tnt288 Xem bài viết
        Hình như Pascal thì phải.hihi
        Giờ mới thấy có người lt VDK bằng Pascal đấy.
        Đây là ngôn ngữ VHDL dành cho ASIC của xilinns , sao lại nhìn ra là pascal nhi?bó tay lun

        Comment


        • #5
          Hihi, thì thấy cú pháp giống như pascal. sr
          Cuộc đời như bánh omi, không biết rồi sẽ về đâu?

          Comment

          Về tác giả

          Collapse

          vankhoakmt Tìm hiểu thêm về vankhoakmt

          Bài viết mới nhất

          Collapse

          Đang tải...
          X