Forum Discussion

Altera_Forum's avatar
Altera_Forum
Icon for Honored Contributor rankHonored Contributor
9 years ago

digital watch

hello every one i have design digital watch second , minute , hour after i execute the code the counter second and minute counter ok work . for 0 to 59 but hour counter form 0 to 99 ?

i have question hour about how make counter to 0 to 24 or 0 to 12 ?

 
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY SEQ_COUNTER IS
    PORT
        (
            CLK_1, RST            : IN STD_LOGIC;
            CLK_2                    : BUFFER STD_LOGIC;
            SEC_1, SEC_2        : BUFFER INTEGER RANGE 0 TO 9;
            MIN_1, MIN_2        : BUFFER INTEGER RANGE 0 TO 9;
            HR_1, HR_2            : BUFFER INTEGER RANGE 0 TO 9;
            Q                        : BUFFER INTEGER RANGE 0 TO 9
        );
END SEQ_COUNTER;
ARCHITECTURE SEQ_COUNTER OF SEQ_COUNTER IS
BEGIN
    
    PROCESS (CLK_1,RST)
    
    VARIABLE S1, S2, M1, M2, H1, H2    :INTEGER RANGE 0 TO 10;
    
    BEGIN
        IF ( RST ='0' ) THEN 
            S1 :=0;
            S2 :=0;
            M1 :=0;
            M2 :=0;
            H1 :=0;
            H2 :=0;
            SEC_1 <=0;
            SEC_2 <=0;
            MIN_1 <=0;
            MIN_2 <=0;
            HR_1     <=0;
            HR_2     <=0;
            Q <=0;
        ELSIF ( CLK_1'EVENT AND CLK_1 ='1') THEN
            S1 := S1 +1;
            
            IF ( S1 = 10) THEN
                S1 :=0;
                SEC_1 <=0;
                S2 := S2 +1;
                
                IF ( S2 = 6) THEN
                    S2 :=0;
                    SEC_2 <=0;
                    M1 := M1 +1;
                    
                    IF ( M1 = 10) THEN
                        M1 :=0;
                        MIN_1 <=0;
                        M2 := M2 +1;
                    
                        IF ( M2 = 6) THEN
                            M2 :=0;
                            MIN_2 <=0;
                            H1 := H1 +1;
                    
                            IF ( H1 = 10) THEN
                                H1 :=0;
                                HR_1 <=0;
                                H2 := H2 +1;
                                
                                    IF ( H2 = 1 OR H1= 3 ) THEN
                                    H2 :=0;
                                    HR_2 <=0;
                                
                                END IF;
                                
                            END IF;
                        END IF;
                    END IF;
                END IF;
            END IF;    
        END IF;
        SEC_1 <= S1;
        SEC_2 <= S2;
        MIN_1 <= M1;
        MIN_2 <= M2;
        HR_1     <= H1;
        HR_2     <= H2;
        
    END PROCESS;
    
END SEQ_COUNTER;

11 Replies