📄 display_driver.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 + -