基于VHDL的数字闹钟设计 - 图文 联系客服

发布时间 : 星期六 文章基于VHDL的数字闹钟设计 - 图文更新完毕开始阅读878bc054ad02de80d4d840c0

第三章 数字闹钟整体方案设计

第三章 数字闹钟整体方案设计

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