⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 数字钟vhdl程序.txt

📁 是EDA设计的数字钟的VHDL语言程序
💻 TXT
字号:
 library ieee;
        use ieee.std_logic_1164.all;
        use ieee.std_logic_unsigned.all;
        entity szz is
        port(clk:in std_logic;
                clk1:in std_logic;
                md1:in std_logic;
                speak:out std_logic;
                dout:out std_logic_vector(6 downto 0);
                selout:out std_logic_vector(2 downto 0));
        end szz;
        architecture one of szz is
        signal sel:std_logic_vector(2 downto 0);
        signal hou1:std_logic_vector(3 downto 0);
        signal hou2:std_logic_vector(3 downto 0);
        signal min1:std_logic_vector(3 downto 0);
        signal min2:std_logic_vector(3 downto 0);
        signal seth1:std_logic_vector(3 downto 0);
        signal seth2:std_logic_vector(3 downto 0);
        signal setm1:std_logic_vector(3 downto 0);
        signal setm2:std_logic_vector(3 downto 0);
        signal sec1:std_logic_vector(3 downto 0);
        signal sec2:std_logic_vector(3 downto 0);
        signal h1:std_logic_vector(3 downto 0);
        signal m1:std_logic_vector(3 downto 0);
        signal m2:std_logic_vector(3 downto 0);
        signal s1:std_logic_vector(3 downto 0);
        signal s2:std_logic_vector(3 downto 0);
        -------------------------------------------------
        begin
        ----------------------------------------------模6计数
        choice:process(clk1)
        begin
        if clk1'event and clk1='1' then
        if sel="101" then
        sel<="000";
        else
        sel<=sel+1;
        end if;
        end process choice;
        -----------------------------------------------小时十位
        h110:process(clk,hou2,min1,min2,sec1,sec2,md1,md2)
        begin
        if clk'event and clk='1' then
        if (hou1="0010" and hou2="0011")and(min1="0101" and min2="1001") and 
        (sec1="0101" and sec2="1001")        then
        hou1<="0000";
        elsif hou1="0010"and hou2="0011"and md1='0' and md2="01" 
        then--当时间为23点且处于校时状态时
        hou1<="0000";
        elsif (hou2="1001"and(min1="0101" and min2="1001") and (sec1="0101" and 
        sec2="1001"))or (hou2="1001"and md1='0' and md2="01")       then
        hou1<=hou1+1;
        end if;
        end if;
        end process h110;
        -----------------------------------------------小时个位
        h220:process(clk,min1,min2,sec1,sec2,md1,md2,hou1)
        begin
        if clk'event and clk='1' then
        if (hou1="0010" and hou2="0011")and(min1="0101" and min2="1001") and 
        (sec1="0101" and sec2="1001") then
        hou2<="0000";
        elsif hou2="1001"and(min1="0101" and min2="1001") and (sec1="0101" and 
        sec2="1001")       then
        hou2<="0000";
        elsif (hou2="1001"and md1='0' and md2="01")or (hou1="0010"and hou2="0011") 
        then
        hou2<="0000";--md<='1';
        elsif ((min1="0101" and min="1001") and (sec1="0101" and sec2="1001"))or 
        (md1='0' and md2="01") then
        hou2<=hou2+1;--speak<=clk;
        end if;
        end if;
        end process h220;
        -----------------------------------------------分钟十位
        m110:process(clk,min2,sec1,sec2,md1,md2)
        begin
        if clk'event and clk='1' then
        if (min1="0101" and min2="1001") and (sec1="0101" and sec2="1001") then 
        min1<="0000";
        elsif min1="0101"and min2="1001"and (md1='0' and md2="00")then
        min1<="0000";
        elsif (min2="1001"and (sec1="0101" and sec2="1001")) or (min2="1001"and 
        md1='0' and md2="00")then
        min1<=min1+1;
        end if;
        end if;--end if;
        end process m110;
        ----------------------------------------------分钟个位
        m220:process(clk,sec1,sec2,md2)
        begin
        if clk'event and clk='1' then
        if min2="1001"and (sec1="0101" and sec2="1001")then
        min2<="0000";
        elsif min2="1001"and (md1='0' and md2="00")then
        min2<="0000";
        else       if (sec1="0101" and sec2="1001") or(md1='0' and md2="00")then
        min2<=min2+1;
        end if;
        end if;end if;
        end process m220;
        ---------------------------------------------秒十位
        s110:process(clk)
        begin
        if clk'event and clk='1' then
        if (sec1="0101" and sec2="1001")then
        sec1<="0000";
        else if sec2="1001"then
        sec1<=sec1+1;
        end if;
        end if;end if;
        end process s110;
        --------------------------------------------秒个位
        s220:process(clk)
        begin
        if clk'event and clk='1' then
        if sec2="1001" then
        sec2<="0000";
        else sec2<=sec2+1;
        end if;
        end if;
        end process s220;
        -------------------------------------------时间设置小时部分
        sethour1:process(clk,seth2)
        begin
        if clk'event and clk='1' then
        if seth1="0010"and seth2="0011" then
        seth1<="0000";
        elsif seth2="1001"       then
        seth1<=seth1+1;
        end if;
        end if;
        end process sethour1;
        -------------------------------------------
        sethour2:process(clk,md1,md2,seth1)
        begin
        if clk'event and clk='1' then
        if (seth1="1110"and seth2="0011")or seth2="1001"then
        seth2<="0000";
        elsif md1='1' and md2="00" then
        seth2<=seth2+1;
        end if;
        end if;
        end process sethour2;
        -------------------------------------------时间设置分钟部分
        setmin1:process(clk,setm2)
        begin
        if clk'event and clk='1' then
        if setm1="0101"and setm2="1001"then
        setm1<="0000";
        elsif setm2="1001"then
        setm1<=setm1+1;
        end if;
        end if;
        end process setmin1;
        ----------------------------------------------
        setmin2:process(clk,md1,md2)
        begin
        if clk'event and clk='1'then
        if setm2="1001"then
        setm2<="0000";
        elsif md1='1' and md2="01"then
        setm2<=setm2+1;
        end if;
        end if;
        end process setmin2;
        --------------------------------------------
        --------------------------------------------闹铃
        speaker:process(clk1,hou1,hou2,min1,min2)
        begin
        if clk1'event and clk1='1'then
        if seth1=hou1 and seth2=hou2 and setm1=min1 and setm2=min2 then
        speak<=clk1;
        else speak<='0';
        end if;
        end process speaker;
        -------------------------------------------
        -------------------------------------------
        disp:process(sel,md1,hou1,hou2,min1,min2,sec1,sec2,seth1,seth2,setm1,setm2)
        begin
        if sel="000" then
        selout<="000";
        case h1 is
        when "0000"=>dout<="0111111";
        when "0001"=>dout<="0000110";
        when "0010"=>dout<="1011011";
        when others =>dout<="1000000";
        end case;
        elsif sel="001" then
        selout<="001";
        case h2 is
        when "0000"=>dout<="0111111";
        when "0001"=>dout<="0000110";
        when "0010"=>dout<="1011011";



















library ieee;

use ieee.std_logic_1164.all;

use ieee.std_logic_unsigned.all;

entity szz is

port(clk:in std_logic;

        clk1:in std_logic;

        md1:in std_logic;

        md2:in std_logic_vector(1 downto 0);

        speak:out std_logic;

        dout:out std_logic_vector(6 downto 0);

        selout:out std_logic_vector(2 downto 0));

end szz;

architecture one of szz is

signal sel:std_logic_vector(2 downto 0);


signal hou1:std_logic_vector(3 downto 0);

signal hou2:std_logic_vector(3 downto 0);

signal min1:std_logic_vector(3 downto 0);

signal min2:std_logic_vector(3 downto 0);


signal seth1:std_logic_vector(3 downto 0);

signal seth2:std_logic_vector(3 downto 0);

signal setm1:std_logic_vector(3 downto 0);

signal setm2:std_logic_vector(3 downto 0);


signal sec1:std_logic_vector(3 downto 0);

signal sec2:std_logic_vector(3 downto 0);

signal h1:std_logic_vector(3 downto 0);

signal h2:std_logic_vector(3 downto 0);

signal m1:std_logic_vector(3 downto 0);

signal m2:std_logic_vector(3 downto 0);

signal s1:std_logic_vector(3 downto 0);

signal s2:std_logic_vector(3 downto 0);

-------------------------------------------------

begin

----------------------------------------------模6计数

choice:process(clk1)

begin

if clk1'event and clk1='1' then

if sel="101" then

sel<="000";

else

sel<=sel+1;

end if;

end if;

end process choice;

-----------------------------------------------小时十位

h110:process(clk,hou2,min1,min2,sec1,sec2,md1,md2)

begin

if clk'event and clk='1' then

if (hou1="0010" and hou2="0011")and(min1="0101" and min2="1001") and (sec1="0101" and sec2="1001")      then

hou1<="0000";

elsif hou1="0010"and hou2="0011"and md1='0' and md2="01" then--当时间为23点且处于校时状态时

hou1<="0000";

elsif (hou2="1001"and(min1="0101" and min2="1001") and (sec1="0101" and sec2="1001"))or (hou2="1001"and md1='0' and md2="01")     then


hou1<=hou1+1;

end if;

end if;

end process h110;

-----------------------------------------------小时个位

h220:process(clk,min1,min2,sec1,sec2,md1,md2,hou1)

begin

if clk'event and clk='1' then

if (hou1="0010" and hou2="0011")and(min1="0101" and min2="1001") and (sec1="0101" and sec2="1001") then

hou2<="0000";

elsif hou2="1001"and(min1="0101" and min2="1001") and (sec1="0101" and sec2="1001")     then

hou2<="0000";

elsif (hou2="1001"and md1='0' and md2="01")or (hou1="0010"and hou2="0011") then

hou2<="0000";--md<='1';

elsif ((min1="0101" and min2="1001") and (sec1="0101" and sec2="1001"))or (md1='0' and md2="01") then

hou2<=hou2+1;--speak<=clk;

end if;

end if;

end process h220;

-----------------------------------------------分钟十位

m110:process(clk,min2,sec1,sec2,md1,md2)

begin

if clk'event and clk='1' then

if (min1="0101" and min2="1001") and (sec1="0101" and sec2="1001") then 

min1<="0000";

elsif min1="0101"and min2="1001"and (md1='0' and md2="00")then

min1<="0000";


elsif (min2="1001"and (sec1="0101" and sec2="1001")) or (min2="1001"and md1='0' and md2="00")then

min1<=min1+1;

end if;

end if;--end if;

end process m110;

----------------------------------------------分钟个位

m220:process(clk,sec1,sec2,md1,md2)

begin

if clk'event and clk='1' then

if min2="1001"and (sec1="0101" and sec2="1001")then

min2<="0000";

elsif min2="1001"and (md1='0' and md2="00")then

min2<="0000";

else     if (sec1="0101" and sec2="1001") or(md1='0' and md2="00")then

min2<=min2+1;

end if;

end if;end if;

end process m220;

---------------------------------------------秒十位

s110:process(clk)

begin

if clk'event and clk='1' then

if (sec1="0101" and sec2="1001")then

sec1<="0000";

else if sec2="1001"then

sec1<=sec1+1;

end if;

end if;end if;

end process s110;

--------------------------------------------秒个位

s220:process(clk)

begin

if clk'event and clk='1' then

if sec2="1001" then

sec2<="0000";

else sec2<=sec2+1;

end if;

end if;

end process s220;

-------------------------------------------时间设置小时部分

sethour1:process(clk,seth2)

begin

if clk'event and clk='1' then

if seth1="0010"and seth2="0011" then

seth1<="0000";

elsif seth2="1001"     then

seth1<=seth1+1;

end if;

end if;

end process sethour1;

-------------------------------------------

sethour2:process(clk,md1,md2,seth1)

begin

if clk'event and clk='1' then

if (seth1="0010"and seth2="0011")or seth2="1001"then

seth2<="0000";

elsif md1='1' and md2="00" then

seth2<=seth2+1;

end if;

end if;

end process sethour2;

-------------------------------------------时间设置分钟部分

setmin1:process(clk,setm2)

begin

if clk'event and clk='1' then

if setm1="0101"and setm2="1001"then

setm1<="0000";

elsif setm2="1001"then

setm1<=setm1+1;

end if;

end if;

end process setmin1;

----------------------------------------------

setmin2:process(clk,md1,md2)

begin

if clk'event and clk='1'then

if setm2="1001"then

setm2<="0000";

elsif md1='1' and md2="01"then

setm2<=setm2+1;

end if;

end if;

end process setmin2;

--------------------------------------------

--------------------------------------------闹铃

speaker:process(clk1,hou1,hou2,min1,min2)

begin

if clk1'event and clk1='1'then

if seth1=hou1 and seth2=hou2 and setm1=min1 and setm2=min2 then

speak<=clk1;

else speak<='0';

end if;

end if;

end process speaker;

-------------------------------------------

-------------------------------------------

disp:process(sel,md1,hou1,hou2,min1,min2,sec1,sec2,seth1,seth2,setm1,setm2)

begin


if sel="000" then

selout<="000";

case h1 is

when "0000"=>dout<="0111111";

when "0001"=>dout<="0000110";

when "0010"=>dout<="1011011";

when others =>dout<="1000000";

end case;

elsif sel="001" then

selout<="001";

case h2 is

when "0000"=>dout<="0111111";

when "0001"=>dout<="0000110";

when "0010"=>dout<="1011011";

when "0011"=>dout<="1001111";

when "0100"=>dout<="1100110";

when "0101"=>dout<="1101101";

when "0110"=>dout<="1111101";

when "0111"=>dout<="0000111";

when "1000"=>dout<="1111111";

when "1001"=>dout<="1101111";

when others=>dout<="1000000";

end case;

elsif sel="010" then

selout<="010";

case m1 is

when "0000"=>dout<="0111111";

when "0001"=>dout<="0000110";

when "0010"=>dout<="1011011";

when "0011"=>dout<="1001111";

when "0100"=>dout<="1100110";

when "0101"=>dout<="1101101";

when others=>dout<="1000000";

end case;

elsif sel="011" then

selout<="011";

case m2 is

when "0000"=>dout<="0111111";

when "0001"=>dout<="0000110";

when "0010"=>dout<="1011011";

when "0011"=>dout<="1001111";

when "0100"=>dout<="1100110";

when "0101"=>dout<="1101101";

when "0110"=>dout<="1111101";

when "0111"=>dout<="0000111";

when "1000"=>dout<="1111111";

when "1001"=>dout<="1101111";

when others=>dout<="1000000";

end case;

elsif sel="100" then

selout<="100";

case s1 is

when "0000"=>dout<="0111111";

when "0001"=>dout<="0000110";

when "0010"=>dout<="1011011";

when "0011"=>dout<="1001111";

when "0100"=>dout<="1100110";

when "0101"=>dout<="1101101";

when others=>dout<="1000000";

end case;

elsif sel="101" then

selout<="101";

case s2 is

when "0

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -