EDA技术课程设计多功能数字钟学院:城市学院专业、班级:姓名:指导老师:20XX年12月目录1、设计任务与要求 (2)2、总体框图 (2)3、选择器件 (2)4、功能模块 (3)(1)时钟记数模块 (3)(2)整点报时驱动信号产生模块 (6)(3)八段共阴扫描数码管的片选驱动信号输出模块 (7)(4)驱动八段字形译码输出模块 (8)(5)高3位数和低4位数并置输出模块 (9)5、总体设计电路图 (10)(1)仿真图 (10)(2)电路图 (10)6、设计心得体会 (11)一、设计任务与要求1、具有时、分、秒记数显示功能,以24小时循环计时。
2、要求数字钟具有清零、调节小时、分钟功能。
3、具有整点报时,整点报时的同时输出喇叭有音乐响起。
二、总体框图多功能数字钟总体框图如下图所示。
它由时钟记数模块(包括hour、minute、second 三个小模块)、驱动8位八段共阴扫描数码管的片选驱动信号输出模块(seltime)、驱动八段字形译码输出模块(deled)、整点报时驱动信号产生模块(alart)。
系统总体框图三、选择器件网络线若干、共阴八段数码管4个、蜂鸣器、hour(24进制记数器)、minute(60进制记数器)、second(60进制记数器)、alert(整点报时驱动信号产生模块)、seltime(驱动4位八段共阴扫描数码管的片选驱动信号输出模块)、deled(驱动八段字形译码输出模块)。
四、功能模块多功能数字钟中的时钟记数模块、驱动8位八段共阴扫描数码管的片选驱动信号输出模块、驱动八段字形译码输出模块、整点报时驱动信号产生模块。
(1) 时钟记数模块:<1.1>该模块的功能是:在时钟信号(CLK)的作用下可以生成波形;在清零信号(RESET)作用下,即可清零。
VHDL程序如下:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity hour24 isport( clk: in std_logic;reset:instd_logic;qh:BUFFER STD_LOGIC_VECTOR(2 DOWNTO 0);ql:BUFFER STD_LOGIC_VECTOR(3 DOWNTO 0));end hour24;architecture behav of hour24 isbeginprocess(reset,clk)beginif reset='1' then qh<="000"; ql<="0000";elsif(clk'event and clk='1') thenif (qh<2) thenif (ql=9) thenql<="0000"; qh<=qh + 1;else ql<=ql+1;end if;elseif (ql=3) then ql<="0000"; qh<="000";else ql<=ql+1;end if;end if;end if;end process;end behav;仿真波形如下:VHDL程序如下:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY min60 ISPORT(reset:IN STD_LOGIC;load:IN STD_LOGIC;clk1:IN STD_logic;clk:IN STD_LOGIC;co:OUT STD_LOGIC;qh:BUFFER STD_LOGIC_VECTOR(2 DOWNTO 0); ql:BUFFER STD_LOGIC_VECTOR(3 DOWNTO 0)); end min60;ARCHITECTURE behave OF min60 ISBEGINPROCESS(clk,reset,load)BEGINif(reset='1') thenqh<="000"; ql<="0000"; elsif(load='1') then co<=clk1;elsif(clk'EVENT and clk='1') thenif(ql=9) thenql<="0000";--低4位清零if(qh=5) then qh<="000";--高4位清零else qh<=qh+1 ;--计数功能的实现;end if;else ql<=ql+1; --低4位加1end if;if(qh=5 and ql=9) then co<='1';else co<='0';end if;end if;end process;end behave;仿真波形如下:VHDL程序如下:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY sec60 ISPORT(reset:IN STD_LOGIC;load:IN STD_LOGIC;clk1:IN STD_LOGIC;co:OUT STD_LOGIC;qh:BUFFER STD_LOGIC_VECTOR(2 DOWNTO 0); ql:BUFFER STD_LOGIC_VECTOR(3 DOWNTO 0)); END sec60;ARCHITECTURE behave OF sec60 ISBEGINPROCESS(clk,reset,load)BEGINif(reset='1')thenqh<="000"; ql<="0000"; elsif(load='1')then co<=clk1;elsif(clk'EVENT and clk='1') THENif(ql=9)thenql<="0000";--低4位清零if(qh=5) then qh<="000";--高4位清零 else qh<=qh+1 ;--计数功能的实现; end if;else ql<=ql+1; --低4位加1end if;if(qh=5 and ql=9) then co<='1';else co<='0';end if;end if ;end process;end behave;波形仿真如下:(2)整点报时驱动信号产生模块该模块功能:在时钟信号(CLK)的作用下可以生成波形,SPEAK输出接扬声器,以产生整点报时发声。
VHDL程序如下:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity alert isport(clk:in std_logic;dain:in std_logic_vector(6 downto 0);speak:out std_logic;lamp:out std_logic_vector(2 downto 0));end alert;architecture fun of alert issignal count:std_logic_vector(1 downto 0);signal count1:std_logic_vector(1 downto 0);beginspeaker:process(clk)beginspeak<=count1(1);if(clk 'event and clk='1') thenif(dain="1011001") thenif(count1>="10")thencount1<="00";else count1<=count1+1;end if;else count1<="00";end if;end if;end process speaker;lamper:process(clk)beginif(clk 'event and clk='1')thenif(dain="1011001") thenif(count<="10")thenif(count="00")thenlamp<="001";elsif(count="01")thenlamp<="010";elsif(count="10")thenlamp<="100";end if;count<=count+1;else count<="00";end if;end if;end if;end process lamper;end fun;波形仿真如下:(3)驱动8位八段共阴扫描数码管的片选驱动信号输出模块VHDL程序如下:LIBRARY ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;use ieee.std_logic_arith.all;entity seltime isport(clk2,reset:in std_logic;hourqh,secqh,minqh:in std_logic_vector(2 downto 0);hourql,minql,secql:in std_logic_vector(3 downto 0);daout:out std_logic_vector(3 downto 0);sel:out std_logic_vector(2 downto 0));end seltime;architecture fun of seltime issignal count:std_logic_vector(2 downto 0);beginsel<=count;--选择数码管的那一块process(clk2,reset)beginif(reset='1') then count<="000";elsif(clk2' event and clk2='1') thenif(count>="101") then count<="000";else count<=count+1;end if;end if;case count iswhen"000"=>daout<=secql(3 downto 0); --对应的数码管显示的数据when"001"=>daout(3)<='0';daout(2 downto 0)<=secqh(2 downto 0); when"010"=>daout<=minql(3 downto 0);when"011"=>daout(3)<='0';daout(2 downto 0)<=minqh(2 downto 0); when"100"=>daout<=hourql(3 downto 0);when others=>daout(3)<='0';daout(2 downto 0)<=hourqh(2 downto 0);end case;end process;end fun;波形仿真如下:(4)驱动八段字形译码输出模块该模块功能:信号输入后,模块驱动八段字形译码输出,A,B,C,D,E,F,G 分别接八段共阴级数码管7个接口,即有字形输出。