VHDL闹钟

基于DE2-115 VHDL编写的闹钟,具有时间显示,闹钟定时显示以及闹钟功能。

译码器显示部分

LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITY INBCD7 IS
PORT(    A:IN INTEGER;
        DOUT1:OUT STD_LOGIC_VECTOR(6 DOWNTO 0):="1000000";
        DOUT2:OUT STD_LOGIC_VECTOR(6 DOWNTO 0):="1000000");
END ENTITY INBCD7;

ARCHITECTURE SHOW OF INBCD7 IS    
BEGIN 
    PROCESS(A)
        VARIABLE Q : INTEGER;
        VARIABLE E : INTEGER;
BEGIN
    Q:=A MOD 10;
    E:=A/10;
            
    CASE(Q)IS
        WHEN 0 => DOUT1 <= "1000000";
        WHEN 1 => DOUT1 <= "1111001";
        WHEN 2 => DOUT1 <= "0100100";
        WHEN 3 => DOUT1 <= "0110000";
        WHEN 4 => DOUT1 <= "0011001";
        WHEN 5 => DOUT1 <= "0010010";
        WHEN 6 => DOUT1 <= "0000010";
        WHEN 7 => DOUT1 <= "1111000";
        WHEN 8 => DOUT1 <= "0000000";
        WHEN 9 => DOUT1 <= "0011000";
        WHEN OTHERS => NULL;
    END CASE;
    
    CASE(E)IS
        WHEN 0 => DOUT2 <= "1000000";
        WHEN 1 => DOUT2 <= "1111001";
        WHEN 2 => DOUT2 <= "0100100";
        WHEN 3 => DOUT2 <= "0110000";
        WHEN 4 => DOUT2 <= "0011001";
        WHEN 5 => DOUT2 <= "0010010";
        WHEN 6 => DOUT2 <= "0000010";
        WHEN 7 => DOUT2 <= "1111000";
        WHEN 8 => DOUT2 <= "0000000";
        WHEN 9 => DOUT2 <= "0011000";
        WHEN OTHERS => NULL;
    END CASE;
    
END PROCESS;
END ARCHITECTURE SHOW;

顶层设计部分

LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITY NAO IS
PORT(CLK,EN:IN STD_LOGIC;
      KEYS:IN STD_LOGIC;
      KEYF:IN STD_LOGIC;
      BEEF:OUT STD_LOGIC;
      SMG1:OUT STD_LOGIC_VECTOR(6 DOWNTO 0):="1000000";
      SMG2:OUT STD_LOGIC_VECTOR(6 DOWNTO 0):="1000000";
      SMG3:OUT STD_LOGIC_VECTOR(6 DOWNTO 0):="1000000";
      SMG4:OUT STD_LOGIC_VECTOR(6 DOWNTO 0):="1000000";
      SMG5:OUT STD_LOGIC_VECTOR(6 DOWNTO 0);
      SMG6:OUT STD_LOGIC_VECTOR(6 DOWNTO 0);
      SMG7:OUT STD_LOGIC_VECTOR(6 DOWNTO 0);
      SMG8:OUT STD_LOGIC_VECTOR(6 DOWNTO 0));
END ENTITY NAO;

ARCHITECTURE JISHU OF NAO IS

    COMPONENT INTBCD7
        PORT(A:IN INTEGER;
              SMGD:OUT STD_LOGIC_VECTOR(6 DOWNTO 0):="1000000";
              SMGC:OUT STD_LOGIC_VECTOR(6 DOWNTO 0):="1000000");
    END COMPONENT;

SIGNAL CLK1:STD_LOGIC;
SIGNAL Q : INTEGER:=0;   --60
SIGNAL E : INTEGER:=-1;   --24
SIGNAL SHI : INTEGER:=0;
SIGNAL FEN : INTEGER:=0;
SIGNAL SHIJIAN :INTEGER:=0;

BEGIN
    PROCESS(CLK,SHI,FEN)
    
        VARIABLE CNT:INTEGER RANGE 0 TO 50000001;
BEGIN
    IF CLK'EVENT AND CLK='1' THEN
        IF CNT<25000000 THEN CNT:=CNT+1;
            ELSE CNT:=0;CLK1 <= NOT CLK1;
        END IF;
    END IF;

    IF CLK1'EVENT AND CLK1 ='1' AND EN='1' THEN
        IF Q<59 THEN Q<=Q+1;
            ELSE Q<=0;
        END IF;
        
        IF Q=0 THEN 
            IF E<23 THEN E<=E+1;
                ELSE E<=0;
            END IF;
        END IF;
    
        IF SHI=E AND FEN=Q THEN SHIJIAN<=3;
            ELSE SHIJIAN<=0
        END IF;
        
        IF SHIJIAN>0 THEN BEEF<='1';SHIJIAN<=SHIJIAN-1;
           ELSE BEEF<='0';    
        END IF;
END IF;
        
END PROCESS;

SET:PROCESS(KEYS,KEYF,SHI,FEN)BEGIN
        IF KEYS'EVENT AND KEYS='1' THEN SHI<=SHI+1;
            
        END IF;
        
        IF SHI>23 THEN SHI<=0;
        END IF;
        
        IF KEYF'EVENT AND KEYF='1' THEN FEN<=FEN+1;
            
        END IF;
        
        IF FEN>59 THEN FEN<=0;
        END IF;
END PROCESS SET;

D1:INTBCD7
PORT MAP(A=>E,SMGD=>SMG2,SMGC=>SMG1);
D2:INTBCD7
PORT MAP(A=>Q,SMGD=>SMG4,SMGC=>SMG3);
D3:INTBCD7
PORT MAP(A=>SHI,SMGD=>SMG6,SMGC=>SMG5);
D4:INTBCD7
PORT MAP(A=>FEN,SMGD=>SMG8,SMGC=>SMG7);

END ARCHITECTURE JISHU;

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值