VHDL多功能数字钟Word文档格式.docx
- 文档编号:22672983
- 上传时间:2023-02-05
- 格式:DOCX
- 页数:28
- 大小:199.95KB
VHDL多功能数字钟Word文档格式.docx
《VHDL多功能数字钟Word文档格式.docx》由会员分享,可在线阅读,更多相关《VHDL多功能数字钟Word文档格式.docx(28页珍藏版)》请在冰豆网上搜索。
正常工作状态下,每日按24h计时制计时并显示,蜂鸣器无声,逢整点报时。
(二)校时:
在计时显示状态下,按下“enset”键,接着按下“k”键,进入“小时”待校准状态,若此时按下“set”键,小时开始校准;
之后按上“k”键则进入“分”待校准状态;
继续按下“k”键则进入“秒”待复零状态;
再次按上“k”键数码管显示闹钟时间,并进入闹钟“小时”待校准状态;
再次按下“k”键则进入闹钟“分”待校准状态;
若再按上“k”键恢复到正常计时显示状态。
若校时过程中按下“reset”键,则系统恢复到正常计数状态。
(1)“小时”校准状态:
在“小时”校准状态下,显示“小时”的数码管以2Hz闪烁,并以2Hz的频率递增计数。
(2)“分”校准状态:
在“分”校准状态下,显示“分”的数码管以2Hz闪烁,并以2Hz的频率递增计数。
(3)“秒”校准状态:
在“秒复零”状态下,显示“秒”的数码管以2Hz闪烁,并以1Hz的频率递增计数。
(4)闹钟“小时”校准状态:
在闹钟“小时”校准状态下,显示“小时”的数码管以2Hz闪烁,并以2Hz的频率递增计数。
(5)闹钟“分”校准状态:
在闹钟“分”校准状态下,显示“分”的数码管以2Hz闪烁,并以2Hz的频率递增计数。
(三)整点报时:
蜂鸣器在“59”分钟的第“51”、“53”、“55”、“57”秒发频率为500Hz的低音,在“59”分钟的第“59”秒发频率为1000Hz的高音,结束时为整点。
(四)显示:
要求采用扫描显示方式驱动6个LED数码管显示小时、分、秒。
(五)闹钟:
闹钟定时时间到,蜂鸣器发出频率为1000Hz的高音,持续时间为60秒。
五、各个模块分析说明
1、分频器模块
(1)模块说明:
输入一个频率为50MHz的CLK,利用计数器分出
1KHz的q1KHz,500Hz的q500Hz,2Hz的q2Hz和1Hz的q1Hz。
(2)源程序:
LIBRARYieee;
USEieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
ENTITYfdivIS
PORT(CLK:
INSTD_LOGIC;
--输入时钟信号
q1KHz:
BUFFERSTD_LOGIC;
q500Hz:
q2Hz:
q1Hz:
OUTSTD_LOGIC);
ENDfdiv;
ARCHITECTUREbhvOFfdivIS
BEGIN
P1KHZ:
PROCESS(CLK)
VARIABLEcout:
INTEGER:
=0;
IFCLK'
EVENTANDCLK='
1'
THEN
cout:
=cout+1;
--每来个时钟上升沿时cout开始计数
IFcout<
=25000THENq1KHz<
='
0'
;
--当cout<
=25000时,q1KHz输出“0”
ELSIFcout<
50000THENq1KHz<
--当25000<
cout<
=50000时,q1KHz
ELSEcout:
--输出“1”,完成1KHz频率输出
ENDIF;
ENDPROCESS;
P500HZ:
PROCESS(q1KHz)--q1KHz作为输入信号,分出q500Hz
BEGIN
IFq1KHz'
EVENTANDq1KHz='
THEN
IFcout=1THENq500Hz<
--二分频
ELSIFcout=2THENcout:
q500Hz<
P2HZ:
PROCESS(q500Hz)
IFq500Hz'
EVENTANDq500Hz='
=125THENq2Hz<
250THENq2Hz<
P1HZ:
PROCESS(q2Hz)
IFq2Hz'
EVENTANDq2Hz='
IFcout=1THENq1Hz<
q1Hz<
ENDbhv;
(3)模块图:
2、控制器模块
输入端口enset,k,set键来控制6个状态,这六个状态分别是
显示计时时间状态,调计时的时、分、秒状态,调闹铃的时、分的状态,reset键是复位键,用来回到显示计时时间的状态。
libraryieee;
useieee.std_logic_1164.all;
entitycontlis
port(clk,enset,k,set,reset:
instd_logic;
cth,ctm,cts,cbh,cbm,flashh,flashm,flashs,sel_show:
outstd_logic);
endcontl;
architecturertlofcontlis
typestatsis(s0,s1,s2,s3,s4,s5);
--定义6个状态
signalcurrent_state,next_state:
stats:
=s0;
begin
process(clk,reset)
begin
ifreset='
then
current_state<
elsifclk'
eventandclk='
=next_state;
endif;
endprocess;
process(current_state,enset,k,set)
casecurrent_stateis
whens0=>
cth<
ctm<
cts<
cbh<
cbm<
flashh<
flashm<
flashs<
sel_show<
if(enset='
andk='
)then--若enset和k为“1”,
next_state<
=s1;
--由s0态转到s1态
elsenext_state<
whens1=>
ifset='
thencth<
--若set为“1”,cth输出“1”
elsecth<
--进入调小时状态。
)then--若enest为“1”,k为“0”,
=s2;
--由s1态转到s2态
whens2=>
thenctm<
elsectm<
if(enset='
)then
=s3;
whens3=>
thencts<
elsects<
=s4;
whens4=>
thencbh<
elsecbh<
=s5;
whens5=>
thencbm<
elsecbm<
endcase;
endrtl;
(3)仿真波形图:
(4)模块图:
3、二选一模块
(1)源程序:
ENTITYmux21aIS
PORT(a,b,s:
INBIT;
y:
OUTBIT);
ENDENTITYmux21a;
ARCHITECTUREoneOFmux21aIS
PROCESS(a,b,s)
IFs='
y<
=a;
ELSE--若s=0,y输出a,反之输出b。
=b;
ENDARCHITECTUREone;
(2)仿真波形图:
4、计时模块
a、秒计时
(1)源程序:
useieee.std_logic_arith;
entitycnts60is
port(sld0:
bufferstd_logic_vector(3downto0);
--小时个位
sld1:
bufferstd_logic_vector(7downto4);
--小时十位
co:
outstd_logic;
rest:
clk:
instd_logic);
endcnts60;
architecturertlofcnts60is
process(clk,rest)
ifrest='
thensld1<
="
0000"
sld0<
elsif(clk'
)then
if(sld1="
0101"
andsld0="
1001"
)then--当sld1=5,sld0=9时
sld1<
co<
--全清零,co输出“1”
elsifsld0="
=sld1+1;
--sld1自加“1”
elsesld0<
=sld0+1;
(3)模块图:
b、分计时
entitycnt60is
endcnt60;
architecturertlofcnt60is
process(clk)
if(clk'
c、小时计时
entitycnt24is
endcnt24;
architecturertlofcnt24is
signals:
std_logic_vector(7downto0);
s<
=sld1&
sld0;
ifs="
00100011"
then
(2)仿真波形图:
d、闹钟分计时
entitycntm60bis
en:
endcntm60b;
architecturertlofcntm60bis
ifen='
e、闹钟小时计时
entitycnth24bis
endcnth24b;
architecturertlofcnth24bis
process(clk,en,sld1,sld0)
5、闹钟比较模块
比较正常计数时间与闹钟定时时间是否相等,若相等,compout输出“1”,反之输出“0”。
entitycompis
port(th1,tm1:
instd_logic_vector(7downto4);
th0,tm0:
instd_logic_vector(3downto0);
bh1,bm1:
bh0,bm0:
compout:
endcomp;
architecturertlofcompis
process(th1,tm1,bh1,bm1,th0,tm0,bh0,bm0)
if(th1=bh1andtm1=bm1andth0=bh0andtm0=bm0)then
compout<
--当正常计数时间与闹钟定时时间相等时compout输出1
elsecompout<
(3)仿真波形图:
6、报时模块
该模块既实现了整点报时的功能,又实现了闹铃的功能,蜂鸣器通过所选频率的不同,而发出不同的声音。
entitybelis
port(tm1,ts1:
tm0,ts0:
compout,q1KHz,q500Hz,openbel:
bell:
endbel;
architecturertlofbelis
signalt:
process(compout,q500Hz,q1KHz,openbel,tm1,tm0,ts1,ts0)
if(openbel='
)then
bell<
if(compout='
)then--compout=1,闹铃响
=q1KHz;
--bell输出1KHz
elsif(tm1="
andtm0="
andts1="
casets0is
when"
0001"
=>
bell<
=q500Hz;
0011"
0111"
--bell输出500Hz
whenothers=>
elsebell<
(4)模块图:
7、控制显示模块
该模块实现了数码管既可以显示正常时间,又可以显示闹钟时间的功能;
调时,定时闪烁功能也在此模块中
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- VHDL 多功能 数字