电子钟Word下载.docx
《电子钟Word下载.docx》由会员分享,可在线阅读,更多相关《电子钟Word下载.docx(12页珍藏版)》请在冰点文库上搜索。
0%
3.数码管的扫描显示:
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
-字模输出模块
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYSELIS
PORT(CLK:
INSTD_LOGIC;
Q:
OUTSTD_LOGIC_VECTOR(2DOWNTO0));
--输入选通信号
ENDSEL;
ARCHITECTURESELAOFSELIS
BEGIN
PROCESS(CLK)
VARIABLECNT:
STD_LOGIC_VECTOR(2DOWNTO0);
BEGIN
IFCLK'
EVENTANDCLK='
1'
THEN
CNT:
=CNT+1;
ENDIF;
Q<
=CNT;
ENDPROCESS;
ENDSELA;
G:
整点报时功能:
libraryieee;
--整点报时模块
useieee.std_logic_1164.all;
entitysstis
port(h1,h0,m1,m0,s1,s0:
instd_logic_vector(3downto0);
q1,q0:
instd_logic;
-输入分,秒信号和时钟信号
q:
outstd_logic);
--输出两个不同频率的音频信号
endsst;
architecturesss_arcofsstis
signalq3,q4:
std_logic;
begin
process(m1,m0,s1,s0)
ifh1="
0000"
andh0<
"
0111"
then
q3<
='
0'
;
q4<
elsifm1="
0101"
andm0="
1001"
ands1="
then
ifs0="
ors0="
0010"
0100"
ors0="
0110"
1000"
;
else--当计时到达59'
50"
52"
54"
56"
58"
鸣叫,鸣叫频率为500HZ,
endif;
andm0="
ands0="
当整点时为最后一声整点报时,频率为1kHZ,
else
endprocess;
q<
=(q3andq0)or(q4andq1);
endsss_arc;
G:
闹钟功能模块:
ENTITYNALIS
PORT(M1,M0,H1,H0:
INSTD_LOGIC_VECTOR(3DOWNTO0);
en:
inSTD_LOGIC;
OUTSTD_LOGIC);
ENDNAL;
ARCHITECTURENAOOFNALIS
BEGIN
PROCESS(M1,M0,H1,H0,EN)
IFEN='
IFH0="
ANDH1="
ANDM1="
ANDM0="
THEN
ELSE
ENDIF;
ELSEQ<
ENDPROCESS;
ENDNAO;
好:
0
一般:
不好:
原创:
非原创:
其他答案
其基本要求如下:
1.实现基本的计时功能,输入1kHz的时钟,采用24小时制计时,能显示时、分、秒。
2.校正功能;
时分均有校时功能。
3.当计时器运行到59分49秒开始报时,每鸣叫1s就停叫1s,共鸣叫6,前5响为低音,频率为750Hz;
最后1响为高音,频率为1KHz。
4.可设定夜间某个时段不报时。
5.设定闹钟,当按下闹铃开关时,可在规定时间闹铃,当开关复位时,闹铃停止。
方案一
根据方案的要求,可以用VHDL语言,采用自顶向下的设计方法。
可用分频的方法得到1HZ的时钟用与计数;
用7段数码管来显示时间,需要6个数码管;
同时可以根据不同的频率的输入来调节蜂鸣器的鸣叫声音,从而实现整点报时功能和闹铃功能。
对于闹铃功能,可以用一个触发器和一个寄存器来实现。
根据要求基本确定由以下模块组成:
1.秒计数模块:
秒计数,在频率为1HZ的时钟下以60次为循环计数,并产生进位信号影响分计数;
2.分计数模块:
分计数,在秒进位信号为高电平时,计数一次,同样以60次为一个循环计数,同时产生分进位信号影响时计数;
3.时计数模块:
时计数,在分进位信号为高电平时,计数一次,以24次为一个循环计数;
4.频率产生模块:
主要有2个部分,一个是产生1HZ的计数频率,一个是产生725HZ和500HZ的蜂鸣器鸣叫频率;
5.时间显示模块:
通过选中不同的数码管,同时进行一定频率的扫描显示时,分,秒。
6.时间设置模块:
设置调试使能端,可以调时,分。
基本功能是在使能端为高电平时,可以使时和分循环计数;
7.整点报时模块:
在秒计数到50秒时,同时分计数到59分开始,丰鸣器产生每个2秒的鸣叫(500HZ),到整点是产生750HZ的鸣叫。
8.闹钟模块:
在设定闹钟闹铃时间后,当闹钟使能端有效时,可在闹铃时间闹铃,通过人工拨0后停闹。
秒计数模块
VHDL源程序:
ENTITYMIANIS---------------秒计数模块-------------
PORT(RD,CLK:
------------秒复位信号-----
SEC1,SEC0:
OUTSTD_LOGIC_VECTOR(3DOWNTO0);
CO:
ENDMIAN;
ARCHITECTUREMIANAOFMIANIS
PROCESS(CLK,RD)--秒计数进程
VARIABLECNT1,CNT0:
STD_LOGIC_VECTOR(3DOWNTO0);
输出信号
IFRD='
THEN----复位信号为1时,秒计数清零---
CNT1:
="
CNT0:
ELSIFCLK'
THEN-输入时钟信号和清零信号
IFCNT1="
ANDCNT0="
THEN–当秒计数为58时进位信号为1
CO<
-秒低位小于9时,加1
ELSIFCNT0<
THEN
=CNT0+1;
IFCNT1<
THEN-秒高位小于5时,加1
=CNT1+1;
SEC1<
=CNT1;
SEC0<
=CNT0;
ENDMIANA;
22
B:
分计数模块
VHDL源程序:
--分计数模块
ENTITYMINAIS
PORT(EN,CLK:
-输入时钟信号和进位信号
MIN1,MIN0:
--输出分计数和进位
ENDMINA;
ARCHITECTUREMINOFMINAIS
PROCESS(CLK)--分计数进程
THEN时钟上升沿,en为1时分开始计数
IFEN='
IFCNT1="
THEN-当分计数到58时产生进位信号
THEN--分低位小于9时,cnt0加1
MIN1<
MIN0<
ENDMIN;
:
时计数模块
--时计数模块
ENTITYHOURIS
-输入时钟信号和分模块进位信号
H1,H0:
OUTSTD_LOGIC_VECTOR(3DOWNTO0));
-输出h0,h1
ENDHOUR;
ARCHITECTUREHOURAOFHOURIS
PROCESS(CLK)--小时计数进程
IFCLK'
THEN--时钟上升沿,en为1时小时开始计数
IFCNT0="
0011"
ANDCNT1="
H1<
H0<
ENDHOURA;
23
D:
频率产生模块:
1.500HZ和1KHZ的频率产生:
--小时计数模块
ENTITYCCCIS
q1k,Q500:
ENDCCC;
ARCHITECTURECCCAOFCCCIS
SIGNALX:
STD_LOGIC;
X<
=NOTX;
q1k<
=X;
PROESS(X)
VARIABLEY:
IFX'
EVENTANDX='
Y:
=NOTY;
Q500<
=Y;
ENDCCC;
2.1HZ的频率产生:
LIBRARYIEEE;
ENTITYFEN10IS
ENDFEN10;
ARCHITECTUREFENAOFFEN10IS
INTEGERRANGE0TO999;
IFCNT<
999THEN
=0;
ENDFENA;
E:
时间显示模块:
1.数码管选中:
USEIEEE.STD_LOGIC_1164.ALL;
ENTITYBBBIS----用于选中对应的数码管----
PORT(SEC1,SEC0,MIN1,MIN0,H1,H0:
SEL:
INSTD_LOGIC_VECTOR(2DOWNTO0);
ENDBBB;
ARCHITECTUREBBBAOFBBBIS
PROCESS(SEL)
CASESELIS----由低位到高位依次显示秒,分,时-------
WHEN"
000"
=>
Q<
=SEC0;
-当000时输出秒低位
001"
=SEC1;
-001时输出秒高位
011"
=MIN0;
-当011时输出分低位
100"
=MIN1;
-当100时输出分高位
110"
=H0;
--当110时输出时低位
111"
=H1;
当111时输出时高位
WHENOTHERS=>
1111"
ENDCASE;
2.译码显示:
libraryieee;
entitydispais
port(d:
q:
outstd_logic_vector(6downto0));
enddispa;
architecturedispa_arcofdispais
process(d)
casedis
when"
=>
q<
0111111"
0001"
0000110"
1011011"
1001111"
1100110"
1101101"
1111101"
0100111"
1111111"
1101111"
whenothers=>
0000000"
endcase;