EDA数字钟设计实训报告.docx

上传人:b****3 文档编号:1431193 上传时间:2022-10-22 格式:DOCX 页数:12 大小:62.02KB
下载 相关 举报
EDA数字钟设计实训报告.docx_第1页
第1页 / 共12页
EDA数字钟设计实训报告.docx_第2页
第2页 / 共12页
EDA数字钟设计实训报告.docx_第3页
第3页 / 共12页
EDA数字钟设计实训报告.docx_第4页
第4页 / 共12页
EDA数字钟设计实训报告.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

EDA数字钟设计实训报告.docx

《EDA数字钟设计实训报告.docx》由会员分享,可在线阅读,更多相关《EDA数字钟设计实训报告.docx(12页珍藏版)》请在冰豆网上搜索。

EDA数字钟设计实训报告.docx

EDA数字钟设计实训报告

 

EDA实训报告

 

指导教师

朱小祥田欢

专业

电子信息工程技术

班级

电信1004班

姓名

张子维

日期

2012年5月21日—25日

 

一、实训目的

1、了解数字钟的工作原理。

2、进一步熟悉用VHDL语言编写驱动七段码管显示的代码。

3、掌握VHDL编写中的一些小技巧。

二、实训原理

多功能数字钟应该具有的功能有:

显示时-分-秒、整点报时、小时和分钟可调等基本功能。

首先要知道钟表的工作机理,整个钟表的工作应该是在1Hz信号的作用下进行,这样每来一个时钟信号,秒增加1秒,当秒从59秒跳转到00秒时,分钟增加1分,同时当分钟从59分跳转到00分时,小时增加1小时,但是需要注意的是,小时的范围是从0~23时。

在实训中为了显示的方便,由于分钟和秒钟显示的范围都是从0~59,所以可以用一个3位的二进制码显示十位,用一个四位的二进制码(BCD码)显示个位,对于小时因为它的范围是从0~23,所以可以用一个2位的二进制码显示十位,用4位二进制码(BCD码)显示个位。

实训中由于七段码管是扫描的方式显示,所以虽然时钟需要的是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:

outstd_logic_vector(7downto0);

bell:

bufferstd_logic

);

end;

architecturertlofshixunis

signalsegbit:

std_logic_vector(7downto0);

signaldisP_decode:

std_logic_vector(7downto0);

signalsec1,sec10,disp_temp:

integerrange0to10;

signalg1,g2:

integerrange10to10;

signalmin1,min10:

integerrange0to9;

signalhour1,hour10:

integerrange0to9;

signalclk1hz:

std_logic;

signalcnt:

std_logic_vector(19downto0);

signaltone:

std_logic_vector(10downto0);

signaltone_count:

std_logic_vector(10downto0);

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<='1';

elseclk1hz<='0';

endif;

cnt1:

=cnt1+1;

endif;

endif;

endprocess;

process(clk1hz)

begin

if(clk1hz'eventandclk1hz='1')then

if(sec1=9andsec10=5andmin1=9andmin10=5andhour1=3andhour10=2)then

sec1<=0;sec10<=0;min1<=0;min10<=0;hour1<=0;hour10<=0;

elsifs1='0'then

hour1<=hour1+1;

if(hour1=9)then

hour1<=0;

hour10<=hour10+1;

else

if(hour10=2andhour1=3)then

hour1<=0;hour10<=0;

endif;

endif;

elsifs2='0'then

hour1<=hour1-1;

if(hour10=0andhour1=0)then

hour1<=3;hour10<=2;

else

if(hour1=0)then

hour1<=9;

hour10<=hour10-1;

endif;

endif;

elsifs3='0'then

min1<=min1+1;

if(min1=9)then

min1<=0;

min10<=min10+1;

if(min10=5)then

min10<=0;

endif;

endif;

elsifs4='0'then

min1<=min1-1;

if(min1=0)then

min1<=9;

min10<=min10-1;

if(min10=0)then

min10<=5;

endif;

endif;

else

if(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;

else

hour1<=hour1+1;

endif;

else

min10<=min10+1;

endif;

else

min1<=min1+1;

endif;

else

sec10<=sec10+1;

endif;

else

sec1<=sec1+1;

endif;

endif;

endif;

endprocess;

process(cnt(15downto13))

begin

ifclk='1'andclk'eventthen

cnt<=cnt+1;

casecnt(15downto13)is

when"000"=>segbit<="11111110";

when"001"=>segbit<="11111101";

when"010"=>segbit<="11111011";

when"011"=>segbit<="11110111";

when"100"=>segbit<="11101111";

when"101"=>segbit<="11011111";

when"110"=>segbit<="10111111";

when"111"=>segbit<="01111111";

whenothers=>null;

endcase;

endif;

endprocess;

process(segbit)

begin

casesegbitis

when"11111110"=>disp_temp<=sec1;

when"11111101"=>disp_temp<=sec10;

when"11111011"=>disp_temp<=g1;

when"11110111"=>disp_temp<=min1;

when"11101111"=>disp_temp<=min10;

when"11011111"=>disp_temp<=g2;

when"10111111"=>disp_temp<=hour1;

when"01111111"=>disp_temp<=hour10;

whenothers=>null;

endcase;

endprocess;

process(disp_temp)

begin

casedisp_tempis

when0=>disp_decode<="11000000";

when1=>disp_decode<="11111001";

when2=>disp_decode<="10100100";

when3=>disp_decode<="10110000";

when4=>disp_decode<="10011001";

when5=>disp_decode<="10010010";

when6=>disp_decode<="10000010";

when7=>disp_decode<="11111000";

when8=>disp_decode<="10000000";

when9=>disp_decode<="10010000";

when10=>disp_decode<="10111111";

whenothers=>disp_decode<="11111111";

en

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 解决方案 > 营销活动策划

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1