您好,欢迎访问三七文档
本科实验报告题目:数字时钟设计及实现课程名称:数字电路课程设计学院(系):专业:电气工程及其自动化班级:学生姓名:学号:完成日期:成绩:2012年12月22日题目:数字时钟设计及实现一设计要求数字时钟是常见的一种计时装置,数字时钟以1HZ的频率工作。该设计完成数字时钟的运行和显示。其主要功能如下:(1)数字时钟以1HZ的频率工作,其输入频率为1MHZ。(2)数字时钟显示时、分、秒信息。这些显示信息在6个7段数码管上完成。(3)通过按键设置时、分信息,并且具有对数字时钟复位功能。复位键将时、分、秒清0,并做好重新计数的准备。按键具有预置时、分的功能。分别对当前的时和分信息做递增设置和递减设置。二设计分析及系统方案设计图1给出了数字时钟的结构图。从图中可以看到,数字时钟由复位按键(reset)、小时递增按键(hour_inc)、小时递减按键(hour_dec)、分钟递增按键(min_inc)、分钟递减按键(min_dec)、时钟输入、7段LED显示、LED管选择信号线sel、LED码控制信号线(segment)等部分组成。所有的按键都是低电平有效。LED管选择信号线sel通过控制外部的3-8译码器来选择对应的LED管。LED码控制信号线分别和LED的7个数码控制端a-g相连,用来控制LED上显示的字符,通过合理的控制扫描时钟,就可以得到稳定的时、分、秒的显示。图1数字时钟结构图三系统以及模块硬件电路设计1、数字时钟控制信号改数字时钟的控制部分由芯片完成。该芯片的输入和输出接口由下面信号组成。(1)输入信号复位信号(reset)时钟输入信号(clk)小时递增信号(hour_inc)小时递减信号(hour_dec)分钟递增信号(min_inc)分钟递减信号(min_dec)。(2)输出信号LED选择信号(sel)LED码显示控制信号(segment)。2、控制模块结构该设计分为下面4个模块:定时时钟模块、扫描时钟模块、按键处理模块、定时计数模块和显示控制模块。图2给出了这几个模块之间的信号连接关系。(1)按键处理模块由于VHDL语言的规则,将按键的处理和定时模块设计在一起。为了描述清楚,将对按键的处理进行说明。在该设计中,采用异步复位电路方式。当复位信号低有效时,计时器停止计时,时、分、秒清0。图2电子钟控制模块的内部连接图对于小时的递增、递减按键操作,通过一个1HZ的计数时钟采样。图3给出了递增、递减的操作时序。图3预置操作和定时时钟的关系当1HZ的div_clk信号的上升沿到来时,检测hour_inc和hour_dec按键,图中的虚线表示在时钟的上升沿对按键信号进行采样。当hour_inc或hour_dec按键低有效时,对小时进行递加或递减操作。对于分针的递加、递减按键操作,也是通过一个1HZ的计数时钟采样。原理如图4所示。图4定时器时、分、秒之间的连接关系(2)定时时钟模块定时时钟模块作用就是,将外部提供的1MHZ的时钟通过分频器后向模块内的定时计数模块提供1HZ的定时计数时钟。在设计定时时钟模块时,采用同步计数电路。(3)扫描时钟模块扫描时钟模块的作用就是通过对1MHZ的分频处理后,向显示控制模块提供合适的显示扫描时钟,该始终必须经过合理的设计,才能保证7段数码显示的稳定。在设计扫描时钟模块时,采用同步计数电路。(4)定时计数模块定时计数模块是该设计中最重要的一部分,在设计该模块时,为了便于后续显示控制模块的设计,将时、分、秒进行分离,即小时分成了小时的十位和个位分别处理,分钟分成了分钟的十位和个位分别处理。秒分成了秒的十位和个位分别处理。在该设计中,采用24小时计数模式。例如13:28:57。13为小时的表示,1为小时的十位,3为小时的个位;28为分钟的表示,2为分钟的十位,8为分钟的个位;57为秒的表示,5为秒的十位,7为秒的个位。由于对小时、分钟和秒的十位及个位分别处理,在设计该模块就稍微复杂些。下面逐一进行说明。秒的个位计数从0到9,即十进制计数。当秒的个位计数到9后,准备向秒的十位进位。秒的十位计数从0到5,即六进制计数。当秒的十位计数到5后,准备向分的个位进位。分钟的个位计数从0到9,即十进制计数。当分钟的个位计数到9后,准备向分钟的十位进位。分钟的十位计数从0到5,即六进制计数。当分钟的十位计数到5后,准备向小时的个位进位。对于小时的处理比较复杂,小时的十位和个位之间存在下面的关系:当小时的十位为0或1时,小时的个位可以计数范围为0-9,即十进制计数。当小时的十位为2时,小时的个位可以计数范围为0-3,即四进制计数。图4给出了定时器时、分、秒之间的关系。(5)显示控制模块显示控制模块主要作用是在7段数码管上正确地显示0-9的数字。Sel三位LED选择线和3-8译码器相连。表1开发系统工作模式:接口名称类型(输入/输出)结构图上的信号名引脚号说明复位信号inResetPin_g26进行复位,显示屏清0时钟输入信号InclkPin_n2输入时钟小时递增信号InHour_incPin_n23用于小时位调节小时递减信号InHour_decPin_p23用于小时位调节分钟递增符号InMin_incPin_w26用于分钟位调节分钟递减符号InMin_decnone用于分钟位调节LED选择信号Outsel用于选择LED信号LED码显示控制信号Outsegment用于控制LED显示屏四系统的VHDL设计libraryieee;useieee.std_logic_1164.all;useieee.std_logic_arith.all;useieee.std_logic_unsigned.all;entityclockis--实体定义部分port(clk:instd_logic;rst:instd_logic;inc_min:instd_logic;sub_min:instd_logic;inc_hour:instd_logic;sub_hour:instd_logic;sel:outstd_logic_vector(2downto0);q:outstd_logic_vector(7downto0);endclock;architecturebehavioralofclockis--信号定义部分signalsec_counter1:std_logic_vector(3downto0);signalsec_counter2:std_logic_vector(3downto0);signalmin_counter1:std_logic_vector(3downto0);signalmin_counter2:std_logic_vector(3downto0);signalhour_counter1:std_logic_vector(3downto0);signalhour_counter2:std_logic_vector(3downto0);signaldivcounter:std_logic_vector(19downto0);signaldiv_clk:std_logic;signalscancounter:std_logic_vector(1downto0);signalscan_clk:std_logic;signalscan_out:std_logic_vector(2downto0);signalsecseg1,secseg2,minseg1,minseg2,hourseg1,hourseg2:std_logic_vector(7downto0);beginprocess(rst,clk)--计数时钟代码设计beginif(rst='0')thendivcounter=x00000;div_clk='0';elsif(rising_edge(clk))thenif(divcounter=x7a11f)thendivcounter=x00000;div_clk=notdiv_clk;elsedivcounter=divcounter+1;endif;endif;endprocess;process(rst,clk)--数码管扫描时钟beginif(rst='0')thenscancounter=00;scan_clk='0';elsif(rising_edge(clk))thenif(scancounter=11)thenscancounter=00;scan_clk=notscan_clk;elsescancounter=scancounter+1;endif;endif;endprocess;process(div_clk,rst)--时钟计数部分主进程beginif(rst='0')then--复位部分sec_counter1=x0;sec_counter2=x0;min_counter1=x0;min_counter2=x0;hour_counter1=x0;hour_counter2=x0;elsif(rising_edge(div_clk))then--手动调分,递增if(inc_min='0')thenif(min_counter1=x9)thenmin_counter1=x0;if(min_counter2=x5)thenmin_counter2=x0;elsemin_counter2=min_counter2+1;endif;elsemin_counter1=min_counter1+1;endif;elsif(sub_min='0')then--手动调分,递减if(min_counter1=x0)thenmin_counter1=x9;if(min_counter2=x0)thenmin_counter2=x5;elsemin_counter2=mincounter2-1;endif;elsemin_counter1=min_counter1-1;endif;elsif(inc_hour='0')then--手动调时,增时if(hour_counter2=x2)thenif(hour_counter1=x3)thenhour_counter1=x0;hour_counter2=x0;elsehour_counter1=hour_counter1+1;endif;elseif(hour_counter1=x9)thenhour_counter1=x0;hour_counter2=hour_counter2+1;elsehour_counter1=hour_counter1+1;endif;endif;elsif(sub_hour='0')then--手动调时,减时if(hour_counter1=x0)thenif(hour_counter2=x0)thenhour_counter1=x3;hour_counter2=x2;elsehour_counter2=hour_counter2-1;hour_counter1=x9;endif;elsehour_counter1=hour_counter1-1;endif;else--时分秒正常计时if(sec_counter1=x9)thensec_counter1=x0;if(sec_counter2=x5)thensec_counter2=x0;if(min_counter1=x9)thenmin_counter1=x0;if(min_counter2=x5)thenmin_counter2=x0;if(hour_counter2=x2)thenif(hour_counter1=x3)thenhour_counter1=x0;hour_counter2=x0;elsehour_counter1=hour_counter1+1;endif;elseif(hour_counter1=x9)thenhour_counter1=x0;hour_cou
本文标题:数字时钟设计及实现
链接地址:https://www.777doc.com/doc-2388088 .html