多功能数字电子钟
《数字逻辑与数字系统课程设计》
实验报告
多功能数字电子钟
成绩:
指导教师: 班级 : 学号 : 姓名 :
完成时间:
目录
一.概述........................................................................................................................ 2
1.1数字钟简介...................................................................................................... 2 1.2设计目的.......................................................................................................... 2 二.工作原理................................................................................................................ 3 三.功能设计要求........................................................................................................ 4 四.各部分的电路及其实现........................................................................................ 7
4. 1 主控制器..................................................................................................... 7 4.2 1选6数据选择器.................................................................................... 11 4.3 2选1数据选择器.................................................................................... 12 4.4 分频器....................................................................................................... 13 4.5 24进制计时器.......................................................................................... 15 4.6 60进制计时器.......................................................................................... 16 4.7 闪烁器....................................................................................................... 18 4. 8 模8计数器............................................................................................... 19 4.9 8选1数据选择器.................................................................................... 20 4.10 数据比较器及报时电路........................................................................... 22 4.11 2选1数据选择器.................................................................................... 24 4.12 74LS48译码器.......................................................................................... 25 五.顶层模块图.......................................................................................................... 27 六.心得与体会.......................................................................................................... 27
一.概述
1.1数字钟简介
20世纪末,电子技术获得了飞速的发展,在其推动下,现代电子产品几乎深入到社会的各个领域,有力的推动了社会生产力的发展和社会信息化程度的提高,给人们的生活,学习,工作,娱乐带来了极大地方便。由于数字集成电路的发展,使得数字电子钟具有走时准确,性能稳定,体积小,功耗小,功能多,携带方便等优点。电子钟是一种用数字电路技术实现的时,分,秒计时的装置,与机械时钟相比具有更长的使用寿命,在许多电子设备中被广泛使用。 1.2设计目的
(1)让学生掌握时序逻辑电路,组合逻辑电路及数字逻辑电路系统的设计,安装,测试方法。
(2)进一步巩固所学的理论知识,提高运用所学知识分析和解决实际问题的能力。
(3)提高电路布局,布线及检查和排除故障的能力。
二.工作原理
电子钟是一个将“ 时”,“分”,“秒”显示于人的视觉器官的计时装置。它的计时周期为24小时,显示满刻度为23时59分59秒,具有校时功能和报时功能。因此,一个基本的数字钟电路主要由译码显示器、“时”,“分”,“秒”计数器、校时电路、报时电路和振荡器组成。主电路系统由秒信号发生器、“时、分、秒”计数器、译码器及显示器、校时电路、整点报时电路组成。秒信号产生器是整个系统的时基信号,它直接决定计时系统的精度,一般用石英晶体振荡器加分频器来实现。将标准秒信号送入“秒计数器”,“秒计数器”采用60进制计数器,每累计60秒发出一个“分脉冲”信号,该信号将作为“分计数器”的时钟脉冲。“分计数器”也采用60进制计数器,每累计60分钟,发出一个“时脉冲”信号,该信号将被送到“时计数器”。“时计数器”采用24进制计时器,可实现对一天24小时的累计。译码显示电路将“时”、“分”、“秒”计数器的输出状态用七段显示译码器译码,通过七段显示器显示出来。整点报时电路时根据计时系统的输出状态产生一脉冲信号,然后去触发一音频发生器实现报时。校时电路时用来对“时”、“分”、“秒”显示数字进行校对调整。
三.功能设计要求
3.1.设计要求
(1)具有以二十四小时制计时,显示,整点报时,时间设置和闹钟的功能。
(2)设计精度要求为1 s。 3.2. 系统功能描述
(1)系统输入:系统状态及校时,定时转换的控制信号为k ,set ;时钟信号clk ,采用1024HZ ;系统复位信号为reset ;校时按键输入为mode 。输入信号均由按键产生。
(2)系统输出:LED 显示输出;蜂鸣器声音信号输出。 (3)多功能数字钟控制器的状态图如图所示:
图中:S0:显示计时时间 S1:调计时的时 S2:调计时的分 S3:调计时的秒 T0:显示闹铃时间 T1:调闹铃的时
T2:调闹铃的分 T3:调闹铃的秒 3.3系统功能的具体描述如下:
(1)计时:正常工作状态下,每日按24h 计时制计时并显示,蜂鸣器无声,逢整点报时。
(2)校时:在计时显示状态下,按下“set 键”,进入“小时”校准状态,之后按下“k 键”则进入“分”校准状态,继续按下“k 键”则进入“秒”校准状态,再次按下“k 键”又恢复到正常计时显示状态。
A:“小时”校准状态下,显示“小时”的数码管闪烁,按下mode 键自动加1。
B:“分”校准状态下,显示“分”的数码管闪烁,按下mode 键自动加1。
C:“秒”校准状态下,显示“秒”的数码管闪烁,按下mode 键自动加1。
(3) 整点报时:蜂鸣器在59分钟的第51,53, 55,57秒发频率为512HZ 的低音,在第59秒发频率为1024HZ 的高音,结束时为整点。 (4)显示:采用扫描显示方式驱动6个LED 数码管显示小时,分 , 秒。
(5) 闹钟:闹钟定时时间到,蜂鸣器发出512HZ 的“滴”,“滴” 声持续时间为1分钟,闹钟定时显示。
(6)闹钟定时设置:在闹钟定时显示状态下,按下“set 键”进入闹 钟的“时”设置状态,之后按下“k 键”进入闹钟的“分”设置状态,
继续按下“k 键”进入闹钟的秒设置状态,再次按下“k 键”又恢复 到闹钟定时显示状态。 (7)闹钟定时设置状态
A:“小时”校准状态下,显示“小时”的数码管闪烁,按下mode 键自动加1。
B:“分”校准状态下,显示“分”的数码管闪烁,按下mode 键自动加1。
C:“秒”校准状态下,显示“秒”的数码管闪烁,按下mode 键自动加1。
3.4数字钟系统电路结构框图如图所示
四.各部分的电路及其实现
4.1主控制器 (1)模块图
(2)控制器功能
控制时钟的正常计时显示和闪烁,校时;闹钟的定时及闪烁;选择时钟还是闹钟的显示输出;系统清零。 (3)源代码
library ieee;
use ieee.std_logic_1164.all; use ieee.std_logic_arith.all; use ieee.std_logic_unsigned.all;
entity zhukong is
port(k,set,reset,clk,mode:in std_logic; clr,outclk:out std_logic;
s_hen,s_men,s_sen,t_hen,t_men,t_sen,sel:out std_logic; t:out std_logic_vector(2 downto 0) );
end zhukong;
architecture rtl of zhukong is
type state is(s0,s1,s2,s3,t0,t1,t2,t3); signal ns:state:=s0;
begin
process(k,set,reset,clk,mode) begin
if(reset='1')then
clr
elsif(clk'event and clk='1')then case ns is
when s0=>
sel
if(k='1')then ns
elsif(set='1')then ns
ns
when s1=>
sel
ns
when s2=>
sel
ns
when s3=>
sel
ns
ns
when t0=>
sel
if(k='1')then ns
ns
when t1=>
sel
ns
when t2=>
sel
ns
when t3= >
sel
ns
when others=>ns
end case; end if;
end process; end rtl;
功能阐述:
s0, s1, s2, s3, t0, t1, t2, t3分别对应八种状态,实验箱的按键自然状态下默认为高电平,所以输入接了非门。输入端口k 与set 是八种状态相互转换的按键信号;reset 是系统复位信号,当reset=1时让输出端口clr=1完成正常计时电路及闹钟电路的全部清零操作,clk 是时钟频率;s_hen, s_men, s_sen, t_hen, t_men, t_sen,分别是正常显示电路及闹钟电路的时,分,秒的使能端,当使能为0时正常显示,为1时进行校时及闪烁。sel 决定显示计时电路还是闹钟电路;t 决定当校时时让mode 信号给谁。
(4)仿真图
4.2 1选6数据选择器 (1)模块图
(2)选择器功能
sel 是地址,根据地址选择将clkin (时钟)赋给y1—y6,y0是when others时的情况,它不输出也不给任何值 (3)源代码
library ieee;
use ieee.std_logic_1164.all; use ieee.std_logic_arith.all; use ieee.std_logic_unsigned.all;
entity select1_6 is port(clkin:in std_logic;
sel:in std_logic_vector(2 downto 0); y0,y1,y2,y3,y4,y5,y6:out std_logic );
end select1_6;
architecture rtl of select1_6 is begin
process(sel,clkin) begin
case sel is
when "001"=>y1y2y3y4y5
when "110"=>y6y0
(4)仿真图
4.3 2选1数据选择器 (1)模块图
(2)选择器功能
当en=0时,让时钟clk1给outclk ;当en=0时,让时钟clkmode 给outclk (3)源代码
library ieee;
use ieee.std_logic_1164.all;
entity select2_clk is
port(clk1,clkmode,en:in std_logic; outclk:out std_logic );
end select2_clk;
architecture rtl of select2_clk is begin
process(en,clk1,clkmode) begin
if(en='0')then outclk
outclk
(4) 仿真图
4.4 分频器 (1) 模块图
(2) 分频器功能
将输入频率clk 为1024HZ 分为1024HZ ,512HZ ,4HZ ,1HZ 。 (3)源代码
library ieee;
use ieee.std_logic_1164.all; use ieee.std_logic_arith.all; use ieee.std_logic_unsigned.all;
entity fenpin is
port(clk:in std_logic;
clk1024,clk512,clk4,clk1:out std_logic ); end fenpin;
architecture rtl of fenpin is
signal q:std_logic_vector(9 downto 0):="0000000000"; begin
process(clk,q) begin
if(clk'event and clk='1')then if(q="1111111111")then q
q
end process;
clk1024
(4)仿真图
4.5 24进制计时器 (1)模块图
(2)计时器功能
clr=1时在时钟的配合下实现清零操作,否则递增加1,到23时归零, d1为高位,d2为低位。 (3) 源代码
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL; USE IEEE.STD_LOGIC_ARITH.ALL; ENTITY mod24 IS PORT(
clk : IN STD_LOGIC; clr : IN STD_LOGIC;
d1 : OUT STD_LOGIC_VECTOR(3 DOWNTO 0); d2 : OUT STD_LOGIC_VECTOR(3 DOWNTO 0) ); END mod24;
ARCHITECTURE rtl of mod24 IS
SIGNAL d1_temp : STD_LOGIC_VECTOR(3 DOWNTO 0):="0000"; SIGNAL d2_temp : STD_LOGIC_VECTOR(3 DOWNTO 0):="0000"; signal coo:std_logic:='0'; BEGIN
PROCESS(clk,clr,d1_temp,d2_temp) BEGIN
if(clk'event and clk='1')then
IF (clr='1' or (d1_temp="0010" and d2_temp="0011")) THEN d1_temp
coo
elsif (d1_temp
d1_temp
d2_temp
END PROCESS; END rtl;
(4) 仿真图
4.6 60进制计时器 (1) 模块图
(2) 计时器功能
clr=1时在时钟的配合下实现清零操作,否则递增加1,到59时归零, d1为高位,d2为低位。co 为进位输出 (3) 源代码
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL; USE IEEE.STD_LOGIC_ARITH.ALL; ENTITY mod60 IS PORT(
clk : IN STD_LOGIC; clr : IN STD_LOGIC;
d1 : OUT STD_LOGIC_VECTOR(3 DOWNTO 0); d2 : OUT STD_LOGIC_VECTOR(3 DOWNTO 0); co:out std_logic ); END mod60;
ARCHITECTURE rtl of mod60 IS
SIGNAL d1_temp : STD_LOGIC_VECTOR(3 DOWNTO 0):="0000"; SIGNAL d2_temp : STD_LOGIC_VECTOR(3 DOWNTO 0):="0000"; signal coo:std_logic:='0'; BEGIN
PROCESS(clk,clr,d1_temp,d2_temp,coo) BEGIN
if(clk'event and clk='1')then
IF (clr='1' or (d1_temp="0101" and d2_temp="1001")) d1_temp
elsif (d1_temp
d1_temp
d2_temp
THEN
d2
(4) 仿真图
4.7 闪烁器 (1) 模块图
(2) 闪烁器功能
当en=0时, 让其正常显示; 当en=1时, 如果clk 时钟的状态为1则显示, 否则让输出为1110, 在74ls48中让这个状态为灭. ( 3 )源代码
library ieee;
use ieee.std_logic_1164.all; entity shanshuo is
port(en,clk:in std_logic;
dih,dil:in std_logic_vector(3 downto 0); doh,dol:out std_logic_vector(3 downto 0)
);
end shanshuo;
architecture rtl of shanshuo is begin
process(en,clk,dih,dil) begin
if(en='1')then if(clk='1')then doh
doh
doh
(4)仿真图
4.8模8计数器 (1)模块图
(2)功能
在1024HZ 下进行模八,输出送给8选1数据选择器和138译码器 (3) 源代码
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL; USE IEEE.STD_LOGIC_ARITH.ALL; ENTITY count8 IS PORT(
clk:in std_logic;
y :out std_logic_vector(2 downto 0) ); END count8;
ARCHITECTURE rtl of count8 is
signal q:std_logic_vector(2 downto 0):="000"; begin
process(clk,q) begin
if(clk'event and clk='1')then if(q="111")then q
q
end process; end rtl;
(4) 仿真图
4.9 8选1数据选择器 (1)模块图
(2)选择器功能
通过sel 地址选择将d0—d7中的一个送给y 输出 (3)源代码
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL; USE IEEE.STD_LOGIC_ARITH.ALL; ENTITY select8 IS PORT(
en : IN STD_LOGIC;
d0 : IN STD_LOGIC_vector(3 downto 0);
d1 : in STD_LOGIC_VECTOR(3 DOWNTO 0); d2 :in STD_LOGIC_VECTOR(3 DOWNTO 0); d3 :in STD_LOGIC_VECTOR(3 DOWNTO 0); d4 :in STD_LOGIC_VECTOR(3 DOWNTO 0); d5 :in STD_LOGIC_VECTOR(3 DOWNTO 0); d6 :in STD_LOGIC_VECTOR(3 DOWNTO 0); d7 :in STD_LOGIC_VECTOR(3 DOWNTO 0); sel:in std_logic_vector(2 downto 0);
y :out std_logic_vector(3 downto 0) ); END select8;
ARCHITECTURE rtl of select8 is begin
process(sel,d0,d1,d2,d3,d4,d5,d6,d7) begin
if(en='1')then
case sel is
when "000"=>yyyyyyyy
(4)仿真图
4.10 数据比较器及报时电路 (1)模块图
(2)功能描述
计时电路的时与分和闹钟的时与分相同时,响512HZ 的频率1分钟,否则在59分钟的第51,53, 55,57秒发频率为512HZ 的低音,在第59秒发频率为1024HZ 的高音,结束时为整点。 (3)源代码
library ieee;
use ieee.std_logic_1164.all; use ieee.std_logic_arith.all; use ieee.std_logic_unsigned.all;
entity compare is port(
clk1,clk512,clk1024:in std_logic;
A1,A2,A3,A4,A5,A6:in std_logic_vector(3 downto 0); B1,B2,B3,B4,B5,B6:in std_logic_vector(3 downto 0); outclk:out std_logic );
end compare;
architecture rtl of compare is
signal d:std_logic_vector(2 downto 0):="000"; signal s:std_logic:='0'; begin
process( A1,A2,A3,A4,A5,A6,B1,B2,B3,B4,B5,B6,clk1,clk512,clk1024) begin
if(A1=B1 and A2=B2 and A3=B3 and A4=B4 )then if(clk1='1')then outclk
outclk
if(A3="0101" and A4="1001" and A5="0101")then
if(A6="0001" or A6="0011" or A6="0101" or A6="0111")then outclk
outclk
end process; end rtl;
(4)仿真图
4.11 2选1数据选择器 (1)模块图
(2)功能
当k=1时让计时电路显示,否则让闹钟电路显示 (3)源代码
library ieee;
use ieee.std_logic_1164.all; entity select2 is port(k:in std_logic;
d1:in std_logic_vector(3 downto 0); d2:in std_logic_vector(3 downto 0); y:out std_logic_vector(3 downto 0)
end select2;
architecture rtl of select2 is begin
process(k) begin
if(k='1')then y
y
(4)仿真图
4.12 74LS48译码器 (1)模块图
(2)功能 实现对LED 的扫描 (3)源代码
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL; USE IEEE.STD_LOGIC_ARITH.ALL; ENTITY ym7 IS PORT(
en:in std_logic;
d:in std_logic_vector(3 downto 0);
y :out std_logic_vector(6 downto 0) ); END ym7;
ARCHITECTURE rtl of ym7 is begin
process(d,en) begin
if(en='1')then case d is
when "0000"=>yyyyyyyyyyyy
五.顶层模块图
六.心得与体会
1. 通过此次课程设计,对多功能数字电子钟有了深刻的了解,提高了用VHDL 语言编写程序的熟练程度,并且掌握了仿真的方法及排错改错的能力。
2. 学会了运用动态显示数据的方法,也认识到分频器的重要性,以及消除按键抖动的方法,加强了自己的动手能力,提高了对所学知识的综合运用和理解。同时也感谢老师的细心,耐心的解答和帮助。硬件是我们的涉及方向,能够学习数字逻辑这门课程也对我们的发展有极
大的帮助。