东北石油大学课程设计2011年3月11日课程EDA技术课程设计题目闹钟系统设计院系电子科学学院专业班级电子信息工程学生姓名学生学号指导教师东北石油大学课程设计任务书课程EDA技术课程设计题目闹钟系统的设计专业电子信息工程姓名学号主要内容、基本要求、主要参考资料等主要内容:设计并制作一个带闹钟功能的24小时计时器。它包括以下几个组成部分:1、显示屏,由4个七段数码管组成,用于显示当前时间(时:分)或设置的闹钟时间;2、数字键,实现‘0’—‘9’的输入,用于输入新的时间或新的闹钟时间;3、TIME(时间)键,用于确定新的时间设置;4、ALARM(闹钟)键,用于确定新的闹钟时间设置,或显示已设置的闹钟时间;5、扬声器,在当前时钟时间与闹钟时间相同时,发出蜂鸣声基本要求:1、计时功能:这是本计时器设计的基本功能,每隔一分钟计时一次,并在显示屏上显示当前时间。2、闹钟功能:如果当前时间与设置的闹钟时间相同,则扬声器发出蜂鸣声。3、设置新的计时器时间:用户用数字键输入新的时间,然后按TIME键确认。在输入过程中,输入数字在显示屏上从右到左依次显示。例如,用户要设置新的时间12:34,则按顺序输入“1”,“2”,“3”,“4”,与之对应,显示屏上依次显示的信息为:“1”,“12”,“123”,“1234。如果用户在输入任意几个数字后较长时间内,例如5s,没有按任何键,则计时器恢复到正常的计时显示状态。主要参考资料:[1]潘松著.EDA技术实用教程(第二版).北京:科学出版社,2005.[2]康华光主编.电子技术基础模拟部分.北京:高教出版社,2006.[3]阎石主编.数字电子技术基础.北京:高教出版社,2003.完成期限2011.3.11指导教师专业负责人2011年3月7日一、总体设计思想1.基本原理数字闹钟电路的基本结构由两个60进制计数器和一个24进制计数器组成,分别对秒、分、小时进行计时,当计时到23时59分59秒时,再来一个计数脉冲,则计数器清零,重新开始计时。秒计数器的计数时钟CLK为1Hz的标准信号。当数字闹钟处于计时状态时,秒计数器的进位输出信号作为分钟计数器的计数信号,分钟计数器的进位输出信号又作为小时计数器的计数信号时、分、秒的计时结果通过6个数码管来动态显示。因此,通过模式选择信号KEY1、KEY2控制数字钟的工作状态,即控制数字钟,使其分别工作于正常计时,调整分、时和设定闹钟分、时5个状态。当数字闹钟处于计时状态时,3个计数器允许计数,且秒、分、时计数器的计数时钟信号分别为CLK,秒的进位,分的进位;当数字闹钟处于调整时间状态时,被调的分或时会一秒一秒地增加;当数字钟处于闹钟定时状态时,可以设定小时和分;当计时到所设定的时刻时,驱动扬声器,持续1分钟。2.设计框图计数输出译码输出计数时钟外部时钟计数控制模块响铃控制模块蜂鸣器分频器外部控制信号闹钟控制信号计数模块译码模块七段显示数码管二、设计步骤和调试过程1、总体设计电路(1)CLK为外部时钟信号,RESET为复位信号.(2)当KEY为高电平(KEY='1')时,表示用户按下数字键(0~9).(3)当ALARM_BUTTON为高电平时,表示用户按下ALARM键.(4)当TIME_BUTTON为高电平时,表示用户按下TIME键.(5)当LOAD_NEW_A为高电平时,控制(闹钟时间寄存器)加载新的闹钟时间值.(6)当LOAD_NEW_C为高电平时,控制(时钟计数器)设置新的时间值.(7)当SHOW_NEW_TIME为高电平时,控制(七段数码显示电路)显示新的时间值,即用户通过数字键输入的时间;否则,当SHOW_NEW_TIME为低电平时,根据SHOW_A信号的值控制显示当前时间或闹钟时间.根据设计要求及端口设置,需要五个状态来实现:S0:表示电路初态即正常时钟计数状态,完成前面设计功能(1)的工作.S1:接收键盘输入状态.在状态S0时用户按下数字键后进入此状态.在此状态下,显示屏上显示的是用户键入的数字.S2:设置新的闹钟时间.在状态S1时用户按下ALARM键后进入此状态.S3:设置新的计时器时间.在状态S1时用户按下TIME键后进入此状态.S4:显示闹钟时间.在状态S0时用户直接按下ALARM键后进入此状态.在此状态下,显示屏上显示的是所设置的闹钟时间.注意:在此状态下,用户按下ALARM键后,显示屏上保持显示闹钟时间,经过一段时间以后,再返回状态S0。2、模块设计和相应模块程序(1)顶层文件:LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYclockISPORT(CLK12MHZ:INSTD_LOGIC;CLK8HZ:INSTD_LOGIC;SPKOUT:OUTSTD_LOGIC;CLK:INSTD_LOGIC;KEY1:INSTD_LOGIC;KEY2:INSTD_LOGIC_VECTOR(1DOWNTO0);H1,H2,M1,M2,S1,S2:OUTSTD_LOGIC_VECTOR(3DOWNTO0));END;ARCHITECTUREoneOFclockISCOMPONENTshizhongPORT(clk:instd_logic;md1:instd_logic;md2:instd_logic_vector(1downto0);clken:outstd_logic;h1,h2,m1,m2,s1,s2:outstd_logic_vector(3downto0));ENDCOMPONENT;COMPONENTNoteTabsPORT(clk:INSTD_LOGIC;ToneIndex:OUTSTD_LOGIC_VECTOR(3DOWNTO0));ENDCOMPONENT;COMPONENTToneTabaPORT(Index:INSTD_LOGIC_VECTOR(3DOWNTO0);Tone:OUTSTD_LOGIC_VECTOR(10DOWNTO0);en:instd_logic);ENDCOMPONENT;COMPONENTSpeakeraPORT(clk:INSTD_LOGIC;Tone:INSTD_LOGIC_VECTOR(10DOWNTO0);SpkS:OUTSTD_LOGIC);ENDCOMPONENT;SIGNALTone:STD_LOGIC_VECTOR(10DOWNTO0);SIGNALToneIndex:STD_LOGIC_VECTOR(3DOWNTO0);SIGNALclken:STD_LOGIC;SIGNALen:STD_LOGIC;BEGINu1:ShizhongPORTMAP(clk=CLK,md1=KEY1,md2=KEY2,clken=en,h1=h1,h2=h2,m1=m1,m2=m2,s1=s1,s2=s2);u2:NoteTabsPORTMAP(clk=CLK8HZ,ToneIndex=ToneIndex);u3:ToneTabaPORTMAP(Index=ToneIndex,Tone=Tone,en=en);u4:SpeakeraPORTMAP(clk=CLK12MHZ,Tone=Tone,SpkS=SPKOUT);END;(2)时钟控制模块:libraryieee;useieee.std_logic_1164.all;useieee.std_logic_unsigned.all;entityshizhongisport(clk:instd_logic;md1:instd_logic;md2:instd_logic_vector(1downto0);clken:outstd_logic;h1,h2,m1,m2,s1,s2:outstd_logic_vector(3downto0));endshizhong;architectureoneofshizhongissignalhou1:std_logic_vector(3downto0);signalhou2:std_logic_vector(3downto0);signalmin1:std_logic_vector(3downto0);signalmin2:std_logic_vector(3downto0);signalseth1:std_logic_vector(3downto0);signalseth2:std_logic_vector(3downto0);signalsetm1:std_logic_vector(3downto0);signalsetm2:std_logic_vector(3downto0);signalsec1:std_logic_vector(3downto0);signalsec2:std_logic_vector(3downto0);begin-----------------------------------------------小时十位h110:process(clk,hou2,min1,min2,sec1,sec2,md1,md2)beginifclk'eventandclk='1'thenif(hou1=0010andhou2=0011)and(min1=0101andmin2=1001)and(sec1=0101andsec2=1001)thenhou1=0000;elsifhou1=0010andhou2=0011andmd1='0'andmd2=01then--当时间为23点且处于校时状态时hou1=0000;elsif(hou2=1001and(min1=0101andmin2=1001)and(sec1=0101andsec2=1001))or(hou2=1001andmd1='0'andmd2=01)thenhou1=hou1+1;endif;endif;endprocessh110;-----------------------------------------------小时个位h220:process(clk,min1,min2,sec1,sec2,md1,md2,hou1)beginifclk'eventandclk='1'thenif(hou1=0010andhou2=0011)and(min1=0101andmin2=1001)and(sec1=0101andsec2=1001)thenhou2=0000;elsifhou2=1001and(min1=0101andmin2=1001)and(sec1=0101andsec2=1001)thenhou2=0000;elsif(hou2=1001andmd1='0'andmd2=01)or(hou1=0010andhou2=0011)thenhou2=0000;--md='1';--elsif((min1=0101andmin2=1001)and(sec1=0101andsec2=1001))or(md1='0'andmd2=01)thenhou2=hou2+1;--speak=clk;--endif;endif;endprocessh220;-----------------------------------------------分钟十位m110:process(clk,min2,sec1,sec2,md1,md2)beginifclk'eventandclk='1'thenif(min1=0101andmin2=1001)and(sec1=0101andsec2=1001)thenmin1=0000;elsifmin1=0101andmin2=1001and(md1='0'andmd2=00)thenmin1=0000;elsif(min2=1001and(sec1=0101andsec2=1001))or(min2=1001andmd1='0'andmd2=00)thenmin1=min1+1;endif;endif;--endif;e