EDA数字钟设计实训报告Word格式文档下载.docx
《EDA数字钟设计实训报告Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《EDA数字钟设计实训报告Word格式文档下载.docx(12页珍藏版)》请在冰豆网上搜索。
![EDA数字钟设计实训报告Word格式文档下载.docx](https://file1.bdocx.com/fileroot1/2022-10/13/856c16aa-9886-4b72-8546-c217369088e8/856c16aa-9886-4b72-8546-c217369088e81.gif)
实训中由于七段码管是扫描的方式显示,所以虽然时钟需要的是1Hz时钟信号,但是扫描确需要一个比较高频率的信号,因此为了得到准确的1Hz信号,必须对输入的系统时钟进行分频。
对于整点报时功能,用户可以根据系统的硬件结构和自身的具体要求来设计。
本实训设计的是当进行整点的倒计时5秒时,让LED来闪烁进行整点报时的提示。
三、实训内容
本实验的任务就是设计一个多功能数字钟,要求显示格式为小时-分钟-秒钟,整点报时,报时时间为10秒,即从整点前10秒钟开始进行报时提示,喇叭开始发声,直到过整点时,在整点前5秒LED开始闪烁,过整点后,停止闪烁。
调整时间的的按键用按键模块的S1和S2,S1调节小时,每按下一次,小时增加一个小时,S2调整分钟,每按下一次,分钟增加一分钟。
四、实训步骤
①认真听取老师介绍开发板硬件结构,仔细阅读EDA实训指导书,了解数字钟设计程序的大致过程。
②根据之前写过的“精确24秒倒计时”程序,将其中的各个模块程序进行修改。
③修改分频模块,将50MHZ分频为1HZ,即周期为1s。
④修改显示模块,使秒钟和分钟从00至59循环显示,秒钟每次从59跳到00,则分钟增加一分钟,使时钟从00至23循环显示,分钟每次从59跳到00,则时钟增加一小时,
⑤在结构体处添加信号声明,使时钟、分钟和秒钟之间的“——”显示出来,即00-00-00。
⑥添加按键模块,使S1,S2,分别控制时钟的加减,使S3,S4分别控制分钟的加减。
⑦添加整点报时程序,当秒钟显示到50时,蜂鸣器开始发声,直至秒钟显示为00时停止。
⑧完成整个程序后,设置引脚和端口,使其一一对应,然后编译仿真,硬件测试。
五、实训VHDL程序
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_arith.all;
useieee.std_logic_unsigned.all;
entityshixunis
port
(clk:
instd_logic;
s1,s2,s3,s4:
instd_logic;
display:
outstd_logic_vector(7downto0);
seg_sel:
bell:
bufferstd_logic
);
end;
architecturertlofshixunis
signalsegbit:
std_logic_vector(7downto0);
signaldisP_decode:
signalsec1,sec10,disp_temp:
integerrange0to10;
signalg1,g2:
integerrange10to10;
signalmin1,min10:
integerrange0to9;
signalhour1,hour10:
signalclk1hz:
std_logic;
signalcnt:
std_logic_vector(19downto0);
signaltone:
std_logic_vector(10downto0);
signaltone_count:
signaltone_index:
std_logic_vector(2downto0);
signaltime:
integerrange0to7;
signalclk2Mhz:
std_logic;
begin
display<
=disP_decode;
seg_sel<
=segbit;
process(clk)
variablecnt1:
integerrange0to49999999;
begin
ifclk'
eventandclk='
1'
then
ifcnt1=49999999thencnt1:
=0;
else
ifcnt1<
24999999then
clk1hz<
='
;
elseclk1hz<
0'
endif;
cnt1:
=cnt1+1;
endif;
endprocess;
process(clk1hz)
if(clk1hz'
eventandclk1hz='
)then
if(sec1=9andsec10=5andmin1=9andmin10=5andhour1=3andhour10=2)then
sec1<
sec10<
min1<
min10<
hour1<
hour10<
elsifs1='
hour1<
=hour1+1;
if(hour1=9)then
hour1<
hour10<
=hour10+1;
if(hour10=2andhour1=3)then
endif;
elsifs2='
=hour1-1;
if(hour10=0andhour1=0)then
=3;
=2;
else
if(hour1=0)then
=9;
hour10<
=hour10-1;
elsifs3='
then
min1<
=min1+1;
if(min1=9)then
min1<
min10<
=min10+1;
if(min10=5)then
elsifs4='
=min1-1;
if(min1=0)then
=min10-1;
if(min10=0)then
=5;
if(sec1=9)then
if(sec10=5)then
sec10<
if(min1=9)then
if(min10=5)then
if(hour1=9)then
=sec10+1;
=sec1+1;
endprocess;
process(cnt(15downto13))
ifclk='
andclk'
eventthen
cnt<
=cnt+1;
casecnt(15downto13)is
when"
000"
=>
segbit<
="
11111110"
001"
11111101"
010"
11111011"
011"
11110111"
100"
11101111"
101"
11011111"
110"
10111111"
111"
01111111"
whenothers=>
null;
endcase;
process(segbit)
casesegbitis
when"
disp_temp<
=sec1;
=sec10;
=g1;
=min1;
=min10;
=g2;
=hour1;
=hour10;
process(disp_temp)
casedisp_tempis
when0=>
disp_decode<
11000000"
when1=>
11111001"
when2=>
10100100"
when3=>
10110000"
when4=>
10011001"
when5=>
10010010"
when6=>
10000010"
when7=>
11111000"
when8=>
10000000"
when9=>
10010000"
when10=>
whenothers=>
11111111"
en