中北学院
现代电子系统设计_数字电子钟实验报告
姓班学专
名 : 级 : 号 : 业 :
叶子 0932班
电子信息工程
倪小琦 2012年5月19日
任课教师 : 完成时间 :
word文档 可自由复制编辑
目录
第一章数字电子钟功能简介………………………………………………………3
第二章数字电子钟原理介绍………………………………………………………3 2.1数字电子钟基本原理 …………………………………………………………3 2.2数字电子钟电路组成 …………………………………………………………3
第三章利用QuartusII设计数字电子钟 …………………………………………7 3.1按键去抖动模块 ………………………………………………………………7 3.2分频电路模块 …………………………………………………………………9 3.3选择器模块……………………………………………………………………13 3.4计数模块………………………………………………………………………14 3.5分位电路模块…………………………………………………………………18 3.6数码管动态显示扫描模块……………………………………………………21 3.7数码管动态显示模块…………………………………………………………22
第四章仿真与实现………………………………………………………………25
word文档 可自由复制编辑
第一章数字电子钟功能简介
计时功能:这是本计时器设计的基本功能,可进行时、分、秒计时,并显示在
6个七段数码管上。。
调时功能:当需要校时,可通过实验箱上的按键控制,按下对应的按键,可调
整对应的时、分状态。
第二章数字电子钟原理简介
2.1数字电子钟基本原理
数字钟电路的基本结构由两个60进制计数器和一个24进制计数器组成,分别对秒、分、小时进行计时,当计时到23时59分59秒时,再来一个计数脉冲,计数器清零,重新开始计时。
秒计数器的计数时钟CLK为1Hz的标准信号,可以由27MHz信号通过分频得到。当数字钟处于计时状态时,秒计数器的进位输出信号作为分钟计数器的计数信号,分钟计数器的进位输出信号又作为小时计数器的计数信号。时、分、秒的计时结果通过6个数码管来动态显示。
数字钟除了能够正常计时外,还应能够对时间进行调整。可通过模式选择信 号控制数字钟的工作状态,即控制数字钟,使其分别工作于正常计时,调整分、时和设定分、时状态。
当数字钟处于计时状态时,3个计数器允许计数,且秒、分、时计数器的计数时钟信号分别为CLK,秒的进位, 分的进位;当数字钟处于调整时间状态时,被调的分或时会一秒一秒地增加。 2.2数字电子钟电路组成
本实验数字电子钟的设计电路主要由七个模块组成,分别是:按键去抖动模块、分频电路模块、选择器模块、计数模块、分位电路模块、数码管动态显示扫描模块、数码管动态显示模块。 按键去抖动模块如图2-1所示
word文档 可自由复制编辑
图2-1
分频电路模块如图2-2所示
图2-2
word文档 可自由复制编辑
选择器模块如图2-3所示
图2-3
计数模块如图2-4所示
图2-4
分位电路模块如图2-5所示
word文档 可自由复制编辑
图2-5
数码管动态显示扫描模块如图2-6所示
图2-6
数码管动态显示模块如图2-7所示
图2-7
word文档 可自由复制编辑
电路图整体设计如图2-8所示
图2-8
第三章利用QuartusII设计数字电子钟
3.1按键去抖动模块
按键去抖动模块的元件设计如图3-1所示
图3-1
按键去抖动的VHDL语言设计如下: library ieee;
use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all;
word文档 可自由复制编辑
use ieee.std_logic_arith.all;
entity debounce is port ( );
end debounce;
architecture behave of bounce is type state is (S0,S1,S2); signal current: state; Begin
process(clk,qin) begin
if(clk'event and clk = '1') then
case current is
when S0 => qcout <= '1';
if(qcin = '0') then
current <= S1; current <= S0; else end if;
if(qcin = '0') then
current <= S2; current <= S0; else end if;
if(qcin = '0') then
current <= S2;
clk:in std_logic; qcin:in std_logic; qcout:out std_logic
when S1 => qcout <= '1';
when S2 => qcout <= '0';
word文档 可自由复制编辑
else
current <= S0; end if;
current <= S0;
when others => qcout <= '1';
end case;
end if; end process;
end behave;
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
3.2分频电路模块
分频电路模块元件设计如图3-2所示:
图3-2
分频模块VHDL语言设计如下: library ieee;
use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; use ieee.std_logic_arith.all;
entity clk1kHz is
generic(N: integer:=50000); port (
clk: in std_logic;
word文档 可自由复制编辑
);
clk1kHz: out std_logic
end clk1kHz;
architecture behave of clk1kHz is
signal cnt: integer range 0 to N/2-1;
signal temp: std_logic; Begin
process(clk) begin
if(clk'event and clk='1') then if(cnt=N/2-1) then cnt <= 0; temp <= NOT temp; else
cnt <= cnt+1; end if; end if; end process; clk1KHz <= temp; end behave;
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
library ieee;
use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; use ieee.std_logic_arith.all;
entity clk1Hz is
word文档 可自由复制编辑
generic(N: integer:=50000000); port ( );
clk: in std_logic; clk1Hz: out std_logic
end clk1Hz;
architecture behave of clk1Hz is signal cnt: integer range 0 to N/2-1; signal temp: std_logic; Begin
process(clk) begin
if(clk'event and clk='1') then if(cnt=N/2-1) then cnt <= 0; temp <= NOT temp; else
cnt <= cnt+1; end if; end if; end process; clk1Hz <= temp; end behave;
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
library ieee;
use ieee.std_logic_1164.all;
word文档 可自由复制编辑
use ieee.std_logic_unsigned.all; use ieee.std_logic_arith.all;
entity clk10Hz is
generic(N: integer:=20000000); port ( );
clk: in std_logic; clk10Hz: out std_logic
end clk10Hz;
architecture behave of clk10Hz is
signal cnt: integer range 0 to N/2-1;
signal temp: std_logic; Begin
process(clk) begin
if(clk'event and clk='1') then if(cnt=N/2-1) then cnt <= 0; temp <= NOT temp; else
cnt <= cnt+1; end if; end if; end process; clk10Hz <= temp; end behave;
/////////////////////////////////////////////////////////////////////
word文档 可自由复制编辑
/////////////////////////////////////////////////////////////////////////
3.3选择器模块
选择器模块元件设计如图3-3所示:
图3-3
选择器模块VHDL与颜色合计如下所示: library ieee;
use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all;
entity xzq is port ( ); end xzq;
architecture behave of xzqis begin
with sel select
dcout <=date0 when '0', sel: in std_logic; date0,date1:in std_logic; dcout:out std_logic
word文档 可自由复制编辑
date1 when others;
end behave;
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
3.4计数模块
计数模块元件设计如图3-4所示:
图3-4
计数器模块VHDL语言设计如下: library ieee;
use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all;
entity count60s is port ( );
clk:in std_logic; clk10:in std_logic; set: in std_logic:='1'; change: out std_logic;
qcout: buffer integer range 0 to 59:=0
word文档 可自由复制编辑
end count60s;
architecture behave of count60s is
signal temp:integer range 0 to 59; signal temp1:std_logic;
begin
process(clk,set,clk10) begin
if(set='0') then
temp <= 0;
elsif(clk'event and clk='1') then
if(qcout=59) then
temp <= 0; temp1 <= '1';
else
temp <= temp+1; temp1 <= '0';
end if;
end if;
qcout <= temp; change <= temp1; end process; end behave;
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
library ieee;
use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all;
word文档 可自由复制编辑
entity count60m is port ( );
end count60m;
architecture behave of count60m is
signal temp:integer range 0 to 59; signal temp1:std_logic; clk:in std_logic; change: out std_logic;
qcout: buffer integer range 0 to 59:=0; set:in std_logic:='1'
begin process(clk) begin
if(clk'event and clk='1') then
if(qcout=59) then
temp <= 0; temp1 <= '1';
else
temp <= temp+1; temp1 <= '0';
end if;
end if;
qcout <= temp; if(set = '1') then
change <= car;
end if;
word文档 可自由复制编辑
end process; end behave;
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
library ieee;
use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all;
entity count24h is port ( );
end count24h;
architecture behave of count24h is
signal temp:integer range 0 to 23; clk:in std_logic;
qcout: buffer integer range 0 to 23:=0
begin process(clk) begin
if(clk'event and clk='1')then
if(qcout=23) then
temp <= 0;
else
temp <= temp+1;
end if;
end if;
word文档 可自由复制编辑
qcout <= temp; end process; end behave;
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
3.5分位电路模块
分位电路模块元件设计如图3-5所示
图3-5
分位电路模块VHDL语言设计如下: library ieee;
use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; use ieee.std_logic_arith.all;
entity decircuit is port ( );
end decircuit;
architecture behave of decircuit is
word文档 可自由复制编辑
cnt: in integer range 0 to 59; ge: out integer range 0 to 9; shi: out integer range 0 to 9
begin
--fenwei circuit
process(cnt)
variable shi_temp:integer;
begin
ge <= cnt mod 10; shi <= cnt / 10;
end process;
end behave;
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
library ieee;
use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; use ieee.std_logic_arith.all;
entity decircuit is port ( );
end decircuit;
architecture behave of decircuit is begin
cnt: in integer range 0 to 59; ge: out integer range 0 to 9; shi: out integer range 0 to 9
word文档 可自由复制编辑
process(cnt)
variable shi_temp:integer;
begin
ge <= cnt mod 10; shi <= cnt / 10;
end process;
end behave;
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
library ieee;
use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; use ieee.std_logic_arith.all;
entity decircuit2 is port ( );
end decircuit2;
architecture behave of decircuit2 is begin
--fenwei circuit
cnt: in integer range 0 to 23; ge: out integer range 0 to 9; shi: out integer range 0 to 9
process(cnt)
variable shi_temp:integer;
word文档 可自由复制编辑
begin
ge <= cnt mod 10; shi <= cnt / 10;
end process;
end behave;
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
3.6数码管动态显示扫描模块 图3-6元件设计如图3-6所示:
图3-6
数码管动态显示扫描模块VHDL语言设计如下: library ieee;
use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; use ieee.std_logic_arith.all;
entity dyn_display_count is port ( );
end dyn_display_count;
word文档 可自由复制编辑
clk1kHz: in std_logic; qout: out integer range 0 to 7
architecture behave of dyn_display_count is
signal temp:integer range 0 to 7 :=0;
Begin
process(clk1kHz) begin
if(clk1kHz'event and clk1kHz = '1') then
if(temp=7) then
temp <= 0;
else
temp <= temp + 1;
end if;
end if; qout <= temp;
end process;
end behave;
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
3.7数码管动态显示模块
数码管动态显示模块元件设计如图3-7所示:
图3-7
word文档 可自由复制编辑
数码管动态显示模块VHDL语言设计如下: library ieee;
use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; use ieee.std_logic_arith.all;
entity display is port ( );
end display;
architecture behave of display is
signal data: integer range 0 to 10; qcnt: in integer range 0 to 7;
secshi,secge,minshi,minge,hshi,hge:in integer range 0 to 9; seg: out std_logic_vector(6 downto 0); scan: out std_logic_vector(7 downto 0)
begin
process(qcnt,secshi,secge,minshi,minge,hshi,hge) begin
case qcnt is
when 0 => scan <= \"11111110\";data <= secge; when 1 => scan <= \"11111101\";data <= secshi; when 2 => scan <= \"11111011\";data <= 10; when 3 => scan <= \"11110111\";data <= minge; when 4 => scan <= \"11101111\";data <= minshi; when 5 => scan <= \"11011111\";data <= 10; when 6 => scan <= \"10111111\";data <= hge;
word文档 可自由复制编辑
when 7 => scan <= \"01111111\";data <= hshi; when others => scan <= \"11111111\";data <=0;
end case;
end process;
process(data)
begin
case data is
when 0 => seg <= \"0111111\"; when 1 => seg <= \"0000110\"; when 2 => seg <= \"1011011\"; when 3 => seg <= \"1001111\"; when 4 => seg <= \"1100110\"; when 5 => seg <= \"1101101\"; when 6 => seg <= \"1111101\"; when 7 => seg <= \"0000111\"; when 8 => seg <= \"1111111\"; when 9 => seg <= \"1100111\"; when 10 => seg <= \"1000000\"; when others => seg <= \"0111111\"; end case;
end process; end behave;
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
word文档 可自由复制编辑
第四章仿真与实现
硬件仿真结果如图4-1所示
图4-1
word文档 可自由复制编辑
因篇幅问题不能全部显示,请点此查看更多更全内容