数字钟可编程Word下载.docx
《数字钟可编程Word下载.docx》由会员分享,可在线阅读,更多相关《数字钟可编程Word下载.docx(13页珍藏版)》请在冰点文库上搜索。
五、实验报告要求
课题完成后应认真撰写实验报告,其主要内容如下:
1.课题的任务及要求。
2.叙述所设计的数字钟的工作原理
3.课题分析与编程思路。
对课题认真分析,正确理解,明确设计思路。
4.仿真结果分析。
建立测试向量文件,然后编译该文件,进行功能仿真和时序仿真,给出仿真结果并进行分析。
5.实验设计中各功能模块的源程序。
6.总结。
总结课题存在的问题,提出改进的设想;
完成本课题后的收获、体会和建议。
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYtimerIS
PORT(clk,clk1:
INSTD_LOGIC;
clr,prnh,prnm:
q,y:
OUTSTD_LOGIC_VECTOR(7downto0);
spk:
OUTSTD_LOGIC);
ENDtimer;
ARCHITECTUREbehavOFtimerIS
COMPONENTcnt60IS
PORT(clk,keyclk,clr,prn:
INSTD_LOGIC;
qh,ql:
OUTSTD_LOGIC_VECTOR(3downto0);
qcarry:
OUTSTD_LOGIC);
ENDCOMPONENT;
COMPONENTcnt24IS
PORT(clk,clr:
OUTSTD_LOGIC_VECTOR(3downto0));
SIGNALshtem,sltem,mhtem,mltem,hhtem,hltem,da:
STD_LOGIC_VECTOR(3downto0);
SIGNALsctem,mctem:
STD_LOGIC;
SIGNALcou:
INTEGERRANGE0to10;
SIGNALdout,tempy:
STD_LOGIC_VECTOR(7DOWNTO0);
BEGIN
U1:
cnt60PORTMAP(CLK1,clk,clr,PRNM,
SHTEM,SLTEM,SCTEM);
--clk1is1hz,clkis1024hz
U2:
cnt60PORTMAP(SCTEM,clk,clr,PRNH,
mhtem,mltem,MCTEM);
U3:
cnt24PORTMAP(MCTEM,clr,HHTEM,HLTEM);
PROCESS(clk)
BEGIN
IF(clk'
EVENTANDclk='
1'
)THEN--clkis1024hz
IFcou<
8THEN
cou<
=cou+1;
ELSE
cou<
=0;
ENDIF;
CASEcouIS
WHEN0=>
da<
=HHTEM;
TEMPY<
="
10000000"
;
WHEN1=>
=HLTEM;
01000000"
WHEN2=>
1010"
00100000"
WHEN3=>
=mhtem;
00010000"
WHEN4=>
=mltem;
00001000"
WHEN5=>
00000100"
WHEN6=>
=SHTEM;
00000010"
WHEN7=>
=SLTEM;
00000001"
WHENOTHERS=>
0000"
00000000"
ENDCASE;
ENDIF;
CASEdaIS
WHEN"
=>
dout<
00111111"
0001"
00000110"
0010"
01011011"
0011"
01001111"
0100"
01100110"
0101"
01101101"
0110"
01111101"
0111"
00000111"
1000"
01111111"
1001"
01101111"
1011"
01111100"
1100"
00111001"
1101"
01011110"
1110"
01111001"
1111"
01110001"
ENDCASE;
IF(mhtem="
ANDmltem="
)THEN
spk<
=mCTEMANDclkANDCLK1;
ENDPROCESS;
Q<
=dout;
y<
=TEMPY;
ENDBEHAV;
ENTITYcnt60IS
ENDcnt60;
ARCHITECTUREbehavOFcnt60IS
SIGNALqtemh,qteml:
STD_LOGIC_VECTOR(3DOWNTO0);
SIGNALqc:
INTEGERRANGE0TO200;
PROCESS(keyclk)
BEGIN
IF(keyclk'
EVENTANDkeyclk='
PROCESS(clk,keyclk)
IF(cou=0)AND(PRN='
qc<
=keyclk;
ELSIFclr='
0'
THEN
qtemh<
=(OTHERS=>
'
);
qteml<
ELSIF(clk'
IF(qteml<
9)THEN
=qteml+1;
='
IF(qtemh<
5)THEN
=qtemh+1;
QH<
=qtemh;
QL<
=qteml;
qcARRY<
=qc;
ENDbehav;
ENTITYcnt24IS
ENDcnt24;
ARCHITECTUREbehaveOFcnt24IS
IFclr='
ELSIF(clk'
2)THEN
IFqteml<
9THEN
ELSIF(QTEMh=2)THEN
3THEN
ENDbehave;
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
useieee.std_logic_arith.all;
entitydzzis
port(clk,clk_scan,reset,setm,seth:
instd_logic;
dlh2:
std_logic_vector(3downto0);
time,sm:
outstd_logic_vector(7downto0);
--7段显示段码和位码
outstd_logic);
enddzz;
architectureSZofdzzis
signalcou:
integerrange0to8;
signalbs,nl:
std_logic;
signalh1,h2,m1,m2,s1,s2:
signalda:
begin
process(clk)
begin
if(clk'
eventandclk='
)then
--清零
ifreset='
then
h1<
h2<
m1<
m2<
s1<
s2<
--校分
elsifsetm='
then
m2<
=m2+1;
ifm2="
m1<
=m1+1;
ifm1="
endif;
--校时
elsifseth='
h2<
=h2+1;
ifh2="
=h1+1;
ifh1="
andh2<
--正常计数
ifs2="
s2<
elses2<
=s2+1;
if(s1="
ands2="
s1<
elsifs2="
then--秒低位为9,高位不为5;
=s1+1;
and(s1="
elsif(s1="
)then--分低不为9;
if(m1="
andm2="
)and
(s1="
--59分59秒
elsifm2="
--分高不为5,分低9,且59秒
ifh2="
and(m1="
(s1="
--9时59分秒59秒;
elsif(m1="
)and
(s1="
endif;
if(h1="
andh2="
(m1="
--23时59分秒59秒
elsifh2="
)
and(s1="
h1<
--整点报时
if(m1="
and(s1="
bs<
elsif(m1="
)
--报时20秒
--到点闹钟
ifh2=conv_integer(dlh2)and
nl<
elsifh2=conv_integer(dlh2)and
)then
--闹铃1分钟,
endprocess;
process(clk_scan)
begin
if(clk_scan'
EVENTandclk_scan='
)then
ifcou<
7then
else
casecouis
when0=>
=h1;
sm<
when1=>
=h2;
when2=>
when3=>
=m1;
when4=>
=m2;
when5=>
when6=>
=s1;
when7=>
=s2;
whenothers=>
endcase;
casedais
when"
time<
spk<
=(bsornl)andclkandclk_scan;
endSZ;