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

📄 display_driver.vhd

📁 在ACEX EP1K30TC144-3实现了闹钟功能,并能修改定时,和当前时间
💻 VHD
字号:
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE WORK.P_ALARM.ALL;
ENTITY DISPLAY_DRIVER IS
   PORT(ALARM_TIME :  IN  T_CLOCK_TIME;
        CURRENT_TIME :IN  T_CLOCK_TIME;
        NEW_TIME :    IN  T_CLOCK_TIME;
        SHOW_NEW_TIME:IN  STD_LOGIC;
        SHOW_A :      IN  STD_LOGIC;
        SOUND_ALARM : OUT STD_LOGIC;
        CLK :         IN  STD_LOGIC;
        SEL :         OUT STD_LOGIC_VECTOR(5 DOWNTO 0);
        SEG :         OUT STD_LOGIC_VECTOR(6 DOWNTO 0));
        --DISPLAY:OUT T_DISPLAY);
END ENTITY DISPLAY_DRIVER;

ARCHITECTURE ART OF DISPLAY_DRIVER IS
    SIGNAL DISPLAY_TIME:T_CLOCK_TIME;
    SIGNAL ST:INTEGER RANGE 0 TO 5 ;--:=0;
BEGIN
    CTRL:PROCESS(ALARM_TIME,CURRENT_TIME,NEW_TIME,SHOW_A,SHOW_NEW_TIME) IS
    BEGIN
        SOUND_LP: FOR I IN ALARM_TIME'RANGE LOOP
            IF NOT(ALARM_TIME(I) = CURRENT_TIME(I)) THEN
                SOUND_ALARM <= '0';
                EXIT SOUND_LP;
            ELSE   
                SOUND_ALARM <= '1';
            END IF; 
        END LOOP SOUND_LP;
        IF SHOW_NEW_TIME = '1' THEN
            DISPLAY_TIME <= NEW_TIME;
        ELSIF SHOW_A = '1' THEN
            DISPLAY_TIME <= ALARM_TIME;
        ELSIF SHOW_A = '0' THEN
            DISPLAY_TIME <= CURRENT_TIME;
        ELSE
            ASSERT FALSE REPORT "UNCERTAIN DISPLAY_DRIVER CONTROL"
            SEVERITY WARNING;
        END IF;
    END PROCESS CTRL; 

    DISP:PROCESS(CLK,DISPLAY_TIME) IS  --,RESET
    BEGIN
        --IF(RESET='1')THEN
            --SEL<="000000";S<="000";
            --SEL<="111111";S<="000";
        --ELSIF(CLK'EVENT AND CLK='1')THEN
        IF(CLK'EVENT AND CLK='1')THEN
            IF(ST=5)THEN
                ST<=0;
            ELSE ST<=ST+1;
            END IF;
            CASE ST IS
            WHEN 0 => SEL<="000001"; SEG<= SEVEN_SEG(DISPLAY_TIME(0));
            WHEN 1 => SEL<="000010"; SEG<= SEVEN_SEG(DISPLAY_TIME(1));
            WHEN 2 => SEL<="000100"; SEG<= SEVEN_SEG(DISPLAY_TIME(2));
            WHEN 3 => SEL<="001000"; SEG<= SEVEN_SEG(DISPLAY_TIME(3));
            WHEN 4 => SEL<="010000"; SEG<= SEVEN_SEG(DISPLAY_TIME(4));
            WHEN 5 => SEL<="100000"; SEG<= SEVEN_SEG(DISPLAY_TIME(5));
            WHEN OTHERS => ST<=0;
                      SEL<="000001"; SEG<= SEVEN_SEG(DISPLAY_TIME(0));
            END CASE;
        END IF;
    END PROCESS DISP;     

END ARCHITECTURE ART;

⌨️ 快捷键说明

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