数字时钟设计实验报告

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

院系:物理与电子工程学院专业:电子信息工程

班级:2008级3班

指导老师:***

*名:**

学号:************ 实验时间:2010年12月10日

前言

本设计为一个多功能的数字钟,具有时、分、秒计数显示功能,以24小时循环计数;具有校对功能及整点报时功能。

本设计采用EDA技术,以硬件描述语言VHDL为系统逻辑描述手段设计文件,在MAXPLUSⅡ工具软件环境下,采用自顶向下的设计方法,由各个基本模块共同构建了一个基于FPGA的数字钟。

系统主芯片采用EP1K3QC208-3,由时钟模块、控制模块、计时模块、数据译码模块、显示及报时模块组成。经编译和仿真所设计的程序,在可编程逻辑器件上下载验证,本系统能够完成时、分、秒的分别显示,由按键输入进行数字钟的校对、清零、启停功能。

数字时钟实验设计

一、实验目的

1.掌握十进制,六进制,二十四进制计数器以及译码器的设计方法。

2.掌握多位计数器相连的设计方法。

3. 掌握多位数码管扫描显示驱动的设计方法。

4. 掌握EDA技术的层次化设计方法。

5、了解数字时钟的组成及工作原理。

6、熟悉数字时钟的设计与制作。

二、实验内容

1. 设计具有时,分,秒,计数显示功能,以24小时循环计时的电子钟。

2. 设计电子钟复位清零功能。

3. 设计调节小时、分钟、秒功能。

三、实验仪器

1. EDA实验箱

2. 导线若干

3.max+plu2软件

四、设计思路

1.要完成秒/分/时的各阶段的正确进位,就要设计两个60进制和一个24进制,为了更加给数字钟一个完善的功能,还设置了一个清零功能和校时、校分。

2. 要依次显示秒/分/时,就要连接数码管,共六个数码管一个数码管要七根输入线,故六个数码管共要42根输出线,不紧接线复杂而且浪费本钱,故我们采用动态扫描驱动显示秒/分/时。

3.总体结构图如图所示(1-1)。

五.数字钟的工作原理

振荡器产生稳定的高频脉冲信号,作为数字钟的时间基准,然后经过分频器输出标准秒脉冲。秒计数器满60后向分计数器进位,分计数器满60后向小时计数器进位,小时计数器按照“24翻1”规律计数。计数满后各计数器清零,重新计数。计数器的输出分别经译码器送数码管显示。计时出现误差时,可以用校时电路校时、校分。控制信号由1×5矩形键盘输入。时基电路可以由石英晶体振荡电路构成,假设晶振频率1MHz,经过6次十分频就可以得到秒脉冲信号。译码显示电路由八段译码器完成。

用counter6无进位六进制计数器选择数码管的亮灭以及对应的数,循环扫描显示,用dout六选一选择器选择给定的信号输出对应的数送到七段码译码器。由按键输入清零/校时、分信号经按键消抖动模块,再输入到秒计时器、时计时器,最后输入到显示译码控制模块。

六.单元模块设计部分

单元模块分别由五个模块组成。译码器的设计、六进制的设计、十进制的设计、二十四进制的设计和时钟扫描控制端的输出共五个模块组成。

1.译码器模块的设计

显示译码控制器的输入均为8421BCD码,分别是秒计数器的输出秒十位、秒个位;分计数器的输出分十位、分个位;时计数器的输出时十位、时个位;还有一个分频器输出的512Hz的时钟信号作为扫描的时钟,显示译码控制器的输出为8位段码信号及6位的数码管选择信号。具体实现的程序如下:library IEEE;

use IEEE.STD_LOGIC_1164.ALL;

use IEEE.STD_LOGIC_ARITH.ALL;

use IEEE.STD_LOGIC_UNSIGNED.ALL;

entity decoder is

Port (din:in std_logic_vector(3 downto 0 ); --四位二进制码输入dout:out std_logic_vector(6 downto 0) ); --输出LED七段码

end decoder;

architecture Behavioral of decoder is

begin

process(din)

begin

case din is

when "0000" => dout<="0111111";--0

when "0001" => dout<="0000110";--1

when "0010" => dout<="1011011";--2

when "0011" => dout<="1001111";--3

when "0100" => dout<="1100110"; --4

when "0101" => dout<="1101101";--5

when "0110" => dout<="1111101";--6

when "0111" => dout<="0000111";--7

when "1000" => dout<="1111111";--8

when "1001" => dout<="1101111";--9

when others => dout<="1110111";

end case;

end process;

end Behavioral;

2.六进制模块的设计

library IEEE;

use IEEE.STD_LOGIC_1164.ALL;

use IEEE.STD_LOGIC_ARITH.ALL;

use IEEE.STD_LOGIC_UNSIGNED.ALL;

entity counter6 is

Port ( clk : in std_logic;

reset : in std_logic;

dout : out std_logic_vector(3 downto 0);

c:out std_logic);

end counter6;

architecture Behavioral of counter6 is

signal count : std_logic_vector(3 downto 0);

begin

dout <= count;

process(clk,reset)

begin

if reset= '0' then

count <= "0000";

相关文档
最新文档