文档库 最新最全的文档下载
当前位置:文档库 › 基于VHDL语言的数字时钟设计

基于VHDL语言的数字时钟设计

课程:CPLD与FPGA设计及应用

实验:基于VHDL语言的数字时钟设计

学号:092030030

姓名:朱峰

专业:信号与信息处理

学院:电子与信息学院

2011年12月

基于VHDL语言的数字时钟设计一:主要功能

1:具有时、分、秒计数显示功能,以24小时循环计时。

2:具有日期和星期显示功能。

3:具有秒表功能

4:具有调节日期,星期,小时,分钟,清零的功能。

5:具有定时和闹铃的功能。

二:结构框图

三:RTL图

四:功能实现

4.1分频模块设计

本设计使用的输入时钟信号为50Mhz,经过分频产生两路时钟信号,其中一路为微秒计数时钟信号,一路为动态扫描时钟信号。同时模块有一输入控制信号,其功能是停止微秒计数时钟信号,以实现定时的功能。

输入:clk_in 为50Mhz,setstop为微秒计数时能信号

输出:clk_out1为1/60hz

clk_out2为1khz

源代码如下:

library ieee;

use ieee.std_logic_1164.all;

entity div is

port(clk_in,setstop: in std_logic;

clk_out1,clk_out2: out std_logic);

end entity div;

architecture fun of div is

constant a:integer:=8333333;

constant b:integer:=49999;

signal c:integer range 0 to a;

signal d:integer range 0 to b;

begin

process(clk_in,setstop)

begin

if(clk_in 'event and clk_in='1') then

if(( c+7500000)

else c<=0;clk_out1<='0';

end if;

end if;

end process;

process(clk_in)

begin

if(clk_in 'event and clk_in='1') then

if d<=b then d<=d+1; clk_out2<='1';

else d<=0;clk_out2<='0';

end if;

end if;

end process;

end fun;

4.2计时模块设计

4.2.1 微秒计时模块

计数器的第一个模块为微秒计时模块,其实质为一个六十进制计数器。

输入:clk为1/60hz,reset为清零复位键

输出:ensecond为秒模块的进位信号

Daout为微妙输出显示信号

源代码如下:

library ieee;

use ieee.std_logic_1164.all;

use ieee.std_logic_unsigned.all;

entity msecond is

port(clk,reset:in std_logic;

ensecond:out std_logic;

daout:out std_logic_vector(6 downto 0));

end entity msecond;

architecture fun of msecond is

signal count:std_logic_vector(6 downto 0);

signal enmin_1:std_logic;

begin

process(clk,reset)

begin

if(reset='0')then count<="0000000";

elsif(clk 'event and clk='1')then

if(count(3 downto 0)="1001")then

if(count<16#60#)then

if(count="1011001")then

enmin_1<='1';count<="0000000";

else

count<=count+7;

end if;

else

count<="0000000";

end if;

elsif(count<16#60#)then

count<=count+1 ;

enmin_1<='0' ;

else

count<="0000000";

end if;

end if;

end process;

daout<=count;

ensecond<=enmin_1 ;

end fun;

4.2.2 秒计时模块

计数器的第二个模块为秒计时模块,其实质为一个六十进制计数器。

输入:clk为秒进位信号,reset为清零复位键,setmin为调分信号,setclk为消抖时钟输出:enmin为分模块的进位信号

daout为秒输出显示信号

源代码如下:

library ieee;

use ieee.std_logic_1164.all;

use ieee.std_logic_unsigned.all;

entity second is

port(clk,setclk,reset,setmin:in std_logic;

enmin:out std_logic;

daout:out std_logic_vector(6 downto 0));

end entity second;

architecture fun of second is

signal count:std_logic_vector(6 downto 0);

signal enmin_1,enmin_2:std_logic;

begin

process(clk,reset,setmin)

begin

if(reset='0')then count<="0000000";

elsif(clk 'event and clk='1')then

if(count(3 downto 0)="1001")then

if(count<16#60#)then

if(count="1011001")then

enmin_1<='1';count<="0000000";

else

count<=count+7;

end if;

else

count<="0000000";

end if;

elsif(count<16#60#)then

count<=count+1 ;

enmin_1<='0' ;

else

count<="0000000";

end if;

end if;

end process;

process(setclk,setmin)

begin

if(setclk 'event and setclk='1')

then

enmin_2<=not setmin ;

end if;

end process;

daout<=count;

enmin<=(enmin_1 or enmin_2);

end fun;

4.2.3 分计时模块

计数器的第三个模块为秒计时模块,其实质为一个六十进制计数器。

输入:clk为分进位信号,reset为清零复位键,sethour为调时信号,setclk为消抖时钟输出:enhour为小时模块的进位信号

daout为分输出显示信号

源代码如下:

library ieee;

use ieee.std_logic_1164.all;

use ieee.std_logic_unsigned.all;

entity minute is

port(

clk,setclk,reset,sethour:in std_logic;

enhour:out std_logic;

daout:out std_logic_vector(6 downto 0));

end entity minute;

architecture fun of minute is

signal count:std_logic_vector(6 downto 0);

signal enhour_1,enhour_2:std_logic;

begin

process(clk,reset)

begin

if(reset='0')then

count<="0000000";

elsif(clk 'event and clk='1')then

if(count(3 downto 0)="1001")then

if(count<16#60#)then

if(count="1011001")then

enhour_1<='1';

count<="0000000";

else

count<=count+7;

end if;

else

count<="0000000";

end if;

elsif(count<16#60#)then

count<=count+1;

enhour_1<='0' ;

else

count<="0000000";

end if;

end if;

end process;

process(setclk,sethour)

begin

if(setclk 'event and setclk='1')

then

enhour_2<=not sethour ;

end if;

end process;

daout<=count;

enhour<=(enhour_1 or enhour_2);

end fun;

4.2.4小时计时模块

计数器的第四个模块为小时计时模块,其实质为一个二十四进制计数器。

输入:clk为分进位信号,reset为清零复位键,setweek为调小时信号,setclk为消抖时钟

输出:enweek为日期模块的进位信号

daout为小时输出显示信号

源代码如下:

library ieee;

use ieee.std_logic_1164.all;

use ieee.std_logic_unsigned.all;

entity hour is

port(

clk,setclk,reset,setweek:in std_logic;

enweek:out std_logic;

daout:out std_logic_vector(6 downto 0));

end entity hour;

architecture fun of hour is

signal count:std_logic_vector(6 downto 0);

signal enweek_1,enweek_2:std_logic;

begin

process(clk,reset)

begin

if(reset='0')then

count<="0000000";

elsif(clk 'event and clk='1')then

if(count(3 downto 0)="1001") and (count<16#23# )then count<=count+7;

elsif (count="0100011")then

enweek_1<='1';count<="0000000";

elsif(count<16#23#)then

count<=count+1;

enweek_1<='0';

else

count<="0000000";

end if;

end if;

end process;

process(setclk,setweek)

begin

if(setclk 'event and setclk='1')

then

enweek_2<=not setweek;

end if;

end process;

daout<=count;

enweek<=(enweek_1 or enweek_2) ;

end fun;

4.3日期和星期模块设计

4.3.1 星期显示模块

星期显示模块其实质为一个七进制计数器。

输入:clk为日期进位信号,reset为清零复位键

输出:weeoutk为星期输出显示信号

源代码如下:

library ieee;

use ieee.std_logic_1164.all;

use ieee.std_logic_unsigned.all;

entity weeker is

port(clk:in std_logic;

reset:in std_logic;

weekout:out std_logic_vector(3 downto 0));

end entity weeker;

architecture fun of weeker is

signal count:std_logic_vector(3 downto 0);

begin

process(clk,reset)

begin

if(reset='0')then

count<="0001";

elsif(clk 'event and clk='1')then

if (count<16#7#) then

count<=count+1;

else

count<="0001";

end if;

end if;

end process;

weekout<=count;

end fun;

4.3.2 日期显示模块

日期显示模块其实质为一个十二选一选择器。

输入:clk为日期进位信号,reset为清零复位键

输出:monthout 为月输出显示信号

Dateout为日输出显示信号

源代码如下:

library ieee;

use ieee.std_logic_1164.all;

use ieee.std_logic_unsigned.all;

entity date is

port(clk:in std_logic;

reset:in std_logic;

monthout:out std_logic_vector(4 downto 0);

dateout:out std_logic_vector(5 downto 0));

end entity date;

architecture fun of date is

signal dount:std_logic_vector(4 downto 0);

signal count:std_logic_vector(5 downto 0);

begin

process(clk,reset)

begin

if(reset='0')then count<="000001";dount<="00001";

elsif(clk 'event and clk='1' and dount="00001" )then

if(count(3 downto 0)="1001") and (count<16#31# )then count<=count+7;

elsif (count<16#31#) then count<=count+1;

else count<="000001";dount<=dount+1;end if;

elsif(clk 'event and clk='1' and dount="00010" )then

if(count(3 downto 0)="1001") and (count<16#29# )then count<=count+7;

elsif (count<16#29#) then count<=count+1;

else count<="000001";dount<=dount+1;end if;

elsif(clk 'event and clk='1' and dount="00011" )then

if(count(3 downto 0)="1001") and (count<16#31# )then count<=count+7;

elsif (count<16#31#) then count<=count+1;

else count<="000001";dount<=dount+1;end if;

elsif(clk 'event and clk='1' and dount="00100" )then

if(count(3 downto 0)="1001") and (count<16#30# )then count<=count+7;

elsif (count<16#30#) then count<=count+1;

else count<="000001";dount<=dount+1; end if;

elsif(clk 'event and clk='1' and dount="00101" )then

if(count(3 downto 0)="1001") and (count<16#31# )then count<=count+7;

elsif (count<16#31#) then count<=count+1;

else count<="000001";dount<=dount+1; end if;

elsif(clk 'event and clk='1' and dount="00110" )then

if(count(3 downto 0)="1001") and (count<16#30# )then count<=count+7;

elsif (count<16#30#) then count<=count+1;

else count<="000001";dount<=dount+1;end if;

elsif(clk 'event and clk='1' and dount="00111" )then

if(count(3 downto 0)="1001") and (count<16#31# )then count<=count+7;

elsif (count<16#31#) then count<=count+1;

else count<="000001";dount<=dount+1;end if;

elsif(clk 'event and clk='1' and dount="01000" )then

if(count(3 downto 0)="1001") and (count<16#31# )then count<=count+7;

elsif (count<16#31#) then count<=count+1;

else count<="000001";dount<=dount+1;end if;

elsif(clk 'event and clk='1' and dount="01001" )then

if(count(3 downto 0)="1001") and (count<16#30# )then count<=count+7;

elsif (count<16#30#) then count<=count+1;

else count<="000001";dount<=dount+1; end if;

elsif(clk 'event and clk='1' and dount="01010" )then

if(count(3 downto 0)="1001") and (count<16#31# )then count<=count+7;

elsif (count<16#31#) then count<=count+1;

else count<="000001";dount<=dount+1;end if;

elsif(clk 'event and clk='1' and dount="01011" )then

if(count(3 downto 0)="1001") and (count<16#30# )then count<=count+7;

elsif (count<16#30#) then count<=count+1;

else count<="000001";dount<=dount+1; end if;

elsif(clk 'event and clk='1' and dount="01100" )then

if(count(3 downto 0)="1001") and (count<16#31# )then count<=count+7;

elsif (count<16#31#) then count<=count+1;

else count<="000001";dount<=dount+1;end if;end if;

end process;

monthout<=dount;

dateout<=count; end fun;

4.4扫描显示模块设计

该模块的作用是将时钟产生的微秒、秒、分、小时、星期和日期信号以扫描的形式显示输出。其中一控制信号实现数码管的复用,控制显示微秒、秒、分、小时或星期、日期。

输入:clk1为扫描时钟,reset为清零复位键,ms、sec、min、hour、month、date、week 分别为微秒、秒、分、小时、月、日、星期显示信号,showweek为控制信号输出:dp为数码管小数点显示信号

led为七段数码管显示信号

sel为位选信号

源代码如下:

library ieee;

use ieee.std_logic_1164.all;

use ieee.std_logic_unsigned.all;

use ieee.std_logic_arith.all;

entity seltime is

port(

clk1,reset,showweek:in std_logic;

ms,sec,min,hour:in std_logic_vector(6 downto 0);

month:in std_logic_vector(4 downto 0);

date:in std_logic_vector(5 downto 0);

week:in std_logic_vector(3 downto 0);

dp:out std_logic;

led:out std_logic_vector(6 downto 0);

sel:out std_logic_vector(7 downto 0));

end entity seltime ;

architecture fun of seltime is

signal count:std_logic_vector(3 downto 0);

signal daout:std_logic_vector(3 downto 0);

signal d:std_logic_vector(4 downto 0);

begin

p1 : process(clk1,reset)

begin

if(reset='0')then count<="0000";

elsif(clk1'event and clk1='1') then

if(count>"1101")then count<="0000"; d<=count&showweek ;

else count<=count+1; d<=count&showweek ;

end if;

end if;

end process p1;

p2: process(d)

begin

case d is

when"00011" =>daout<=ms(3 downto 0);sel<="01111111";dp<='1';

when"00101"=>daout(3)<='0';daout(2 downto 0)<=ms(6downto4);sel<="10111111";dp<='1';

when"00111" =>daout<=sec(3 downto 0);sel<="11111110";dp<='0';

when"01001"=>daout(3)<='0';daout(2downto0)<=sec(6 downto 4);sel<="11111101";dp<='1';

when"01011" =>daout<=min(3 downto 0);sel<="11111011";dp<='0';

when"01101"=>daout(3)<='0';daout(2downto0)<=min(6downto 4);sel<="11110111";dp<='1';

when"01111" =>daout<=hour(3 downto 0);sel<="11101111";dp<='0';

when"10001"=>daout(3downto2)<="00";daout(1downto0)<=hour(5downto4);sel<="110111 11";dp<='1';

when"10010" =>daout<=week;sel<="01111111";dp<='1';

when"10100" =>daout<=date(3 downto 0);sel<="11111110";dp<='1';

when"10110"=>daout(3downto2)<="00";daout(1downto0)<=date(5downto4);sel<="1111110 1";dp<='1';

when"11000" =>daout<=month(3 downto 0);sel<="11111011";dp<='1';

when"11010" =>daout(3 downto 1)<="000";daout(0)<=month(4);sel<="11110111";dp<='1';

when others=>sel<="11111111"; end case;

end process p2;

p3: process(daout)

begin

case daout is

when"0000"=>led<="0000001";when"0001"=>led<="1001111";

when"0010"=>led<="0010010";when"0011"=>led<="0000110";

when"0100"=>led<="1001100";when"0101"=>led<="0100100";

when"0110"=>led<="0100000";when"0111"=>led<="0001111";

when"1000"=>led<="0000000";when"1001"=>led<="0000100";

when others=>null;end case;

end process p3;

end fun;

4.5 整点报时模块设计

该模块的作用是当时钟计数到整点时蜂鸣器报警,以实现整点报时功能。

输入:clk计数时钟信号,speaksec秒输出信号,speakmin分输出信号

输出:报警信号

源代码如下:

library ieee;

use ieee.std_logic_1164.all;

use ieee.std_logic_unsigned.all;

entity speaker is

port(clk:in std_logic;

speaksec:in std_logic_vector(6 downto 0);

speakmin:in std_logic_vector(6 downto 0);

speak:out std_logic);

end entity speaker;

architecture fun of speaker is

begin

process(clk,speakmin)

begin

if(clk 'event and clk='1')then

if(speakmin="0000000" and speaksec="0000000")then speak<='1';else speak<='0';end if; end if;

end process;

end fun;

五:附录

顶层文件源代码:

library ieee;

use ieee.std_logic_1164.all;

entity clock_top is

port(clk_in,reset,setmin,sethour,setweek,setstop,showweek:in std_logic;

dp:out std_logic;

sel:out std_logic_vector(7 downto 0);

led:out std_logic_vector(6 downto 0);

speak: out std_logic);

end clock_top;

architecture a of clock_top is

COMPONENT div

PORT(clk_in,setstop: in std_logic;

clk_out1,clk_out2: out STD_LOGIC);

END COMPONENT;

COMPONENT msecond

PORT(clk,reset: in std_logic;

daout:out std_logic_vector(6 downto 0);

ensecond:out std_logic);

END COMPONENT;

COMPONENT second

PORT(clk,setclk,reset,setmin: in std_logic;

daout:out std_logic_vector(6 downto 0);

enmin:OUT STD_LOGIC);

END COMPONENT;

COMPONENT minute

PORT(clk,setclk,reset,sethour:in std_logic;

enhour:out std_logic;

daout:out std_logic_vector(6 downto 0));

END COMPONENT;

COMPONENT hour

PORT(clk,setclk,reset,setweek:in std_logic;

enweek:out std_logic;

daout:out std_logic_vector(6 downto 0));

END COMPONENT;

COMPONENT weeker

PORT(clk,reset:in std_logic;

weekout:out std_logic_vector(3 downto 0));

END COMPONENT;

COMPONENT date

PORT(clk,reset:in std_logic;

monthout:out std_logic_vector(4 downto 0);

dateout:out std_logic_vector(5 downto 0));

END COMPONENT;

COMPONENT seltime

port(clk1,reset,showweek:in std_logic;

ms,sec,min,hour:in std_logic_vector(6 downto 0);

week:in std_logic_vector(3 downto 0);

month:in std_logic_vector(4 downto 0);

date:in std_logic_vector(5 downto 0);

dp:out std_logic;

sel:out std_logic_vector(7 downto 0);

led:out std_logic_vector(6 downto 0));

END COMPONENT;

COMPONENT speaker

PORT(clk:in std_logic;

speaksec:in std_logic_vector(6 downto 0);

speakmin:in std_logic_vector(6 downto 0);

speak:out std_logic);

END COMPONENT;

signal da0out,dalout,dallout,dalllout:std_logic_vector(6 downto 0);

signal dallllout:std_logic_vector(3 downto 0);

signal month0out:std_logic_vector(4 downto 0);

signal date0out:std_logic_vector(5 downto 0);

signal ensecond_re,enmin_re,enhour_re,enweek_re,dp_re,clk00,clk01:std_logic; begin

u1:div port map (clk_in=>clk_in,

setstop=>setstop,

clk_out1=>clk00,

clk_out2=>clk01);

u2:msecond port map (clk=>clk00,

reset=>reset,

ensecond=>ensecond_re,

daout=>da0out);

u3:second port map (clk=>ensecond_re,

setclk=>clk01,

reset=>reset,

setmin=>setmin,

enmin=>enmin_re,

daout=>dalout);

u4:minute port map (clk=>enmin_re,

setclk=>clk01,

reset=>reset,

sethour=>sethour,

enhour=>enhour_re,

daout=>dallout);

u5:hour port map (clk=>enhour_re,

setclk=>clk01,

reset=>reset,

setweek=>setweek,

enweek=>enweek_re,

daout=>dalllout);

u6:weeker port map (clk=>enweek_re,

reset=>reset,

weekout=>dallllout);

u7:date port map (clk=>enweek_re,

reset=>reset,

monthout=>month0out,

dateout=>date0out);

u8:seltime port map(clk1=>clk01,

reset=>reset,

showweek=>showweek,

ms=>da0out,

sec=>dalout,

min=>dallout,

hour=>dalllout,

week=>dallllout,

date=>date0out,

month=>month0out,

sel=>sel,

led=>led,

dp=>dp);

u9:speaker port map(clk=>clk01,

speaksec=>dalout,

speakmin=>dallout,

speak=>speak);

end a;

基于VHDL的多功能数字钟设计报告

基于VHDL的多功能数字钟 设计报告 021215班 卫时章 02121451

一、设计要求 1、具有以二十四小时制计时、显示、整点报时、时间设置和闹钟的功能。 2、设计精度要求为1秒。 二、设计环境:Quartus II 三、系统功能描述 1、系统输入:时钟信号clk采用50MHz;系统状态及较时、定时转换的控制信号为k、set,校时复位信号为reset,均由按键信号产生。 2、系统输出:LED显示输出;蜂鸣器声音信号输出。 3、多功能数字电子钟系统功能的具体描述如下: (一)计时:正常工作状态下,每日按24h计时制计时并显示,蜂鸣器无声,逢整点报时。 (二)校时:在计时显示状态下,按下“k”键,进入“小时”待校准状态,若此时按下“set”键,小时开始校准;之后按下“k”键则进入“分”待校准状态;继续按下“k”键则进入“秒”待复零状态;再次按下“k”键数码管显示闹钟时间,并进入闹钟“小时”待校准状态;再次按下“k”键则进入闹钟“分”待校准状态;若再按下“k”键恢复到正常计时显示状态。若校时过程中按下“reset”键,则系统恢复到正常计数状态。 (1)“小时”校准状态:在“小时”校准状态下,显示“小时”的数码管以2Hz 闪烁,并按下“set”键时以2Hz的频率递增计数。 (2)“分”校准状态:在“分”校准状态下,显示“分”的数码管以2Hz闪烁,并按下“set”键时以2Hz的频率递增计数。 (3)“秒”校准状态:在“秒复零”状态下,显示“秒”的数码管以2Hz闪烁,并以1Hz的频率递增计数。 (4)闹钟“小时”校准状态:在闹钟“小时”校准状态下,显示“小时”的数码管以2Hz闪烁,并按下“set”键时以2Hz的频率递增计数。 (5)闹钟“分”校准状态:在闹钟“分”校准状态下,显示“分”的数码管以2Hz闪烁,并按下“set”键时以2Hz的频率递增计数。 (三)整点报时:蜂鸣器在“59”分钟的第“51”、“53”、“55”、“57”秒发频率为500Hz的低音,在“59”分钟的第“59”秒发频率为1000Hz的高音,结束时为整点。 (四)显示:采用扫描显示方式驱动4个LED数码管显示小时、分,秒由两组led灯以4位BCD 码显示。 (五)闹钟:闹钟定时时间到,蜂鸣器发出频率为1000Hz的高音,持续时间为60秒。 四、各个模块分析说明 1、分频器模块(freq.vhd) (1)模块说明:输入一个频率为50MHz的CLK,利用计数器分出 1KHz的q1KHz,500Hz的q500Hz,2Hz的q2Hz和1Hz的q1Hz。 (2)源程序: library ieee;

简易数字钟的设计

中文摘要 数字钟已经成为人们日常生活中不可缺少的必需品,广发应用于家庭及办公室等公共场所,给人们的生活、学习、工作及娱乐带来了极大的方便。由于数字集成电路技术的发展和采用了先进的石英技术,使得数字钟具有走时准确、性能稳定、携带方便等优点,它还用于计时、自动报时及自动控制等各个领域。尽管目前市场上已有现成的数字钟集成电路芯片出售,价格便宜、使用方便,但鉴于单片机的定时器功能也可以完成数字钟的设计,因此进行数字的设计是必要的。在这里我们将已学过的比较零散的数字电路的知识有机的、系统的联系起来用于实际,来培养我们的综合分析和设计电路,写程序、调试电路的能力。 单片机具有体积小、功能强、可靠性高、价格低廉等一系列优点,不仅已成为工业测控领域普遍采用的智能化控制工具,而且已渗入到人们工作和生活的各个角落,有力地推动了各行各业的技术改造和产品的更新换代,应用前景广阔。 本次做的数字钟是以单片机(AT89C51)为核心,结合相关的元器件(共阴极LED 数码显示器等),再配以相应的软件,达到制作简易数字钟的目的。硬件部分采用了单片机原理实验室的实验箱进行合理接线调试;软件部分通过keil进行了C程序的修改编译,protues软件仿真等。最终在实验箱上实现了与仿真结果相同的实际效果。 关键词单片机定时功能、AT89C51、共阴LED、Keil、Protues软件。

Abstract Microelectronics and computer technology along with the rapid development and progress, making the design of electronic systems and applications have entered a new era. The traditional manual design process is being advanced electronic design automation technology to replace. And is currently supporting modern technology has become the universal platform for electronic design, and step by step to support the development of system-level design. Only to hardware description language and logic synthesis-based top-down design methodology to meet the increasingly complex needs of digital system design. The progressive development of the taxi industry, the taxi meter is getting higher and higher requirements, the user requires not only the performance of the stability of billing, billing and accurate anti-cheat functions; and as a result of the instability in oil prices, billing system the need for regular adjustment of the meter so that users can request not to change the hardware to facilitate the billing system modifications. The system is the use of language, it can make use of digital circuits and system description, simulation and automatic design, and software as a development platform designed billing system procedures taxi and carried out a simulation program. To the achievement of pre-billing and simulation, as well as car to start, stop, pause and other functions, and dynamic scan shows the number of fares. Key Words Microcontroller\、AT89C51、7SEG-MPX6-CC-RED 、Keil、Proteus

vhdl课程设计(电子钟+闹铃)

数字钟的设计 一、系统功能概述 (一)、系统实现的功能: 1、具有“时”、“分”、“秒”的十进制数字显示(小时从00 ~ 23)。 2、具有手动校时、校分、校秒的功能。 3、有定时和闹钟功能,能够在设定的时间发出闹铃声。 4、能进行整点报时。从59分50秒起,每隔2秒发一次低音“嘟”的信号,连续5次, 最后一次为高音“嘀”的信号。 (二)、各项设计指标: 1、显示部分采用的6个LED显示器,从高位至低位分别显示时、分、秒。 2、有一个设置调闹钟定时时间、正常时间的按钮,选择调的对象。 3、有三个按钮分别调时、分、秒的时间。 4、有一个按钮用作开启/关闭闹铃。 5、另外需要两个时钟信号来给系统提供脉冲信号,使时钟和闹钟正常工作,分别为1Hz、 1kHz的脉冲。 二、系统组成以及系统各部分的设计 1、系统结构描述//要求:系统(或顶层文件)结构描述,各个模块(或子程序)的功能描述;(一)系统的顶层文件: 1、顶层文件图:(见下页) 2、各模块的解释: (1)、7个输入量clk_1khz、clk_1hz、key_slt、key_alarm、sec_set、min_set、hour_set:其中clk_1khz为闹铃模块提供时钟,处理后能产生“嘟”、“嘀”和变化的闹铃声音;clk_1hz为计时模块提供时钟信号,每秒计数一次;key_slt选择设置对象:定时或正常时间;key_alarm能够开启和关闭闹铃;sec_set、min_set、hour_set用于设置时间或定时,与key_slt相关联。各按键输出为脉冲信号。 (2)、CNT60_A_SEC模块: 这个模块式将clk_1hz这个时钟信号进行60进制计数,并产生一个分钟的触发信号。该模块能将当前计数值实时按BCD码的格式输出。将该输出接到两位LED数码后能时时显示秒的状态。通过alarm_clk可以选择设置对象为时间还是定时值。在设置时间模式上,key上的一个输入脉冲可以将clk的输入信号加一。在设置定时模式上,key 上的脉冲只修改定时值,不影响时间脉冲clk的状态。 同时该模块具有两个输出口out_do、out_di来触发整点报时的“嘟”、“嘀”声音。 (3)、CNT60_A_MIN模块: 这个模块式将CNT60_A_SEC的输出信号进行60进制计数,并产生一个时位的触发信号。该模块能将当前计数值实时按BCD码的格式输出。将该输出接到两位LED数码后能时时显示分的状态。通过alarm_clk可以选择设置对象为时间还是定时值。在设置时间模式上,key上的一个输入脉冲可以将clk的输入信号加一。在设置定时模式上,key上的脉冲只修改定时值,不影响时间脉冲clk的状态。 同时该模块具有三个输出口out_do、out_di、out_alarm来触发整点报时的“嘟”、“嘀”、闹铃声音。

数字时钟设计原理

数字时钟设计——原理图一.实验目的 设计一个多功能数字中电路,基本功能为:①准确计时,以数字形式显示分、秒的时间;②分和秒的计时要求为60进位;③校正时间。 二.设计框图和工作原理 由振荡器产生高稳定的高频脉冲信号,作为数字钟的时间基准(系统时钟),再经分频器输出标准秒脉冲信号。秒计数器计满60后向分计数器进位,分计数器计满60后重新开始计时。计数器的输出经译码器送显示器。计时出现误差时可以用校时电路进行校分。 三.设计方案

1.振荡器的设计 振荡器是数字钟的核心。振荡器的稳定度及频率的精确度决定了数字钟计时的准确程度,通常选用石英晶体构成振荡器电路。一般来说,振荡器的频率越高,计时精度越高。 在这里我们选用由集成电路定时器555与RC组成的多谐振荡器。这里选用555构成的多谐振荡器,输出振荡频率v0=1KHz的脉冲,电路参数如下图所示。 2.分频器的设计 选用3片中规模集成电路计数器74LS90可以完成分频功能。因为每片为1/10分频,3片级联则可获得所需要的频率信号,即第1片的Q3端输出频率为100HZ,第2片的Q3端输出为10Hz,第3片的Q3端输出为1Hz。分频电路如下图所示:

3.分秒计数器的设计 分和秒计数器都是模M=60的计数器,其计数规律为:00-01-… -58-59-00…选74LS92作十位计数器,74LS90作个位计数器。再将它们级联组成模数M=60的计数器。分秒计数电路如下: 74LS90的原理图如下: 74LS92的原理图如下: 4.校时电路的设计 当数字钟接通电源或者计时出现误差时,需要校正时间(或称校时)。校时是数字钟应具备的基本功能。一般电子手表都具有时、分、秒等校时功能。为使

vhdl数字时钟设计

数字时钟设计 一、题目分析 1、功能介绍 1)具有时、分、秒计数显示功能,以24小时循环计时。 2)时钟计数显示时有LED灯的花样显示。 3)具有调节小时、分钟及清零的功能。 4)具有整点报时功能。 2、总体方框图 3、性能指标及功能设计 1)时钟计数:完成时、分、秒的正确计时并且显示所计的数字;对秒、分——60进制计数,即从0到59循环计数,时钟——24进制计数,即从0到23循环计数,并且在数码管上显示数值。 2)时间设置:手动调节分钟、小时,可以对所设计的时钟任意调时间,这样使数字钟真正具有使用功能。我们可以通过实验板上的键7和键4进行任意的调整,因为我们用的时钟信号均是1HZ的,所以每LED灯变化一次就来

一个脉冲,即计数一次。 3)清零功能:reset为复位键,低电平时实现清零功能,高电平时正常计数。可以根据我们自己任意时间的复位。 4)蜂鸣器在整点时有报时信号产生,蜂鸣器报警。产生“滴答.滴答”的报警声音。 5)LED灯在时钟显示时有花样显示信号产生。即根据进位情况,LED不停的闪烁,从而产生“花样”信号。 二、选择方案 1、方案选择 方案一:根据总体方框图及各部分分配的功能可知,本系统可以由秒计数器、分钟计数器、小时计数器、整点报时、分的调整以及小时的调整和一个顶层文件构成。采用自顶向下的设计方法,子模块利用VHDL语言设计,顶层文件用原理图的设计方法。显示:小时采用24进制,而分钟均是采用6进制和10进制的组合。 方案二:根据总体方框图及各部分分配的功能可知,本系统可以由秒计数器、分钟计数器、小时计数器、整点报时、分的调整以及小时的调整和一个顶层文件构成。采用自顶向下的设计方法,子模块利用VHDL语言设计,顶层文件用原理图的设计方法。显示:小时采用24进制,而分钟和秒均60进制。 终上所述,考虑到试验时的简单性,故我选择了方案二。 三、细化框图 根据自顶向下的方法以及各功能模块的的功能实现上述设计方案应系统细化框图:

简易数字钟设计(已仿真)

简易数字钟设计 摘 要 本文针对简易数字钟的设计要求,提出了两种整体设计方案,在比较两个方案的优缺点后,选择了其中较优的一个方案,进行由上而下层次化的设计,先定义和规定各个模块的结构,再对模块内部进行详细设计。详细设计的时候又根据可采用的芯片,分析各芯片是否适合本次设计,选择较合适的芯片进行设计, 最后将设计好的模块组合调试,并最终在EWB 下仿真通过。 关键词 数字钟,EWB ,74LS160,总线,三态门,子电路 一、引言:所谓数字钟,是指利用电子电路构成的计时器。相对机械钟而言,数字钟能达到准确计时,并显示小时、分、秒,同时能对该钟进行调整。在此基础上,还能够实现整点报时,定时报闹等功能。 设计过程采用系统设计的方法,先分析任务,得到系统要求,然后进行总体设计,划分子系统,然后进行详细设计,决定各个功能子系统中的内部电路,最后进行测试。 二、任务分析:能按时钟功能进行小时、分钟、秒计时,并显示时间及调整时间,能整点报时,定点报时,使用4个数码管,能切换显示。 总体设计 本阶段的任务是根据任务要求进行模块划分,提出方案,并进行比较分析,最终找到较优的方案。 方案一、采用异步电路,数据选择器 将时钟信号输给秒模块,秒模块的进位输给分模块,分模块进位输入给时模块,切换的时候使用2选1数据选择器进行切换,电路框图如下: 该方案的优点是模块内部简单,基本不需要额外的电路,但缺点也很明显,该方案结构不清晰,模块间关系混乱,模块外还需使用较多门电路,不利于功能扩充,且使用了异步电路,计数在59的时候,高一级马上进位,故本次设计不采用此方案。 方案二、采用同步电路,总线结构 时钟信号分别加到各个模块,各个模块功能相对独立,框图如下: 显示 切换 秒钟 分钟 小时 控制 1Hz 脉冲信号 闹钟

VHDL数字钟设计报告

VHDL数字钟设计报告 一. 数字钟总体设计方案: 1.1设计目的 ①正确显示时、分、秒; ②可手动校时,能分别进行时、分的校正; ③整点报时功能; 1.2设计思路 数字钟的设计模块包括:分频器、去抖动电路、校时电路、“时、分、秒”计数器、校时闪烁电路、 整点报时和译码显示电路。 每一个功能模块作为一个实体单独进行设计,最后再用VHDL的例化语句将各个模块进行整合,生成 顶层实体top。 该数字钟可以实现3个功能:计时功能、设置时间功能和报时功能。 二.数字钟模块细节 2.1 分频器(fenpin) 本系统共需3种频率时钟信号(1024Hz、512Hz、1Hz)。为减少输入引脚,本系统采用分频模块,只需由外部提供1024Hz基准时钟信号,其余三种频率时钟信号由分频模块得到。 分频原理:为以1024Hz基准时钟经1024分频得到512Hz,1Hz频率时钟信号。 分频器管脚 代码:

library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; use ieee.std_logic_arith.all; entity fenpin is port(clk1024:in std_logic; clk1,clk512:out std_logic ); end fenpin ; architecture cml of fenpin is begin process (clk1024) variable count1: integer range 0 to 512; variable q1: std_logic; begin if clk1024' event and clk1024='1' then if count1=512 then q1:=not q1; count1:=0; else count1:=count1+1; end if; end if; clk1<=q1; end process; process(clk1024) variable count512: integer range 0 to 1; variable q512: std_logic; begin if clk1024' event and clk1024='1' then if count512=1 then q512:=not q512; count512:=0; else count512:=count512+1; end if; end if; clk512<=q512; end process; end cml; 2.2 校时电路(jiaoshi)

用VHDL编数字时钟

LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; USE IEEE.STD_LOGIC_SIGNED.ALL; USE IEEE.STD_LOGIC_ARITH.ALL; ENTITY Clock IS PORT( CLK5:IN STD_LOGIC; CLK3:IN STD_LOGIC; --时钟控制 SET1:IN STD_LOGIC; SET2:IN STD_LOGIC; --模式控制 SEG_SEL:OUT STD_LOGIC_VECTOR(2 DOWNTO 0); SEG_DA :OUT STD_LOGIC_VECTOR(7 DOWNTO 0) ); END Clock; ARCHITECTURE ADO OF Clock IS SIGNAL SEG_BUF1,SEG_BUF2,SEG_BUF3,SEG_BUF4:STD_LOGIC_VECTOR(3 DOWNTO 0); SIGNAL SEG_BUF5,SEG_BUF6,SEG_BUF7,SEG_BUF8:STD_LOGIC_VECTOR(3 DOWNTO 0); SIGNAL SEG_CNT :STD_LOGIC_VECTOR(2 DOWNTO 0); SIGNAL SEG_TEMP:STD_LOGIC_VECTOR(3 DOWNTO 0); BEGIN PROCESS (CLK3) --扫描累加 BEGIN IF CLK3'EVENT AND CLK3='1' THEN SEG_CNT<=SEG_CNT+1; END IF; END PROCESS; SEG_SEL<=SEG_CNT; SEG_BUF3<="1111"; SEG_BUF6<="1111"; PROCESS(SEG_CNT,SEG_BUF1,SEG_BUF2,SEG_BUF3,SEG_BUF4,SEG_BUF5,SEG_BUF6,SEG_BUF7 ,SEG_BUF8) BEGIN CASE SEG_CNT IS WHEN "000" => SEG_TEMP<=SEG_BUF1; WHEN "001" => SEG_TEMP<=SEG_BUF2; WHEN "010" => SEG_TEMP<=SEG_BUF3; WHEN "011" => SEG_TEMP<=SEG_BUF4; WHEN "100" => SEG_TEMP<=SEG_BUF5; WHEN "101" => SEG_TEMP<=SEG_BUF6;

简易数字钟的设计

第三单元简易数字钟的设计 数字钟是一种用数字显示秒、分、时的计时装置,与传统的机械钟相比,它具有走时准确、显示直观、无需机械传动等优点。因而得到了广泛的应用。小到人们日常生活中的电子手表,大到车站、码头、机场等公共场所的大型数字电子钟,数字钟到处可见。 在数字电路的学习中,已经学习过用计数器芯片搭建数字钟。51单片机内部集成了定时器/计数器,这为构建数字钟带来了方便。在本单元中,学习如何用51单片机来构建一个功能数字钟。 【任务要求】 在6个数码管上显示时、分、秒,共6位数字。 通过单片机内部定时器控制走时,走时准确。 系统有四个按键,功能分别是调整时间,加,减,确定。在按下调整键时候,显示“时”的两位数码管以1 Hz 频率闪烁。如果再次按下调整键,则“分”开始闪 烁,“时”恢复正常显示,依次循环,直到按下确定键,恢复正常的显示。在数码 管闪烁的时候,按下加或者减键可以调整相应的显示内容。按键支持短按和长按, 即短按时,所修改的数字每次增加1或者减小1,长按时候以一定速率连续增加或 者减少10。 【学习知识点】 数码管的原理,驱动程序的实现。 51单片机内部定时器的原理及应用 独立按键的原理及程序的实现。 【内容安排】 第一节:数码管显示原理及应用实现 第二节:独立按键检测原理及应用实现 第三节:计时的原理及实现 第四节:基于定时器的程序改进 第五节:数字钟的构建

第一节数码管显示原理及应用实现 1.1 数码管显示原理 数字钟要把时间显示到数字显示装置上,常用的数字显示装置有数码管、液晶、LED、CRT显示器等。在单片机系统设计中,LED数码管是最基本的显示装置。在数字钟的设计中我们用数码管对中的小时、分和表来进行显示。 LED数码管能显示各种数字或符号,由于它具有显示清晰、亮度高、寿命长、价格低廉等特点,因此使用非常广泛。图1.1是几个数码管的图片:a图为单位数码管, b图为双位数码管,c图为四位数码管。 a 单位数码管 b 双位数码管 c 四位数码管 图1.1 数码管图片 那么数码管是如何的工作呢?还记得我们小时候玩过的“火柴棒游戏”吗,几根火柴组合起来,可以拼成各种各样的图形,数码管实际上就是利用这个原理做成的。 图1.2 单个数码管引脚标号,共阴和共阳的内部连接图

简易数字钟的设计

电 子 技 术 课 程 设 计 专业:电气工程及其自动化 学号: 姓名: 指导老师:

简易数字钟的设计 【摘要】本次在对简易数字钟进行设计中,提出了两种整体设计方案,设 计过程中对两种方案不断进行尝试,不断比较,在比较两个方案的优缺点后, 选择了其中较优的一个方案,进行由上而下层次化的设计,先定义和规定各 个模块的结构,再对模块内部进行详细设计。在之后详细设计的时候又根据 可采用的芯片,分析各芯片是否适合本次设计,选择较合适的芯片进行设计, 最后将设计好的模块组合并调试。 【关键词】 电路,数字钟,74LS160,子电路 一、引言 随着社会的进步,科技发展的速度越来越快,科技产品更新的频率加大,而且当今很多领域大都用到数字钟,我们身边也遍布与数字钟有关的生活用品。。 所谓数字钟,是指利用电子电路构成的计时器。相对机械钟而言,数字钟能达到准确计时,并显示小时、分、秒,同时能对该钟进行调整。在此基础上,还能够实现整点报时,定时报闹等功能。在做本简易数字钟设计之前,通过老师及查阅资料,我知道有对此多种设计方案 数字电路是我们计算机科学与技术学科的基础,数字电路实验是学习数字电路的一个重要环节,它不仅能巩固理论知识的学习,而其能提高实验动手能力,增强设计和调试电路的能力.设计过程采用系统设计的方法,先分析任务,得到系统要求,然后进行总体设计,划分子系统,然后进行详细设计,决定各个功能子系统中的内部电路,最后进行测试。 二、设计要求 能按时钟功能进行小时、分钟、秒计时,并显示时间及调整时间,能整点报时,定点报时,使用4个数码管,能切换显示。小时的计时要求为“12翻1”,分和秒的计时要求为60进位。 分和秒计数器都是模M=60的计数器,其计数规律为00—01—…—58—59—00…

VHDL多功能数字钟

基于VHDL语言 数 字 钟 设 计 学院:信息工程学院 专业: 姓名: 学号: 2010年6月15日

一、设计要求 1、具有以二十四小时制计时、显示、整点报时、时间设置和闹钟的功能。 2、设计精度要求为1秒。 二、设计目的 1.掌握各类计数器以及计数器的级联方式; 2.掌握数码管动态显示的原理与方法; 3.掌握用FPGA技术的层次化设计方法; 4.理解数字逻辑硬件和软件的设计思想; 三、设计环境:Quartus II CPLD-5型试验箱 四、系统功能描述 1、系统输入:系统状态及较时、定时转换的控制信号为enset、k、set; 时钟信号clk采用50MHz;校时复位信号为reset,输入信号均由按键信号产生。 2、系统输出:LED显示输出;蜂鸣器声音信号输出。 3、多功能数字电子钟系统功能的具体描述如下: (一)计时:正常工作状态下,每日按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秒。

vhdl数字时钟课程设计

HEFEI UNIVERSITY EDA设计报告 题目 系别 班级 姓名 指导老师 完成时间

目录 一、设计要求 (3) 1.功能介绍 (3) 2.性能与功能设计 (3) 二、方案设计 (3) 三、程序框图 (3) 四、程序原理图 (4) 五、程序仿真与分析 (5) 1.秒计数器 (5) 2.分计数器 (5) 3.小时计数器 (6) 4.整点报时报警 (6) 5.时钟系统波形图 (7) 六、程序代码 (7) 七、总结与体会 (11)

一、设计要求 1、功能介绍 1)具有时、分、秒计数显示功能,以24小时循环计时。 2)具有调节小时、分钟及清零的功能。 3)具有整点报时功能。 2.性能及功能设计 1)时钟计数:完成时、分、秒的正确计时并且显示所计的数字;对秒、分——60进制计数,即从0到59循环计数,时钟——24进制计数,即从0到23循环计数,并且在数码管上显示数值。 2)时间设置:手动调节分钟、小时,可以对所设计的时钟任意调时间,这样使数字钟真正具有使用功能。我们可以通过实验板上的键7和键4进行任意的调整,同时可以通过改变频率来改变计数。 3)清零功能:reset为复位键,低电平时实现清零功能,高电平时正常计数。可以根据我们自己任意时间的复位。 4)蜂鸣器在整点时有报时信号产生,蜂鸣器报警。产生报警声音。 二、方案设计 根据各部分分配的功能可知,本系统可以由秒计数器、分钟计数器、小时计数器、整点报时、分的调整以及小时的调整和一个顶层文件构成。采用自顶向下的设计方法,子模块利用VHDL语言设计,顶层文件用原理图的设计方法。显示:小时采用24进制,而分钟和秒均60进制。 三、程序框图

简易数字钟设计

信息与电气工程学院 课程设计说明书(2014 /2015 学年第二学期) 课程名称:单片机课程设计 题目:简易数字钟设计 专业班级: 学生姓名: 学号: 指导教师: 设计周数:2周 设计成绩: 2015年6 月25 日

1、课程设计目的 (1)综合利用所学单片机知识完成一个单片机应用系统设计并在实验室实现,从而加深对单片机软硬知识的理解,获得初步的应用经验。 (2)学习A T89C51定时/计数器的原理及基本应用。 (3)掌握多为数码管动态显示方法。 (4)掌握Keil uVision2 IDE的使用方法。【包括项目文件的建立,给项目添加程序件, 编译、连接项目,形成目标文件,运行调试观察结果,多文件的处理,仿真环境的设置。】 (5)掌握Keil C51的调试技巧。【包括如何设置和删除断点,如何查看和修改寄存器的内容,如何观察和修改变量,如何观察存储器区域,并行口的使用,定时器/计数器的使用,串行口的使用,外中断的使用。】 (6)掌握PROTEUS软件使用过程。 2、简易数字钟的要求及软硬件的分析 2.1简易数字钟的设计要求 利用电子电路构成一个简易数字钟,该数字钟电路主要由C51单片机、4位共阳极数码管、时计数、分计数器、蜂鸣器、LED灯、NPN型和PNP型三极管、按键、若干电阻和导线组成。其中电路系统的分计数器采用60进制,时计数器采用24进制,。译码器显示电路将时、分计数器的输出状态通过三个两位共阳数码管显示出来。整点报时电路根据计时系统的输出状态产生一个脉冲信号,用蜂鸣器输出。相对机械钟而言,数字钟能达到准确计时,并显示小时、分钟,同时通过不同按键的不同功能对该数字钟进行小时和分钟调整,也可通过按键来接她通蜂鸣器来发出响声。 2.2数字钟的软件分析 2.1.1数字钟软件的系统分析 系统的软件设计也是工具系统功能的设计。单片机软件的设计主要包括执行软件(完成各种实质性功能)的设计和监控软件的设计。单片机的软件设计通常要考虑以下几个方面的问题:(1)根据软件功能要求,将系统软件划分为若干个相对独立的部分,设计出合理的总体结构,使软件开发清晰、简洁和流程合理; (2)培养良好的编程风格,如考虑结构化程序设计、实行模块化、子程序化。既便于调试、链接,又便于移植和修改; (3)建立正确的数学模型,通过仿真提高系统的性能,并选取合适的参数;

VHDL编写的数字钟

FPGA课程设计实验报告 题目:VHDL编写的数字钟设计 学院:电子信息学院 专业:电子与通讯工程 姓名:朱振军

基于FPGA的VHDL数字钟设计 一、功能介绍 1.在七段数码管上具有时--分--秒的依次显示。 2.时、分、秒的个位记满十向高位进一,分、秒的十位记满五向高位进一,小时按24进制计数,分、秒按60进制计数。 3.整点报时,当计数到整点时扬声器发出响声。 4.时间设置:可以通过按键手动调节秒和分的数值。此功能中可通过按键实现整体清零和暂停的功能。 5.LED灯循环显示:在时钟正常计数下,LED灯被依次循环点亮。 待增加功能: 1.实现手动调节闹铃时间,在制定时间使扬声器发声。 2.实现微妙的快速计数功能,可实现暂停、保存当前时间、继续计数的功能。 二、设计方案 本文数字钟的设计采用了自顶向下分模块的设计。底层是实现各功能的模块,各模块由vhdl语言编程实现:顶层采用原理图形式调用。其中底层模块包括秒、分、时三个计数器模块、按键去抖动模块、按键控制模块、时钟分频模块、数码管显示模块共7个模块。 设计框图如下: 图一数字钟系统设计框图 由图1可以清晰的看到数字钟系统设计中各功能模块间连接关系。系统时钟50MHZ经过分频后产生1秒的时钟信号,1秒的时钟信号作为秒计数模块的输入信号,秒计数模块产生的进位信号作为分计数模块的输入信号,分计数模块的进位信号作为时计数模块的输入信号。秒计数模块、分计数模块、时计数模块的计数输出分别送到显示模块。由于设计中要使用按键进行调节时间,而按键的动作过程中存在产生得脉冲的不稳定问题,所以就牵扯到按键去抖动的问题,对此系统中设置了按键去抖动模块,按键去抖动模块产生稳定的脉冲信号送入按键控制模块,按键控制模块根据按键的动作对秒、分、时进行调节。

EDA数字钟设计

摘要:应用VHDL语言编程,进行了多功能数字钟的设计,并在MAX PLUSⅡ环境下通过了编译、仿真、调试。 关键词:VHDL;EDA;数字钟;仿真图 0.引言 随着科学技术的迅猛发展,电子工业界经历了巨大的飞跃。集成电路的设计正朝着速度快、性能高、容量大、体积小和微功耗的方向发展。基于这种情况,可编程逻辑器件的出现和发展大大改变了传统的系统设计方法。可编程逻辑器件和相应的设计技术体现在三个主要方面:一是可编程逻辑器件的芯片技术;二是适用于可逻辑编程器件的硬件编程技术,三是可编程逻辑器件设计的EDA开发工具,它主要用来进行可编程逻辑器件应用的具体实现。在本实验中采用了集成度较高的FPGA 可编程逻辑器件, 选用了VHDL硬件描述语言和MAX + p lusⅡ开发软件。VHDL硬件描述语言在电子设计自动化( EDA)中扮演着重要的角色。由于采用了具有多层次描述系统硬件功能的能力的“自顶向下”( Top - Down)和基于库(L ibrary - Based)的全新设计方法,它使设计师们摆脱了大量的辅助设计工作,而把精力集中于创造性的方案与概念构思上,用新的思路来发掘硬件设备的潜力,从而极大地提高了设计效率,缩短 了产品的研制周期。MAX + p lusⅡ是集成了编辑器、仿真工具、检查/分析工具和优化/综合工具的这些所有开发工具的一种集成的开发环境,通过该开发环境能够很方便的检验设计的仿真结果以及建立起与可编程逻辑器件的管脚之间对应的关系。 1. EDA简介 20世纪90年代,国际上电子和计算机技术较先进的国家,一直在积极探索新的电子电路设计方法,并在设计方法、工具等方面进行了彻底的变革,取得了巨大成功。在电子技术设计领域,可编程逻辑器件(如CPLD、FPGA)的应用,已得到广泛的普及,这些器件为数字系统的设计带来了极大的灵活性。这些器件可以通过软件编程而对其硬件结构和工作方式进行重构,从而使得硬件的设计可以如同软件设计那样方便快捷。这一切极大地改变了传统的数字系统设计方法、设计过程和设计观念,促进了EDA技术的迅速发展。 EDA是电子设计自动化(Electronic Design Automation)的缩写,在20世纪90年代初从计算机辅助设计(CAD)、计算机辅助制造(CAM)、计算机辅助测试(CAT)和计算机辅助工程(CAE)的概念发展而来的。EDA技术就是以计算机为工具,设计者在EDA软件平台上,用硬件描述语言HDL 完成设计文件,然后由计算机自动地完成逻辑编译、化简、分割、综合、优化、布局、布线和仿真,直至对于特定目标芯片的适配编译、逻辑映射和编程下载等工作。EDA技术的出现,极大地提高了电路设计的效率和可操作性,减轻了设计者的劳动强度。 这些器件可以通过软件编程而对其硬件结构和工作方式进行重构,从而使得硬件的设计可以如同软件设计那样方便快捷。这一切极大地改变了

数字电子钟设计说明..

数字电子钟课程设计 一、设计任务与要求 (1)设计一个能显示时、分、秒的数字电子钟,显示时间从00: 00: 00到23: 59: 59; (2)设计的电路包括产生时钟信号,时、分、秒的计时电路和显示电路(3)电 路能实现校正 (5)整点报时 二、单元电路设计与参数计算 1. 振荡器 石英晶体振荡器的特点是振荡频率准确、电路结构简单、频率易调整。它还具有压电效应,在晶体某一方向加一电场,则在与此垂直的方向产生机械振动,有 了机械振动,就会在相应的垂直面上产生电场,从而机械振动和电场互为因果,这种循环过程一直持续到晶体的机械强度限止时,才达到最后稳定。这用压电谐振的频率即为晶体振荡器的固有频率。 2. 分频器 由于振荡器产生的频率很高,要得到秒脉冲需要分频,本实验采用一片74LS90 和两片74LS160实现,得到需要的秒脉冲信号。

3. 计数器 秒脉冲信号经过计数器,分别得到“秒”个位、十位、“分”个位、十位以及 “时”个位、十位的计时。“秒” “分”计数器为六十进制,小时为二十四进制。 (1)六十进制计数 由分频器来的秒脉冲信号,首先送到“秒”计数器进行累加计数,秒计数器应完 成一分钟之内秒数目的累加,并达到 60秒时产生一个进位信号。本作品选用一 片74LS161和一片74LS160采取同步置数的方式组成六十进制的计数器。 (2)二十四进制计数 “24翻1”小时计数器按照“ 00— 01—02,, 22—23— 00—01”规律计数。与生 活中计数规律相同。二十四进制计数同样选用74LS161和74LS160计数芯片。但 清零方式采用的是异步清零方式。 MMgM 加 EHagij Z 1 进位信号 脉冲

基于VHDL语言的数字时钟设计

课程:CPLD与FPGA设计及应用 实验:基于VHDL语言的数字时钟设计 学号:092030030 姓名:朱峰 专业:信号与信息处理 学院:电子与信息学院 2011年12月

基于VHDL语言的数字时钟设计一:主要功能 1:具有时、分、秒计数显示功能,以24小时循环计时。 2:具有日期和星期显示功能。 3:具有秒表功能 4:具有调节日期,星期,小时,分钟,清零的功能。 5:具有定时和闹铃的功能。 二:结构框图 三:RTL图

四:功能实现 4.1分频模块设计 本设计使用的输入时钟信号为50Mhz,经过分频产生两路时钟信号,其中一路为微秒计数时钟信号,一路为动态扫描时钟信号。同时模块有一输入控制信号,其功能是停止微秒计数时钟信号,以实现定时的功能。 输入:clk_in 为50Mhz,setstop为微秒计数时能信号 输出:clk_out1为1/60hz clk_out2为1khz 源代码如下: library ieee; use ieee.std_logic_1164.all; entity div is port(clk_in,setstop: in std_logic; clk_out1,clk_out2: out std_logic); end entity div; architecture fun of div is constant a:integer:=8333333; constant b:integer:=49999; signal c:integer range 0 to a; signal d:integer range 0 to b; begin process(clk_in,setstop) begin if(clk_in 'event and clk_in='1') then if(( c+7500000)

基于单片机的简易时钟设计(毕业设计)

广西理工职业技术学院 毕业设计(论文)说明书题目:简易电子时钟设计 系别:电气工程系 专业班级:11机电2 姓名:黄武锦 学号:20112323 指导教师:黎有好 二〇一三年七月二十四日

目录 1.概论 (2) 2.整体设计思路 (3) 2.1硬件各部分所能完成的功能 (4) 2.2系统工作原理 (5) 2.3时钟各功能分析及图解 (5) 2.4.1电路各功能图解分析 (5) 2.4.2电路功能使用说明 (8) 3. 软件设计思路 (9) 3.1 主程序模块 (9) 3.2 数码管动态扫描模块 (10) 3.3 当前时间计时模块 (10) 3.4 闹钟输入输出模块 (11) 3.5 当前时间调整模块 (13) 3.6复位模块 (14) 4.系统的调试和性能分析 (15) 4.1系统的调试方法 (15) 4.1.1输入按键的调试 (15) 4.1.2复位电路的调试 (15) 4.1.3显示电路的调试 (15) 4.1.4整个系统的联调 (15) 4.2心得体会 (16) 参考文献 (16) 附录 (17) 附录A 系统原理图 (17) 附录B 程序源代码 (18) 电气信息学院课程设计评分表 (29)

1.概论 单片机系统作为一种典型的嵌入式系统,其系统设计包括硬件电路设计和软件编程设计两个方面,其调试过程一般分为软件调试、硬件测试、系统调试3个过程。如果采用单片机系统的虚拟仿真软件——Proteus,则不用制作具体的电路板也能够完成以上工作。数字钟是采用数字电路实现对时,分,秒,数字显示的计时装置,由于数字集成电路的发展和石英晶体振荡器的广泛应用,使得数字钟的精度,远远超过老式钟表,钟表的数字化给人们生产生活带来了极大的方便,而且大大地扩展了钟表的报时功能。数字钟已成为人们日常生活中的必需品,广泛应用于家庭、车站、码头、剧院、办公室等场所,给人们的生活、学习、工作带来极大的方便[4]。不仅如此,在现代化的进程中,也离不开电子钟的相关功能和原理,比如机械手的控制、家务的自动化、定时自动报警、按时自动打铃、时间程序自动控制、定时广播、自动起闭路灯、定时开关烘箱、通断动力设备、甚至各种定时电气的自动启用等,所有这些,都是以钟表数字化为基础的。而且是控制的核心部分。因此,研究数字钟及扩大其应用,有着非常现实的意义。 电子钟在工业控制和日常生活中是很重要的,它不仅可以用于计时、提醒又可用于对机器的控制,在自动化的过程中必然有电子钟的参与,因此电子钟的应用会越来越广泛。而且向着精确、低功耗、多功能发展。基于单片机设计的数字钟精确度较高,因为在程序的执行过程中,任何指令都不影响定时器的正常计数,即便程序很长也不会影响中断的时间。从而,使数字钟的精度仅仅取决于单片机的产生机器周期电路和定时器硬件电路的精确度。另外,程序较为简洁,具有可靠性和较好的可读性。如果我们想将它应用于实时控制之中,只要对上述程序和硬件电路稍加修改,便可以得到实时控制的实用系统,从而应用到实际工作与生产中去。 数字电子钟的设计方法有多种,例如,可用中小规模集成电路组成电子钟,也可以利用专用的电子钟芯片配以显示电路及其所需要的外围电路组成电子钟还可以利用单片机来实现电子钟等等。这些方法都各有特点,其中,利用单片机实现的电子钟具有编程灵活,便于功能扩充,精确度高等特点。

相关文档