14电气EDA实验指导书(1)(5)

2019-06-17 17:44

时钟模块的10KHz,要得到1Hz时钟信号,必须对系统时钟进行10,000次分频。调整时间的的按键用按键模块的S1和S2,S1调节小时,每按下一次,小时增加一个小时,S2调整分钟,每按下一次,分钟增加一分钟。另外用S8按键作为系统时钟复位,复位后全部显示00-00-00。

四、实验步骤

1、打开QUARTUSII软件,新建一个工程。

2、建完工程之后,再新建一个VHDL File,打开VHDL编辑器对话框。 3、按照实验原理和自己的想法,在VHDL编辑窗口编写VHDL程序,用户可参照光盘中提供的示例程序。

library ieee;

use ieee.std_logic_1164.all; use ieee.std_logic_arith.all; use ieee.std_logic_unsigned.all;

------------------------------------------------------------------ entity exp20 is

port( Clk : in std_logic; --时钟输入 Rst : in std_logic; --复位输入

S1,S2 : in std_logic; --时间调节输入 SPK : out std_logic; --整点输报时输出

Display : out std_logic_vector(6 downto 0); --七段码管显示输出

SEG_SEL : buffer std_logic_vector(2 downto 0) --七段码管扫描驱动

); end exp20;

--------------------------------------------------------------------

architecture behave of exp20 is

signal Disp_Temp : integer range 0 to 15;

signal Disp_Decode : std_logic_vector(6 downto 0); signal SEC1,SEC10 : integer range 0 to 9; signal MIN1,MIN10 : integer range 0 to 9; signal HOUR1,HOUR10 : integer range 0 to 9;

20

signal Clk_SM : std_logic; signal Clk1Hz : std_logic; signal Clk2Hz : std_logic;

signal led_count : std_logic_vector(2 downto 0);

BEGIN

PROCESS(clk) --产生显示扫描时钟

variable cnttemp : INTEGER RANGE 0 TO 59999; BEGIN

IF clk='1' AND clk'event THEN

IF cnttemp=59999 THEN cnttemp:=0; ELSE

IF cnttemp<30000 THEN clk_SM<='1'; ELSE clk_SM<='0'; END IF;

cnttemp:=cnttemp+1; END IF; END IF; END PROCESS;

PROCESS(clk) --产生显示扫描时钟1HZ

variable cnt : INTEGER RANGE 0 TO 23999999; BEGIN

IF clk='1' AND clk'event THEN IF cnt=23999999 THEN cnt:=0; ELSE

IF cnt<12000000 THEN clk1hz<='1'; ELSE clk1hz<='0'; END IF;

cnt:=cnt+1; END IF; END IF; END PROCESS;

PROCESS(clk) --产生显示扫描时钟2HZ

variable cnt : INTEGER RANGE 0 TO 23999999; BEGIN

IF clk='1' AND clk'event THEN

21

IF cnt=11999999 THEN cnt:=0; ELSE

IF cnt<6000000 THEN clk2hz<='1'; ELSE clk2hz<='0'; END IF;

cnt:=cnt+1; END IF; END IF; END PROCESS;

process(Clk1Hz,Rst) begin

if(Rst='0') then --系统复位 SEC1<=0; SEC10<=0; MIN1<=0; MIN10<=0; HOUR1<=0; HOUR10<=0;

elsif(Clk1Hz'event and Clk1Hz='1') then -- if(S1='0') then --调节小时 if(HOUR1=9) then HOUR1<=0;

HOUR10<=HOUR10+1;

elsif(HOUR10=2 and HOUR1=3) then HOUR1<=0; HOUR10<=0; else

HOUR1<=HOUR1+1; end if;

elsif(S2='0') then --调节分钟 if(MIN1=9) then MIN1<=0;

if(MIN10=5) then MIN10<=0; else

MIN10<=MIN10+1; end if;

22

正常运行

else

MIN1<=MIN1+1; end if;

elsif(SEC1=9) then SEC1<=0;

if(SEC10=5) then SEC10<=0;

if(MIN1=9) then MIN1<=0;

if(MIN10=5) then MIN10<=0;

if(HOUR1=9) then HOUR1<=0;

HOUR10<=HOUR10+1;

elsif(HOUR10=2 and HOUR1=3) then HOUR1<=0; HOUR10<=0; 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(Clk) begin

if(Clk2hz'event and Clk2hz='1') then

23

if(MIN10=5 and MIN1=9 and SEC10=5 and sec1>3) then --在59分55秒开始提示

led_Count<=led_Count+1; else

led_count<=\ end if; end if;

SPK<=led_count(0); end process;

process(SEG_SEL) begin

case (SEG_SEL+1) is

when \ when \ when \ when \ when \ when \ when \ when \ end case; end process;

process(Clk) begin

if(Clk_SM'event and Clk_SM='1') then --扫描累加 SEG_SEL<=SEG_SEL+1; Display<=Disp_Decode; end if; end process;

process(Disp_Temp) --显示转换 begin

case Disp_Temp is

when 0=>Disp_Decode<=\ when 1=>Disp_Decode<=\

24


14电气EDA实验指导书(1)(5).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:山东省医政监督执法指导手册目录

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: