第三章 数字闹钟整体方案设计
第三章 数字闹钟整体方案设计
3.1 数字闹钟整体设计
1)各个输入输出端口
1、CLK为外部时钟信号,RESET为复位信号。
2、KEYPAD 若其中某一位为高电平,则表示用户按下了相应的数字键
3、当KEYDOWN为高电平,表示用户按下某一数字键。 4、当ALAR-BUTTON为高电平时,表示用户按下ALARM键。 5、当TIME-BUTTON为高电平时表示用户按下TIME键 6、DISPLAY实际上表示了4个7段数码管,用于显示时间。 7、SOUND-ALARM用于控制扬声器发声,当SOUND-ALARM=’1’时,扬声器发出蜂鸣,表示到了设定时间。
2)各部分的组成
根据系统的设计要求,整个系统分为7个模块:闹钟控制器,译码器,键盘缓冲器,闹钟寄存器,时间计数器,显示驱动器,分频器。
3.1.1数字闹钟各部分作用
1、 闹钟控制器:整个系统正常有序工作的核心,按设计要求产生相应的控制逻辑以控制其他部分工作。
2、 译码器:可将KEYPAD信号转换为0~9的整形数,以直观地表示和处理用户输入的数字。
3、 键盘缓冲器:是一个移位寄存器,暂存用户键入的数字,并且实现用户键入数字在显示器上从左到右依次显示。
4、 分频器:将较高的外部时钟频率分成每分钟一次的时钟频率,以便进行时钟计数。
5、 时间计数器:实际上是一个异步复位、异步置数的累加器,通常情况下进行时钟累加计数,必要时可置入新的时钟值,然后从该值开始新的计数。
6、 闹钟寄存器:用于保存用户设置的闹钟时间,是一个异步复位寄存器。 7、 显示驱动器:根据需要显示当前时间、用户设置的闹钟时间或用户通过键盘输入新的时间,同时判断当前时间是否已到了闹钟时间,实际上是一个多路选择器加比较器。
3.2 数字钟的工作原理
数字闹钟电路的基本结构由两个60进制计数器和一个24进制计数器组成,分别对秒、分、小时进行计时,当计时到23时59分59秒时,再来一个计数脉
5
选题背景
冲,则计数器清零,重新开始计时。秒计数器的计数时钟CLK为1Hz的标准信号。当数字闹钟处于计时状态时,秒计数器的进位输出信号作为分钟计数器的计数信号,分钟计数器的进位输出信号又作为小时计数器的计数信号时、分、秒的计时结果通过4个数码管来动态显示。数字闹钟除了能够正常计时外,还应能够对时间进行调整。因此,通过模式选择信号KEY1、KEY2控制数字钟的工作状态,即控制数字钟,使其分别工作于正常计时,调整分、时和设定闹钟分、时5个状态。当数字闹钟处于计时状态时,3个计数器允许计数,且秒、分、时计数器的计数时钟信号分别为CLK,秒的进位, 分的进位;当数字闹钟处于调整时间状态时,被调的分或时会一秒一秒地增加;当数字钟处于闹钟定时状态时,可以设定小时和分;当计时到所设定的时刻时,speak将会被赋予梁祝音乐信号用于驱动扬声器,持续1分钟。
6
第四章 模块电路设计
第四章 模块电路设计
4.1模块电路图设计
图4.1-1 模块电路图
4.2各模块电路设计
1) 时钟控制模块: library ieee;
use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity shizhong is
port( clk: in std_logic; md1:in std_logic;
md2:in std_logic_vector(1 downto 0); clken:out std_logic;
h1,h2,m1,m2,s1,s2:out std_logic_vector(3 downto 0)); end shizhong;
architecture one of shizhong is
signal hou1:std_logic_vector(3 downto 0); signal hou2:std_logic_vector(3 downto 0); signal min1:std_logic_vector(3 downto 0); signal min2:std_logic_vector(3 downto 0); signal seth1:std_logic_vector(3 downto 0); signal seth2:std_logic_vector(3 downto 0); signal setm1:std_logic_vector(3 downto 0); signal setm2:std_logic_vector(3 downto 0); signal sec1:std_logic_vector(3 downto 0); signal sec2:std_logic_vector(3 downto 0);
7
选题背景
begin
-----------------------------------------------小时十位
h110:process(clk,hou2,min1,min2,sec1,sec2,md1,md2) begin
if clk'event and clk='1' then
if (hou1=\ and (sec1=\ then hou1<=\
elsif hou1=\
and md2=\当时间为23点且处于校时状态时 hou1<=\
elsif (hou2=\
and (sec1=\ then
hou1<=hou1+1; end if; end if;
end process h110;
-----------------------------------------------小时个位
h220:process(clk,min1,min2,sec1,sec2,md1,md2,hou1) begin
if clk'event and clk='1' then
if (hou1=\ and (sec1=\hou2<=\
elsif hou2=\ and (sec1=\ then hou2<=\
elsif (hou2=\or (hou1=\hou2<=\
elsif ((min1=\or (md1='0' and md2=\hou2<=hou2+1;--speak<=clk;-- end if; end if;
end process h220;
-----------------------------------------------分钟十位 m110:process(clk,min2,sec1,sec2,md1,md2) begin
if clk'event and clk='1' then
if (min1=\ min1<=\
elsif min1=\min1<=\
elsif (min2=\ or (min2=\min1<=min1+1; end if;
end if;--end if;
8
相关推荐: