原创 FPGA_4电子时钟

2011-2-6 13:07 1973 6 7 分类: FPGA/CPLD

把数码管玩了一下,想做个电子时钟,正在调试阶段以调试出来了,现已经测试完毕,相关代码如下

library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
use ieee.std_logic_arith.all;
entity shizhong is
  port(clk:in std_logic;
  beer:out bit;
  we:out std_logic_vector(7 downto 0);
  dout:out std_logic_vector(7 downto 0));
  end shizhong;
  architecture dianzi of shizhong is
    signal tsl:std_logic_vector(3 downto 0);
    signal tsh:std_logic_vector(3 downto 0);
    signal tml:std_logic_vector(3 downto 0);
    signal tmh:std_logic_vector(3 downto 0);    
    signal thl:std_logic_vector(3 downto 0);
    signal thh,data:std_logic_vector(3 downto 0);
    signal clk0,clk_1k,q1,q2,q3,q4:std_logic;
    signal count:integer range 0 to 25000000;
    component counter10 is
        port(clk:in std_logic;
              dout:out std_logic_vector(3 downto 0);
              c:out std_logic);
    end component;
  
     component counter6 is
        port(clk:in std_logic;
              dout:out std_logic_vector(3 downto 0);
              c:out std_logic);
    end component;
   
    component counter24 is
        port(clk:in std_logic;
              hl:out std_logic_vector(3 downto 0);
              hh:out std_logic_vector(3 downto 0));
    end component;
   
    component display is
        port( din:in std_logic_vector(3 downto 0);
              dout:out std_logic_vector(7 downto 0));
    end component;
   begin
   beer<='1';
  u1:counter10 port map(clk0,tsl,q1);--产生秒低位
  u2:counter6 port map(q1,tsh,q2);--产生秒高位
  u3:counter10 port map(q2,tml,q3);--产生分低位
  u4:counter6 port map(q3,tmh,q4);--产生时高低位
  u5:counter24 port map(q4,thl,thh);--产生时高位
 
    process (clk_1k)  --动态扫描显示,先位选 后送段选
    variable cnt2:std_logic_vector(3 downto 0);
     begin
    if clk_1k'event and clk_1k='1' then cnt2:=cnt2+1;
   if cnt2="0001" then
   we<="01111111";
   data<=thh;
   elsif cnt2="0010" then
   we<="10111111";
   data<=thl; 
   elsif cnt2="0011" then
   we<="11011111";
   data<="1010"; 
   elsif cnt2="0100" then
   we<="11101111";
   data<=tmh;
   elsif cnt2="0101" then
   we<="11110111";
   data<=tml;
  elsif cnt2="0110" then
   we<="11111011";
   data<="1011"; 
   elsif cnt2="0111" then
   we<="11111101";
   data<=tsh;
   elsif cnt2="1000" then
   we<="11111110";
   data<=tsl;
   cnt2:="0000";
   end if;
    end if;
    end process;
   process(clk)--产生1k的扫描信号
    variable cnt:integer range 0 to 25000;
      begin
       if rising_edge(clk) then cnt:=cnt+1;
         if cnt<12500 then clk_1k<='1';
          elsif cnt<25000 then clk_1k<='0';
          else cnt:=0;clk_1k<='0';
        end if;
        end if;
   end process;
    process(clk)      --  产生约1s时钟
    begin
     if clk'event and clk='1' then
     if count=25000000 then
      count<=0;
      clk0<=not clk0;
     else
      count<=count + 1 ;
         end if ;
  end if ;
   end process;
  u6:display port map(data,dout);--调用显示模块
  end dianzi;
 

文章评论1条评论)

登录后参与讨论

用户377235 2013-6-20 15:18

counter6, counter24, counter display 在哪定义的?

相关推荐阅读
wxg1988 2014-04-22 17:50
全球创客马拉松武汉站已经开始报名啦
星星之火,可以燎原! 全球创客马拉松在深圳、上海、北京、南京、成都等地相继点燃中国的创客之火,下一站:武汉! 改变世界,抑或改变自己,全球创客马拉松也许可以是梦想启航的地方。 英雄不问...
wxg1988 2013-10-24 13:15
液晶显示器原理LCD驱动基础
LCD显示器概述   ——》液晶显示器,LCD为英文 Liquid Crystal Display的缩写,它是一种数字显示技术,可以通过液晶和彩色过滤光源,并在平面面板上产生图像。  ...
wxg1988 2013-08-13 10:20
Arduino mini 亲手打造
Arduino,满足您创新创意的需要! Arduino 是一款便捷灵活、方便上手的开源电子原型平台,包含硬件(各种型号的Arduino板)和软件(Arduino IDE)。它适用于艺术家、设计...
wxg1988 2013-07-30 20:44
【博客大赛】STM32中断小结
  STM32中断EXTI STM32中断支持15个异常中断和240个外部中断,有256个中断优先级,其中I/O可配置为EXTI中断,捕捉外部信号,可配置为上升沿,下降沿,上升下降沿三种中...
wxg1988 2013-07-16 21:09
关注创客与开源电子,可以订阅
   http://list.qq.com/cgi-bin/qf_invite?id=04a0d177cb5a2dd6a4da786f024011139e353139950c4411 关注创客...
我要评论
1
6
关闭 站长推荐上一条 /2 下一条