时钟模块的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
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库14电气EDA实验指导书(1)(5)在线全文阅读。
相关推荐: