基于DE0的多功能数字钟设计方案(共21页).docx
《基于DE0的多功能数字钟设计方案(共21页).docx》由会员分享,可在线阅读,更多相关《基于DE0的多功能数字钟设计方案(共21页).docx(21页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、精选优质文档-倾情为你奉上 基于DE0的数字钟设计方案1.方案内容 1.完成基本功能:以数字形式显示时、分、秒的时间;小时计数器为同步24进制 手动校时、校分 2.扩展功能:任意时刻闹钟; 小时显示(12/24)切换电路 3.扩展仿电台报时,秒表高级功能 4.添加年月日,显示日期,手动较准日期 5.整体调试和测试2设计原理图 闹钟原理图秒表原理图 显示切换模块 年月日处理流程图开关分配3.代码分析主程序(顶层模块)module clock(led0,led1,led2,led3,dot,led_sec,_50mhzin,alarm,sethrkey,setminkey, ctrbell,adj
2、minkey,adjhrkey,adjy,adjm,adjd,button,ncr,start_stpw,pause,h12,hstop,hour12);/*定义各输入输出变量 led0,led1,led2,led3:四位七段数码管显示的数字; dot:隔开小时与分钟的点,没清零是总是亮 led_sec:八个发光二极管显示的两位BCD码数字 button:模式切换按钮 alarm:控制蜂鸣器发声的信号 setthrkey,setminkey,adjminkey,adjhrkey,dady,adjm,adjd:设定闹钟,校时,校日期 ctrlbell:闹钟响铃使能 ncr:清零,初始化 star
3、t_stpw:秒表启停 pause:秒表暂停 h12:12/24小时制切换 hstop:秒表状态显示,分配第九个led灯 hour12:12小时制显示,分配第十个led灯,灯亮时,表示小时为十二小时制*/ input _50mhzin; input sethrkey,setminkey,ctrbell; input adjminkey,adjhrkey; input adjy,adjm,adjd; input button,h12; input ncr,start_stpw,pause; output 6:0led0,led1,led2,led3;wire 7:0 led_a,led_b; w
4、ire _1hz,_500hz,_1khz,_5hz; wire 7:0 hour,minute,second,set_hr,set_min,stpw_sec,stpw_dsec,year,month,day; /分别为小时,分钟,秒,闹钟的小时、分钟,秒表的秒、分秒 ,年,月,日。 wire alarm_clock,alarm_r; /alarm_clock:闹钟信号,alarm:仿电台报时信号 output alarm; output dot,hstop,hour12; wire dot,h12,hstop; output 7:0led_sec; assign dot=ncr; assig
5、n hstop=start_stpw; assign hour12=h12; /以上三个状态控制显示变量 divided_frequency u0(_1hz,_500hz,ncr,_50mhzin);/调用分频模块,将50Mhz分为1hz,500hz top_clock u1(hour,minute,second,_1hz,ncr,adjminkey,adjhrkey,_50mhzin); /顶层时钟模块,控制时钟显示与校时bell u2(alarm_clock,set_hr,set_min,hour,minute,second,sethrkey,setminkey,_50mhzin, _50
6、0hz,_1hz,ctrbell);/闹钟模块:设定闹钟,控制闹铃 divfreq50M_1Khz u3(_1khz,ncr,_50mhzin);/分频模块,50Mhz分成1Khz,用在驱动蜂鸣器 ring u4(alarm_r,minute,second,_1khz,_500hz);/仿电台报时模块 assign alarm=alarm_clock|alarm_r;/蜂鸣器驱动信号 SEG7_LUT u8(led_a7:4,led3); SEG7_LUT u9(led_a3:0,led2); SEG7_LUT u10(led_b7:4,led1); SEG7_LUT u11(led_b3:0
7、,led0);/以上四行是led数码管显示模块 display u12(_500hz,_5hz,ncr,led_a,led_b,led_sec,hour,minute,second,set_hr,set_min,stpw_sec,stpw_dsec,year,month,day ,button,h12);/显示切换模块,模式控制 stopwatch u13(stpw_sec,stpw_dsec,start_stpw,pause,_50mhzin);/秒表模块 date u14(year,month,day,ncr,hour,minute,second,_5hz,adjy,adjm,adjd);
8、/年月日模块 divfreq50M_5hz u15(_5hz,ncr,_50mhzin);/50Mhz到5hz分频模块,用于校时脉冲endmodule顶层时钟模块module top_clock(hour,minute,second,_1hz,ncr,adjminkey,adjhrkey,_50mhzin); input _1hz,_50mhzin,ncr,adjminkey,adjhrkey; output 7:0 hour,minute,second; wire 7:0 hour,minute,second;/时、分、秒每个用八位二进制表示两位BCD码 supply1 vdd; /高电平,
9、是使能一直打开 wire mincp,hrcp,_5hz;/_5hz用于快速校时 divfreq50M_5hz ut0(_5hz,ncr,_50mhzin); counter60 ut1(second,ncr,vdd,_1hz); counter60 ut2(minute,ncr,vdd,mincp);/秒和分使用60进制 counter24 ut3(hour7:4,hour3:0,ncr,vdd,hrcp);/时钟为24进制(默认) assign mincp=adjminkey?_5hz:(second=8h59); assign hrcp=adjhrkey?_5hz:(minute,sec
10、ond=16h5959);/进位或校时使能控制endmodule闹钟模块module bell(alarm_clock,set_hr,set_min,hour,minute,second, sethrkey,setminkey,_50mhzin,_500hz,_1hz,ctrlbell); output alarm_clock;/蜂鸣器驱动信号 output 7:0 set_hr,set_min; wire 7:0 set_hr,set_min;/闹钟的时和分 wire alarm_clock; input _50mhzin,_500hz,_1hz; input sethrkey,setmin
11、key;/设定闹钟时分的按钮 input ctrlbell; input 7:0 hour,minute,second; supply1 vdd;/高电平是闹钟使能一直有效 wire hrh_equ,hrl_equ,minh_equ,minl_equ;/中间变量,判断闹钟时刻是否已到 wire time_equ,_5hz;/闹钟时刻到来的标志 divfreq50M_5hz su0(_5hz,1,_50mhzin); counter60 su1(set_min,vdd,setminkey,_5hz);/设定闹钟分 counter24 su2(set_hr7:4,set_hr3:0,vdd,set
12、hrkey,_5hz);/设定闹钟时 compare su3(hrh_equ,set_hr7:4,hour7:4); compare su4(hrl_equ,set_hr3:0,hour3:0); compare su5(minh_equ,set_min7:4,minute7:4); compare su6(minl_equ,set_min3:0,minute3:0);/四位数值都等是,表示闹钟时刻到 assign time_equ=(hrh_equ&hrl_equ&minh_equ&minl_equ); assign alarm_clock=ctrlbell?/闹钟时刻到,控制蜂鸣器发声(间
13、隔1秒,频率500hz),否则继续 (time_equ&(second0=1b1)&_500hz)|(second0=1b0)&_50mhzin):1b0; Endmodule秒表模块module stopwatch(stopwatch_sec,stopwatch_dsec,ncr,pause,_50mhz); output 7:0 stopwatch_sec,stopwatch_dsec;/秒表的秒和分秒,BCD码表示 wire 7:0 stopwacth_sec,stopwatch_dsec; input ncr,pause,_50mhz; wire _100hz,eny; assign
14、eny=(stopwatch_dsec=8h99);/分秒想秒进位使能 divfreq50M_100hz stpw1(_100hz,ncr,_50mhz); counter100 stwp2(stopwatch_dsec,ncr,pause,_100hz); counter100 stwp3(stopwatch_sec,ncr,2b1,eny);/两个100进制计数器,最多可计100秒 endmodule日历模块/*由于只有四位数码管,将数码管分配给月日显示,而年采用两位表示,范围为(20002099年),取后两位,用BCD码表示,再八位LED二极管上显示*/module date(year,
15、month,day,ncr,hour,minute,second,_5hz,adjy,adjm,adjd); input ncr,_5hz;/5hz用于快速校日历 input 7:0 hour,minute,second; input adjy,adjm,adjd;/校准按钮 output 7:0 year,month,day; wire 7:0 year,month,day; wire ena,cpy,en,enm;/进位使能控制 assign en=(adjd=1b1)?_5hz:(hour=8h00)&(minute=8h00)&(second=8h00); /当校日有效时,5hz的的脉
16、冲使日快速调整.其它有零点零分零秒向日进位 assign ena=(month=8h01)|(month=8h03)|(month=8h05)|(month=8h07)| (month=8h08)|(month=8h10)|(month=8h12)&(day=8h31)| (month=8h04)|(month=8h06)|(month=8h09)|(month=8h11)&(day=8h30)| (year%4=0)&(month=8h02)&(day=8h29)| (year%4!=0)&(month=8h02)&(day=8h28);/判断最后一日 assign enm=(adjm=1b
17、1)?_5hz:(month=8h01)|(month=8h03)|(month=8h05)|(month=8h07)| (month=8h08)|(month=8h10)|(month=8h12)&(day=8h31)| (month=8h04)|(month=8h06)|(month=8h09)|(month=8h11)&(day=8h30)| (year%4=0)&(month=8h02)&(day=8h29)| (year%4!=0)&(month=8h02)&(day=8h28) &(hour=8h00)&(minute=8h00)&(second=8h00); /月时钟脉冲 ass
18、ign cpy=(adjy=1b1)?_5hz:(month0);/年时钟脉冲 day uc0(day,ncr,1,ena,en);/日计数模块 month uc1(month7:4,month3:0,ncr,1,enm);/月计数模块 year uc2(year7:4,year3:0,ncr,1,cpy);/年计数模块 endmodule module day(day,ncr,en,eny,cp); input cp,ncr,en,eny; output 7:0day; reg 7:0day; always(negedge cp or negedge ncr) begin if (ncr)
19、day=8h00; else if(en) day2d3)|(day3:04d9)|(day7:4=2d3)&(day3:0=2d1) begin day=8h01; end/如果超越31,则清到1日 else if (eny)/eny/判断哪一天为一个月的最后一天 begin day=8h01; end/若为最后一天,则清到第一天 else if(day3:0=4d9) begin day7:4=day7:4+1b1; day3:0=1b0; end else begin day3:0=day3:0+1b1; day7:4=day7:4; end endendmodulemodule mon
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 DE0 多功能 数字 设计方案 21
限制150内