基于de0的多功能数字钟设计方案含代码

上传人:suns****4568 文档编号:90483499 上传时间:2019-06-12 格式:DOCX 页数:21 大小:2.32MB
返回 下载 相关 举报
基于de0的多功能数字钟设计方案含代码_第1页
第1页 / 共21页
基于de0的多功能数字钟设计方案含代码_第2页
第2页 / 共21页
基于de0的多功能数字钟设计方案含代码_第3页
第3页 / 共21页
基于de0的多功能数字钟设计方案含代码_第4页
第4页 / 共21页
基于de0的多功能数字钟设计方案含代码_第5页
第5页 / 共21页
点击查看更多>>
资源描述

《基于de0的多功能数字钟设计方案含代码》由会员分享,可在线阅读,更多相关《基于de0的多功能数字钟设计方案含代码(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,adjminkey,adjhrk

2、ey,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:清零,初始化 start_stpw:秒表启停 p

3、ause:秒表暂停 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; wire _1hz,_500

4、hz,_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; assign hstop=start

5、_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, _500hz,_1hz,ctrb

6、ell);/闹钟模块:设定闹钟,控制闹铃 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,led0);/以上四行是

7、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);/年月日模块 divfre

8、q50M_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; /高电平,是使能一直打开 wire

9、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,second=16h5959);

10、/进位或校时使能控制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,setminkey;/设定闹钟时分的按

11、钮 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,sethrkey,_5hz);/

12、设定闹钟时 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?/闹钟时刻到,控制蜂鸣器发声(间隔1秒,频率500hz),

13、否则继续 (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 eny=(stopwatc

14、h_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,month,day,ncr,hour,minute,second,_5hz,adjy,adjm,adjd); input ncr,_5hz;/5hz用于快速校日历 input 7:0

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 大杂烩/其它

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号