《数字电路课程设计-基于DE2的数字钟设计报告(共27页).doc》由会员分享,可在线阅读,更多相关《数字电路课程设计-基于DE2的数字钟设计报告(共27页).doc(27页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、精选优质文档-倾情为你奉上题目:数字钟1 设计要求该数字钟具有如下六种功能:(1)具有时、分、秒的十进制数字显示(小时从0023)的计时器(具有清零功能和设置起始时间功能);(2)具有手动校时、校分、校秒的功能,利用DE2 Key键,分别对每一个数码管进行校时(校正模式下,时钟处于停滞状态),校时之后的时间可以通过开关赋给24小时计数器模块和倒计时模块;(3)定时与闹钟功能,能在设定的时间发出闹铃声(用开发板上红色的LED灯全亮来表示),程序中实现闹铃30秒;(4)能进行零点报时,要求发出仿中央人民广播电台的整点报时信号,即从23时59分50秒起,每隔2秒钟发出一次低音“嘟”的信号,连续5次,
2、最后一次要求高音“嘀”的信号,此信号结束即达到零点(用开发板上的绿色LED灯亮来表示);(5)设计一个秒表,显示1%秒、60秒、手动停止,手动清零;(6)设计一个倒计时,显示小时、分钟、秒、%1秒,可清零,可设置起始时间。2 设计分析及系统方案设计系统总共有5个状态,分别对应设计要求中的(1)24小时计数器(2)时钟校准(3)闹铃(4)倒计时(5)秒表程序开始利用50MHz的时钟分别构造1Hz的时钟和100Hz的时钟。先用50MHz时钟构造模计数器,用作分频产生100HZ信号,然后用100HZ信号构造模100计数器,用作分频产生1HZ信号,从而构造出周期是1秒和0.01秒的时钟。(1) 时间显
3、示此部分是用1HZ的时钟驱动秒的个位,然后通过进位关系分别带动其余5位时间,从而完成时间显示功能。当清零位置0时,时间一直显示为0。(2) 手动校时此部分通过三个DE2的KEY按键来实现。第一个是状态转换按键,通过它来将状态转换到校时状态;第二个是校准位置选择按键,通过它来选择此时校准哪一位;第三个是对所选位置进行加一的按键。设置好时间之后可以通过两个开关分别将设置好的时间送到正常显示模块和倒计时模块。(3) 闹铃功能此部分通过和手动校时部分相同的操作过程来设置闹铃,系统提供一个可以打开和关闭闹铃的开关。闹铃部分的信号是一个单独的信号,对该信号的设置并不影响时钟的正常运行。当闹铃的小时、分钟和
4、秒的信号分别和时钟的小时、分钟和秒的信号对应相等时,闹铃启动,进行30秒的闹铃提醒。(4) 零点报时在正常显示24小时的状态中,当时间信号运行到23:59:50时,开始零点报时,程序中以驱动绿色LED灯亮来代表。(5) 秒表功能此部分由100HZ的时钟驱动%1秒位,通过进位关系分别带动其余7位时间完成计时功能。秒表的信号是一个单独的信号,使用秒表并不影响时钟的正常运行。对秒表可以进行清零和暂停操作,通过两个开关来实现。(6)倒计时功能此部分就是24小时正常显示模块的逆过程。用100HZ的时钟驱动%1秒的个位,然后通过退位关系分别带动其余7位完成倒计时功能。倒计时的信号为独立的信号,使用倒计时并
5、不影响时钟的正常运行。倒计时设有清零位,用开关控制。数字钟原理框图如下:3系统以及模块硬件电路设计(1)输入信号clk0:系统时钟(50MHZ)state:状态转换按键positionselect:位置选择按键jiayi:校准、设闹钟时对所选的位进行加一的按键queding:校时之后的确定开关queding1:设置倒计时之后再确定开关kainaozhong:闹钟开关控制qingling: 秒表清零开关zanting:秒表暂停开关qingling1: 正常显示的清零开关qingling2:倒计时的清零开关(2)输出信号输出到数码管显示:bighour:out std_logic_vector(6
6、 downto 0); -时针十位 smallhour:out std_logic_vector(6 downto 0); -时针个位 bigminute:out std_logic_vector(6 downto 0); -分针十位 smallminute:out std_logic_vector(6 downto 0); -分针个位 bigsecond:out std_logic_vector(6 downto 0); -秒针十位 smallsecond:out std_logic_vector(6 downto 0); -秒针个位 bigpercentsecond:out std_log
7、ic_vector(6 downto 0); -%1秒十位 smallpercentsecond:out std_logic_vector(6 downto 0); -%1秒个位 lednaozhong :LED代表闹铃输出baoshi:零点报时指示灯1baoshi1:零点报时指示灯2开发系统模式以及管脚定义如下:4 系统的VHDL设计-定义库 - library ieee; use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;-定义实体 - entity homework is port( - -输入信号 - -1/系统时钟
8、 clk0:in std_logic; -2/状态转换按键 state:in std_logic; -3/校准时进行位置选择 的按键 positionselect:in std_logic; -4/校准、设闹钟时对所选的位进行加一的按键 jiayi:in std_logic; -5/校时之后确定开关(赋给正常显示模块) queding:in std_logic; -6/设置倒计时之后再确定开关 queding1:in std_logic; -7/闹钟开关控制 kainaozhong:in std_logic; -8/秒表清零开关 qingling:in std_logic; -9/秒表暂停开关
9、 zanting:in std_logic; -10/正常显示的清零开关 qingling1:in std_logic; -11/倒计时的清零开关 qingling2:in std_logic; - -输出信号 - - -输出到数码管显示 - bighour:out std_logic_vector(6 downto 0); -时针十位 smallhour:out std_logic_vector(6 downto 0); -时针个位 bigminute:out std_logic_vector(6 downto 0); -分针十位 smallminute:out std_logic_vect
10、or(6 downto 0); -分针个位 bigsecond:out std_logic_vector(6 downto 0); -秒针十位 smallsecond:out std_logic_vector(6 downto 0); -秒针个位 bigpercentsecond:out std_logic_vector(6 downto 0); -%1秒十位 smallpercentsecond:out std_logic_vector(6 downto 0); -%1秒个位 - -LED代表闹铃输出 lednaozhong:out std_logic_vector(17 downto 0)
11、; -零点报时指示灯1 baoshi:out std_logic_vector(7 downto 0); -零点报时指示灯2 baoshi1:out std_logic );end;-定义结构体 - architecture shuzizhong of homework is -产生100HZ信号时的计数器 signal cnt0:integer range 0 to ; -产生1HZ信号时的计数器 signal cnt1:integer range 0 to 99;-100HZ信号 signal clk1:std_logic;-1HZ信号 signal clk2:std_logic;- 送数
12、码管显示的时针,分针,秒针,%1秒信号 - signal bh:std_logic_vector(3 downto 0); -时针十位 signal sh:std_logic_vector(3 downto 0); -时针个位 signal bm:std_logic_vector(3 downto 0); -分针十位 signal sm:std_logic_vector(3 downto 0); -分针个位 signal bs:std_logic_vector(3 downto 0); -秒针十位 signal ss:std_logic_vector(3 downto 0); -秒针个位 si
13、gnal bps:std_logic_vector(3 downto 0); -%1秒十位 signal sps:std_logic_vector(3 downto 0); -%1秒个位 -状态为000时的时钟信号 ( 正常显示) - signal bh0:std_logic_vector(3 downto 0); -时针十位 signal sh0:std_logic_vector(3 downto 0); -时针个位 signal bm0:std_logic_vector(3 downto 0); -分针十位 signal sm0:std_logic_vector(3 downto 0);
14、-分针个位 signal bs0:std_logic_vector(3 downto 0); -秒针十位 signal ss0:std_logic_vector(3 downto 0); -秒针个位 - -状态为001时的时钟信号 ( 校准时) - signal bh1:std_logic_vector(3 downto 0); -时针十位 signal sh1:std_logic_vector(3 downto 0); -时针个位 signal bm1:std_logic_vector(3 downto 0); -分针十位 signal sm1:std_logic_vector(3 down
15、to 0); -分针个位 signal bs1:std_logic_vector(3 downto 0); -秒针十位 signal ss1:std_logic_vector(3 downto 0); -秒针个位 -状态为010时的时钟信号 ( 设置闹钟时) - signal bh2:std_logic_vector(3 downto 0); -时针十位 signal sh2:std_logic_vector(3 downto 0); -时针个位 signal bm2:std_logic_vector(3 downto 0); -分针十位 signal sm2:std_logic_vector
16、(3 downto 0); -分针个位 signal bs2:std_logic_vector(3 downto 0); -秒针十位 signal ss2:std_logic_vector(3 downto 0); -秒针个位 -状态为011时的时钟信号 ( 设置倒计时时 ) - signal bh3:std_logic_vector(3 downto 0); -时针十位 signal sh3:std_logic_vector(3 downto 0); -时针个位 signal bm3:std_logic_vector(3 downto 0); -分针十位 signal sm3:std_log
17、ic_vector(3 downto 0); -分针个位 signal bs3:std_logic_vector(3 downto 0); -秒针十位 signal ss3:std_logic_vector(3 downto 0); -秒针个位 signal bps3:std_logic_vector(3 downto 0); -%1秒十位 signal sps3:std_logic_vector(3 downto 0); -%1秒个位 -状态为100时的时钟信号 ( 设置秒表 ) - signal bh4:std_logic_vector(3 downto 0); -时针十位 signal
18、sh4:std_logic_vector(3 downto 0); -时针个位 signal bm4:std_logic_vector(3 downto 0); -分针十位 signal sm4:std_logic_vector(3 downto 0); -分针个位 signal bs4:std_logic_vector(3 downto 0); -秒针十位 signal ss4:std_logic_vector(3 downto 0); -秒针个位 signal bps4:std_logic_vector(3 downto 0); -%1秒十位 signal sps4:std_logic_v
19、ector(3 downto 0); -%1秒个位 -表示状态转换时的信号 - signal statesignal:std_logic_vector(2 downto 0); -表示位置选择时的信号 - signal positionselectsignal:std_logic_vector(2 downto 0); - -程序开始 - begin-状态转换 -statesignal=000-正常计时 -statesignal=001-校准 -statesignal=010-闹钟 -statesignal=011-倒计时 -statesignal=100-秒表 -process(state)
20、 begin if(stateevent and state=1)then if(statesignal=100)then statesignal=000; else statesignal秒个位 -positionselectsignal=100-秒十位 -positionselectsignal=011-分个位 -positionselectsignal=010-分十位 -positionselectsignal=001-时个位 -positionselectsignal=000-时十位 - process(positionselect) begin if( positionselecte
21、vent and positionselect=1)then if(positionselectsignal=101)then positionselectsignal=000; else positionselectsignal=positionselectsignal+1; end if; end if; end process;-产生100HZ信号 -process(clk0)beginif(clk0event and clk0=1)then if cnt0= then cnt0=0; clk1=1; else cnt0=cnt0+1; clk1=0; end if;end if;end
22、 process;-产生1HZ信号 -process(clk1)beginif(clk1event and clk1=1)then if cnt1=99 then cnt1=0; clk2=1; else cnt1=cnt1+1; clk2=0; end if;end if;end process;- -正常显示24小时计时 - process(clk2,statesignal,queding,ss1,bs1,sm1,bm1,sh1,bh1)beginif(statesignal=000) then if(qingling1=0)then ss0=0000; bs0=0000; sm0=000
23、0; bm0=0000; sh0=0000; bh0=0000; else if(clk2event and clk2=1)then if(ss0=9)then ss0=0000; if(bs0=5)then bs0=0000; if(sm0=9)then sm0=0000; if(bm0=5)then bm0=0000; if(bh02)then if(sh0=9)then sh0=0000; bh0=bh0+1; else sh0=sh0+1; end if; else if(sh0=3)then sh0=0000; bh0=0000; else sh0=sh0+1; end if; end if; else bm0=bm0+1; end if; else sm0=sm0+1; end if; else bs0=bs0+1; end if;