本科实验报告题目:数字钟课程名称:学院(系):专业:班级:学生姓名:学号:完成日期:成绩:2011年12月12日题目:数字钟1设计要求系统功能:1.计时,数码管显示的‘时’、‘分’、‘秒’的十进制数字显示(小时从00~23)计时器2.星期,lcd1602显示星期:MON/TUE/WEN/THU/FRI/SAT/SUN3.校准,具有手动校星期、校时、校分、校秒的功能。4.秒表,显示1%秒、60秒,60分,能手动开始和停止5.闹钟,能在设定的时间发出闹铃声。6.整点报时,即从59分55秒起,每隔1秒钟发出一次低音“嘟”的信号,连续2次,最后一次为高音“嘀”的信号,此信号结束即达到整点,发音的同时伴有led闪烁。7.倒计时,能在设定的时间开始倒计时,至0时0分0秒停止2设计分析及系统方案设计一.设计分析:依据功能要求,程序分为:1.计时与校准模块①计时:秒钟计数到59后清零并向分钟进一位,分钟计数到59后清零并向时钟进一位,时钟计数到23后清零并向星期进一位,星期按照MON/TUE/WEN/THU/FRI/SAT/SUN循环变化②校准:使用k1/k0两个功能键,k1切换要改变的位,k0校正2.数码管显示模块①显示译码②利用k3切换显示内容,根据不同模式关闭用不到的数码管。3.lcd显示模块①定义七个常量数组,数组内容分别为MON/TUE/WEN/THU/FRI/SAT/SUN的ASCⅡ码。②液晶初始化③液晶显示,将相应字母的ASCⅡ码写入ddram的相应地址中,由cnt1值决定地址,cnt1由0到2循环,因此用到lcd开始的前三个位显示字符。由星期(m)值决定写入内容,m值不同,cnt1扫描显示的就是不同的数组。4.闹钟与整点报时模块①整点报时:利用分频得到1k和0.5k的频率,当分钟位到达‘59’,秒钟位为‘55’、‘57’时,将0.5k频率接到输出引脚,秒钟位为‘59’时,将1k频率接到输出引脚。②闹钟:到达闹钟时间,将1k频率接到输出引脚,时长3秒③Led闪烁:将led输出引脚连接至频率输出引脚即可(设为inout)5.秒表模块①开启显示1%秒、60秒、60分的数码管。显示小时的数码管关闭②手动开始和停止,停止时显示计时终止时间6.倒计时模块①显示小时、分钟,秒。显示毫秒的数码管关闭。②可以利用k2切换倒计时与设置倒计时时间状态,利用k1与k0设置倒计时时间。③至0时0分0秒倒计时终止,此时自动切换至时间设置状态。二.系统总体结果框图:3系统以及模块硬件电路设计数码管(图中只有1个,共用8个):数码管共阴极,故输入低电平管亮开关(4个全用):按键按下时为低电平50MHZ计时与校准闹钟与整点报时秒表倒计时计时校准闹钟整点报时设置闹钟时间时间到闹钟响Key1切换校准位Key0校准数码管显示LCD显示星期Key3切换模式Key2切换状态Key3切换状态分频器发光二极管(全部使用):引脚为高电平时led亮DE2开发板上使用的元件的管脚编号:接口名称类型引脚号说明bsBidirPIN_K19蜂鸣器clkInputPIN_N250mhz时钟k0InputPIN_G26控制按键k1InputPIN_N23k2InputPIN_P23k3InputPIN_W26lcd_blonOutputPIN_K2lcd背光灯LCD_Data[0]OutputPIN_J1lcd数据输入LCD_Data[1]OutputPIN_J2LCD_Data[2]OutputPIN_H1LCD_Data[3]OutputPIN_H2LCD_Data[4]OutputPIN_J4LCD_Data[5]OutputPIN_J3LCD_Data[6]OutputPIN_H4LCD_Data[7]OutputPIN_H3LCD_ENOutputPIN_K3lcd使能lcd_onOutputPIN_L4lcd开启lcd_rsOutputPIN_K1寄存器选择信号ResetinputPIN_N25lcd复位LCD_RWOutputPIN_K4液晶读写信号led[0]OutputPIN_AE23整点报时及闹钟显示led[1]OutputPIN_AF23led[2]OutputPIN_AB21led[3]OutputPIN_AC22led[4]OutputPIN_AD22led[5]OutputPIN_AD23led[6]OutputPIN_AD21led[7]OutputPIN_AC21led[8]OutputPIN_AA14led[9]OutputPIN_Y13led[10]OutputPIN_AA13led[11]OutputPIN_AC14led[12]OutputPIN_AD15led[13]OutputPIN_AE15led[14]OutputPIN_AF13led[15]OutputPIN_AE13led[16]OutputPIN_AE12led[17]OutputPIN_AD12led[18]OutputPIN_AE22led[19]OutputPIN_AF22led[20]OutputPIN_W19led[21]OutputPIN_V18led[22]OutputPIN_U18led[23]OutputPIN_U17led[24]OutputPIN_AA20led[25]OutputPIN_Y18mbp[0]OutputPIN_V20秒表高位mbp[1]OutputPIN_V21mbp[2]OutputPIN_W21mbp[3]OutputPIN_Y22mbp[4]OutputPIN_AA24mbp[5]OutputPIN_AA23mbp[6]OutputPIN_AB24mbq[0]OutputPIN_AF10秒表低位mbq[1]OutputPIN_AB12mbq[2]OutputPIN_AC12mbq[3]OutputPIN_AD11mbq[4]OutputPIN_AE11mbq[5]OutputPIN_V14mbq[6]OutputPIN_V13mp[0]OutputPIN_T2分高位mp[1]OutputPIN_P6mp[2]OutputPIN_P7mp[3]OutputPIN_T9mp[4]OutputPIN_R5mp[5]OutputPIN_R4mp[6]OutputPIN_R3mq[0]OutputPIN_U9分低位mq[1]OutputPIN_U1mq[2]OutputPIN_U2mq[3]OutputPIN_T4mq[4]OutputPIN_R7mq[5]OutputPIN_R6mq[6]OutputPIN_T3p[0]OutputPIN_Y23秒高位p[1]OutputPIN_AA25p[2]OutputPIN_AA26p[3]OutputPIN_Y26p[4]OutputPIN_Y25p[5]OutputPIN_U22p[6]OutputPIN_W24q[0]OutputPIN_AB23秒低位q[1]OutputPIN_V22q[2]OutputPIN_AC25q[3]OutputPIN_AC26q[4]OutputPIN_AB26q[5]OutputPIN_AB25q[6]OutputPIN_Y24hp[0]OutputPIN_L3时高位hp[1]OutputPIN_L2hp[2]OutputPIN_L9hp[3]OutputPIN_L6hp[4]OutputPIN_L7hp[5]OutputPIN_P9hp[6]OutputPIN_N9hq[0]OutputPIN_R2时低位hq[1]OutputPIN_P4hq[2]OutputPIN_P3hq[3]OutputPIN_M2hq[4]OutputPIN_M3hq[5]OutputPIN_M5hq[6]OutputPIN_M44系统的VHDL设计VHDL语言源代码VHDL语言源代码:clock.vhd:ieee.std_logic_arith.all;libraryieee;useieee.std_logic_1164.all;useieee.std_logic_unsigned.all;entityclockisport(clk:instd_logic;led:outstd_logic_vector(25downto0);k0:instd_logic;k1:instd_logic;k2:instd_logic;k3:instd_logic;bs:inoutstd_logic;--整点报时及闹钟mbp,mbq,p,q,mp,mq,hp,hq:outstd_logic_vector(6downto0);--p高q低reset:instd_logic;lcd_rs:outstd_logic;--寄存器选择信号LCD_RW:outstd_logic;--液晶读写信号LCD_EN:outstd_logic;--液晶时钟信号lcd_on:outstd_logic;lcd_blon:outstd_logic;LCD_Data:outstd_logic_vector(7downto0));--液晶数据信号end;architectureaofclockiscomponentsegport(inp:inintegerrange0to10;outp:outstd_logic_vector(6downto0));endcomponent;componentlcdPort(CLK:instd_logic;--状态机时钟信号,同时也是液晶时钟信号m:inintegerrange1to7;--显示的星期转换Reset:instd_logic;LCD_RS:outstd_logic;--寄存器选择信号LCD_RW:outstd_logic;--液晶读写信号LCD_EN:outstd_logic;--液晶时钟信号lcd_on:outstd_logic;lcd_blon:outstd_logic;LCD_Data:outstd_logic_vector(7downto0));--液晶数据信号endcomponent;componentrem1Port(rint:inintegerrange0to99;ri:inoutintegerrange0to10);endcomponent;signalcp:std_logic;--0.01秒signalstate:std_logic_vector(1downto0);--状态:00:计时与校准;01:秒表;10:闹钟;11:倒计时signaljjstate:std_logic;--状态:0:计时;1:校准signaldstate:std_logic;--倒计时状态:1:倒计时;0:设置时间signaldjzstate:std_logic_vector(1downto0);--倒计时设置位的状态signalmbi,mbj,i,j,mi,mj,hi,hj:integerrange0to10;--i高j低signalhour,min,sec:integerrange0to99;--计时signalmbnum,mbsec,mbmin:integerrange0to99;--秒表signaldhour,dmin,dsec:integerrange0to99;--倒计时signalmod_dsec,mod_dmin,mod_dhour,mod_mbnum,mod_mbsec,mod_mbmin,mod_nzhour,mod_nzmin1,mod_nzmin,mod_sec,mod_min,mod_hour:integerrange0to10;--取高位值signalnzhour,nzmin:integerrange0to59;--闹钟signalweek:integerrange1to7;--星期signalweek1:integerrange1to7;--更改星期中间变量signaljzstate:std_logic_vector(1downto0);--计时设置位的状态sig