多功能数字时钟
设计说明:
1.系统顶层框图:
各模块电路功能如下:
1.秒计数器、分计数器、时计数器组成最基本的数字钟,其计数输出送7段译码电路由数码管显示.
2.基准频率分频器可分频出标准的1HZ频率信号,用于秒计数的时钟信号;分频出4HZ频率信号,用于校时、校分的快速递增信号;分频出64HZ频率信号,用于对按动“校时”,“校分”按键的消除抖动.
2.多功能数字钟结构框图:
一、系统功能概述
已完成功能
1.完成时/分/秒的依次显示并正确计数,利用六位数码管显示;
2.时/分/秒各段个位满10正确进位,秒/分能做到满60向前进位,有系统时间清零功能;
3.定时器:实现整点报时,通过扬声器发出高低报时声音;
4.时间设置,也就是手动调时功能:当认为时钟不准确时,可以分别对分/时钟进行调整;
5.闹钟:实现分/时闹钟设置,在时钟到达设定时间时通过扬声器响铃.有静音模式. 
待改进功能:
1. 系统没有万年历功能,正在思考设计方法.
2. 应添加秒表功能.
二、系统组成以及系统各部分的设计
1.时计数模块
时计数模块就是一个2位10进制计数器,记数到23清零.
VHDL的RTL描述如下:
----cnt_h.vhd
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity cnt_h is
  port(en,clk,clr:in std_logic;
        dout:out std_logic_vector(7 downto 0);
        c:out std_logic);
end cnt_h;
architecture rtl of cnt_h is
signal t:std_logic_vector(7 downto 0);
begin
  process(en,clk,clr)
  variable t:std_logic_vector(7 downto 0);
    begin
      if en='1' then                          --异步使能
        if clk 'event and clk='1' then
            t:=t+1;
            if t(3 downto 0)=X"A" then        --个位等于10则十位加1
              t(7 downto 4):=t(7 downto 4)+1;
              t(3 downto 0):=X"0";          --个位清零
            end if;
            if t>X"23" then                  --大于23清零
              t:=X"00";
            end if;
        end if;
        if clr='1' then                      --异步清零
            t:=X"00";
        end if;江铃汽车集团公司
      end if;
   
    dout<=t;
  end process;
end rtl;
时计数器模块仿真波形如下
从仿真波形可知,当计数到23时,下一个时钟上升沿到来时就清零了,符合设计要求.
时计数模块框图如下
2.分及秒计数模块
分及秒计数模块也是一个2位10进制计数器,记数到59清零.
VHDL的RTL描述如下:
东南三菱
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity cnt_s is
  port(en,clk,clr:in std_logic;
        dout:buffer std_logic_vector(7 downto 0);
        c:out std_logic);
hud
end cnt_s;
architecture rtl of cnt_s is
begin
  process(en,clk,clr)
    begin
      if en='1' then
        if clr='1' then                            --异步清零
            dout<=X"00";
        elsif clk 'event and clk='1' then
            if dout(3 downto 0)<9 then
              dout(3 downto 0)<=dout(3 downto 0)+1;
              c<='0';
            elsif dout(7 downto 4)<5 then
              dout(3 downto 0)<=X"0";
              dout(7 downto 4)<=dout(7 downto 4)+1;
            else
              dout<=X"00";
              c<='1';
        end if;
      end if;
    else dout<="ZZZZZZZZ";
    end if;
  end process;
end rtl;
分和秒计数器模块仿真波形如下
从仿真波形可知,当计数到59时,下一个时钟上升沿到来时就清零了,并且产生进位信号,符合设计要求.
分和秒计数模块框图如下
鄂尔多斯车管所电话3.按键消抖动模块
按键消抖动有很多方案,这里选择的是计数消抖,即只当有效电平到来后开始计数,当计数值大于一定值后再输出该有效电平,否则不输出,从而达到消抖目的.
VHDL的RTL描述如下:
library ieee;
use ieee.std_logic_1164.all;
entity haoin is
    port(din,clk:in std_logic;
            dout:out std_logic);
end haoin;
architecture rtl of haoin is
begin
  process(din)
  variable t: integer range 0 to 63:=0;
  begin
      if  din='1' then
        if clk 'event and clk='1'then
          t:=t+1;
          if t>10 then
          dout<='1';t:=t-1;
          else dout<='0'; 
          end if;
        end if;
      else dout<='0';t:=0;
      end if;
  end process;
end rtl;
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity ring is
  port(
        clk: in std_logic;
        clk500: in std_logic;
今日国内油价
        clk1k:in std_logic;
        beep:out std_logic);
end ring;
architecture rtl of ring is
begin
  process(clk)
  variable t: std_logic;
  variable n: integer range 0 to 15:=0;
  begin
      if clk 'event and clk='1' then
        t:=not t;n:=n+1;
      end if;
      if t='1' and n<11 then
        beep<=clk500;
      elsif n=11 then
        beep<=clk1k;
      else beep<='Z';
      end if;
劳斯莱斯堵医院应急通道  end process;
end rtl;
library IEEE;
use IEEE.std_logic_1164.all;
use IEEE.std_logic_arith.all;
use IEEE.std_logic_unsigned.all;
entity clock is
            port(
                SA:  in std_logic;
                SB:  in std_logic;
                SC:  in std_logic;
                SD:  in std_logic;
                clk1:  in std_logic;
                dout: buffer std_logic_vector(23 downto 0);
                --seg_data:out std_logic_vector(7 downto 0);
                --seg_co米:out std_logic_vector(3 downto 0);
                beep: out std_logic
                --led:out std_logic_vector(3 downto 0)