《多功能数字钟》EDA实验报告 下载本文

b.图为基本功能结构图

c.七段数码管是电子开发过程中常用的输出显示设备。在实验系统中使用的是两个四位一体、共阴极型七段数码管。其单个静态数码管如下图所示。

静态七段数码管

由于七段数码管公共端连接到GND(共阴极型),当数码管的中的那一个段被输入高电平,则相应的这一段被点亮。反之则不亮。四位一体的七段数码管在单个静态数码管的基础上加入了用于选择哪一位数码管的位选信号端口。八个数码管的a、b、c、d、e、f、g、h、dp都连在了一起,8个数码管分别由各自的位选信号来控制,被选通的数码管显示数据,其余关闭。

3.3设计的基本要求及基本参数

系统时钟选择时钟模块的10KHz,要得到1Hz时钟信号,必须对系统时钟进行10,000次分频。从而的到需要的1s的信号。本实验中,所用到的秒,分,时的计时都是采用4位二进制的计数器进行设计计时的。通过设置不同的范围实现对7段数码管的显示设定。

4具体功能分块实现及介绍

4.1分频功能模块(这里将所有用到的端口名在此同时给出)

实现该功能是通过对系统的自身的1kHZ的信号的采用10000次的分频从而获得1s的所需要的信号。

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_ARITH.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY LG IS

PORT( Clk : IN STD_LOGIC; --时钟输入 S12 : IN STD_LOGIC; --复位输入 S1,S2 : IN STD_LOGIC; --时间调节输入 spk : OUT STD_LOGIC;

led : OUT STD_LOGIC_VECTOR(3 DOWNTO 0); --整点输报时输出 Display : OUT STD_LOGIC_VECTOR(7 DOWNTO 0); --七段码管显示输出 SEG_SEL : BUFFER STD_LOGIC_VECTOR(2 DOWNTO 0) --七段码管扫描动 ); END LG;

ARCHITECTURE ART OF LG IS

SIGNAL Disp_Temp : STD_LOGIC_VECTOR(3 DOWNTO 0); SIGNAL Disp_Decode : STD_LOGIC_VECTOR(7 DOWNTO 0); SIGNAL SEC1,MIN1, : STD_LOGIC_VECTOR(3 DOWNTO 0); SIGNAL SEC10,MIN10 : STD_LOGIC_VECTOR(3 DOWNTO 0); SIGNAL HOUR10 HOUR1 : STD_LOGIC_VECTOR(3 DOWNTO 0); SIGNAL Music_Count : STD_LOGIC_VECTOR(2 DOWNTO 0);

SIGNAL Clk_Count1 : STD_LOGIC_VECTOR(13 DOWNTO 0); --产生1Hz时钟的分频计数器

SIGNAL Clk1Hz : STD_LOGIC;

SIGNAL led_count : STD_LOGIC_VECTOR(2 DOWNTO 0); SIGNAL led_display : STD_LOGIC_VECTOR(3 DOWNTO 0); SIGNAL T : INTEGER RANGE 0 TO 15; BEGIN PROCESS(Clk) BEGIN

IF(Clk'EVENT AND Clk='1') THEN IF(Clk_Count1<10000) THEN Clk_Count1<=Clk_Count1+1; ELSE

Clk_Count1<=\ END IF; END IF; END PROCESS; 4.2整点报时功能

Clk1Hz<=Clk_Count1(13); PROCESS(Clk1Hz,S12) BEGIN

IF(S12='0') THEN --系统复位 SEC1<=\ SEC10<=\ MIN1<=\ MIN10<=\ HOUR1<=\ HOUR10<=\

ELSIF(Clk1Hz'EVENT AND Clk1Hz='1') THEN --正常运行 IF(S1='0') THEN --调节小时 IF(HOUR1=\ HOUR1<=\ HOUR10<=HOUR10+1;

ELSIF(HOUR10=\ HOUR1<=\ HOUR10<=\ ELSE

HOUR1<=HOUR1+1; END IF;

ELSIF(S2='0') THEN --调节分钟

IF(MIN1=\ MIN1<=\

IF(MIN10=\ MIN10<=\ ELSE

MIN10<=MIN10+1; END IF; ELSE

MIN1<=MIN1+1; END IF;

ELSIF(SEC1=\ SEC1<=\

IF(SEC10=\ SEC10<=\

IF(MIN1=\ MIN1<=\

IF(MIN10=\ MIN10<=\

IF(HOUR1=\ HOUR1<=\ HOUR10<=HOUR10+1;

ELSIF(HOUR10=\ HOUR1<=\ HOUR10<=\ ELSE

HOUR1<=HOUR1+1; END IF; ELSE

MIN10<=MIN10+1; END IF; ELSE

MIN1<=MIN1+1; END IF; ELSE

SEC10<=SEC10+1; END IF; ELSE

SEC1<=SEC1+1; END IF; END IF; END PROCESS;

---------------------------------------------------------------------- PROCESS(SEC1,T) BEGIN