EDA技术课程设计闹钟系统设计

上传人:沈*** 文档编号:148890788 上传时间:2022-09-06 格式:DOC 页数:21 大小:355KB
返回 下载 相关 举报
EDA技术课程设计闹钟系统设计_第1页
第1页 / 共21页
EDA技术课程设计闹钟系统设计_第2页
第2页 / 共21页
EDA技术课程设计闹钟系统设计_第3页
第3页 / 共21页
点击查看更多>>
资源描述
东 北 石 油 大 学课 程 设 计课 程 EDA技术课程设计 题 目 闹钟系统设计 院 系 电子科学学院 专业班级 电子信息工程 学生姓名 学生学号 0 指导教师 2011年 3 月11日东北石油大学课程设计任务书课程 EDA技术课程设计题目 闹钟系统的设计专业 电子信息工程 姓名 学号 070901140504主要内容、基本要求、主要参考资料等主要内容:设计并制作一个带闹钟功能的24小时计时器。它包括以下几个组成部分:1、显示屏,由4 个七段数码管组成,用于显示当前时间(时:分)或设置的闹钟时间;2、数字键,实现09的输入,用于输入新的时间或新的闹钟时间;3、TIME(时间)键,用于确定新的时间设置;4、ALARM(闹钟)键,用于确定新的闹钟时间设置,或显示已设置的闹钟时间;5、扬声器,在当前时钟时间与闹钟时间相同时,发出蜂鸣声基本要求:1、计时功能:这是本计时器设计的基本功能,每隔一分钟计时一次,并在显示屏上显示当前时间。2、闹钟功能:如果当前时间与设置的闹钟时间相同,则扬声器发出蜂鸣声。3、设置新的计时器时间:用户用数字键输入新的时间,然后按TIME键确认。在输入过程中,输入数字在显示屏上从右到左依次显示。例如,用户要设置新的时间12:34,则按顺序输入“1”,“2”,“3”,“4”,与之对应,显示屏上依次显示的信息为:“1”,“12”,“123”,“1234。如果用户在输入任意几个数字后较长时间内,例如5 s,没有按任何键,则计时器恢复到正常的计时显示状态。主要参考资料: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.设计框图设定按键时钟1Hz按键UpDN时钟10Hz功能切换寄存器闹钟设定寄存器闹铃控制电路模式切换数据选择扫描技术字符译码扫描时钟320Hz数码显示蜂鸣器时钟计数寄存器 二、设计步骤和调试过程1、总体设计电路(1) CLK为外部时钟信号,RESET为复位信号. (2) 当KEY为高电平(KEY= 1)时,表示用户按下数字键(09). (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、译码器的设计设计思路:本模块的功能是将每次按下闹钟系统的数字键盘后产生的一个数字所对应的10位2进制数据转换为1位十进制整数信号,以作为小时、分钟计数的4个数字之一。输入数据与输出数据的译码关系如下表所示。2、移位寄存器的设计设计思路:本模块的功能是在CLK端口上升沿同步下,将KEY端口的输入信号移入NEW_TIME端口的输出信号最低位,原有信息依次向左移;RESET端口的输入信号对NEW_TIME端口的输出信号进行异步清零复位。3、闹钟寄存器和时间计数器的设计闹钟寄存器模块的功能是在时钟上升沿同步下,根据LOAD_NEW_A端口的输入信号控制ALARM_TIME端口的输出;当控制信号有效时,把NEW_ALARM_TIME端口的输入信号值输出;RESET端口输入信号对ALARM_TIME端口的输出进行异步的清零复位。时间计数器模块的功能是当RESET端口输入信号为高电平时,对CURRENT_TIME端口输出信号清零复位;当LOAD_NEW_C端口输入信号为高电平时,将NEW_CURRENT_TIME端口的输入信号给CURRENT_TIME端口。RESET端口的控制优先于LOAD_NEW_C端口输出信号累加1,并根据小时、分钟的规律处理进位。4、闹钟系统显示驱动器的设计模块的功能是:当SHOW_NEW_TIME端口输入信号有效时,根据NEW_TIME端口输入信号产生相应的4段数码显示器驱动数据,并在DISPLAY端口输出该信号。当SHOW_NEW_TIME端口输入信号无效时,判断SHOW_A端口的输入信号为高电平时,根据ALARM_TIME端口的输入信号产生相应的4个7段数码显示驱动数据,并在DISPLAY端口输出该信号;当ALARM_TIME端口的输入信号值与CURRENT_TIME端口的输入信号值相同时,SOUND_ALARM端口的输出信号有效,反之无效。5、分频器的设计本模块的功能是将CLK_IN端口输入的时钟信号分频后送给CLK_OUT端口当RESET端口输入信号有效时,CLK_OUT端口输出信号清零。 (1)顶层文件:LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL;ENTITY clock IS PORT ( CLK12MHZ : IN STD_LOGIC; CLK8HZ : IN STD_LOGIC; SPKOUT : OUT STD_LOGIC; CLK : IN STD_LOGIC; KEY1 : IN STD_LOGIC; KEY2 : IN STD_LOGIC_VECTOR(1 DOWNTO 0); H1,H2,M1,M2,S1,S2: OUT STD_LOGIC_VECTOR(3 DOWNTO 0); END;ARCHITECTURE one OF clock IS COMPONENT shizhong PORT (clk : in std_logic; md1 : in std_logic; md2 : in std_logic_vector(1 downto 0); clken : out std_logic; h1,h2,m1,m2,s1,s2: out std_logic_vector(3 downto 0); END COMPONENT; COMPONENT NoteTabs PORT ( clk : IN STD_LOGIC; ToneIndex : OUT STD_LOGIC_VECTOR (3 DOWNTO 0) ); END COMPONENT; COMPONENT ToneTaba PORT ( Index : IN STD_LOGIC_VECTOR (3 DOWNTO 0) ; Tone : OUT STD_LOGIC_VECTOR (10 DOWNTO 0); en : in std_logic); END COMPONENT; COMPONENT Speakera PORT ( clk : IN STD_LOGIC; Tone : IN STD_LOGIC_VECTOR (10 DOWNTO 0); SpkS : OUT STD_LOGIC ); END COMPONENT; SIGNAL Tone :STD_LOGIC_VECTOR (10 DOWNTO 0); SIGNAL ToneIndex :STD_LOGIC_VECTOR (3 DOWNTO 0); SIGNAL clken :STD_LOGIC; SIGNAL en :STD_LOGIC; BEGINu1 : Shizhong PORT MAP (clk=CLK,md1=KEY1,md2=KEY2,clken=en, h1=h1,h2=h2,m1=m1,m2=m2,s1=s1,s2=s2);u2 : NoteTabs PORT MAP (clk=CLK8HZ, ToneIndex=ToneIndex);u3 : ToneTaba PORT MAP (Index=ToneIndex,Tone=Tone,en=en);u4 : Speakera PORT MAP (clk=CLK12MHZ,Tone=Tone, SpkS=SPKOUT );END;(2)时钟控制模块:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity shizhong isport( clk: in std_logic; md1:in std_logic; md2:in std_logic_vector(1 downto 0); clken:out std_logic; h1,h2,m1,m2,s1,s2:out std_logic_vector(3 downto 0);end shizhong;architecture one of shizhong issignal hou1:std_logic_vector(3 downto 0);signal hou2:std_logic_vector(3 downto 0);signal min1:std_logic_vector(3 downto 0);signal min2:std_logic_vector(3 downto 0);signal seth1:std_logic_vector(3 downto 0);signal seth2:std_logic_vector(3 downto 0);signal setm1:std_logic_vector(3 downto 0);signal setm2:std_logic_vector(3 downto 0);signal sec1:std_logic_vector(3 downto 0);signal sec2:std_logic_vector(3 downto 0);begin-小时十位h110:process(clk,hou2,min1,min2,sec1,sec2,md1,md2)beginif clkevent and clk=1 thenif (hou1=0010 and hou2=0011)and(min1=0101 and min2=1001) and (sec1=0101 and sec2=1001) thenhou1=0000;elsif hou1=0010and hou2=0011and md1=0 and md2=01 then-当时间为23点且处于校时状态时hou1=0000;elsif (hou2=1001and(min1=0101 and min2=1001) and (sec1=0101 and sec2=1001)or (hou2=1001and md1=0 and md2=01) thenhou1=hou1+1;end if;end if;end process h110;-小时个位h220:process(clk,min1,min2,sec1,sec2,md1,md2,hou1)beginif clkevent and clk=1 thenif (hou1=0010 and hou2=0011)and(min1=0101 and min2=1001) and (sec1=0101 and sec2=1001) thenhou2=0000;elsif hou2=1001and(min1=0101 and min2=1001) and (sec1=0101 and sec2=1001) thenhou2=0000;elsif (hou2=1001and md1=0 and md2=01)or (hou1=0010and hou2=0011) thenhou2=0000;-md=1;-elsif (min1=0101 and min2=1001) and (sec1=0101 and sec2=1001)or (md1=0 and md2=01) thenhou2=hou2+1;-speak=clk;-end if;end if;end process h220;-分钟十位 m110:process(clk,min2,sec1,sec2,md1,md2)beginif clkevent and clk=1 thenif (min1=0101 and min2=1001) and (sec1=0101 and sec2=1001) then min1=0000;elsif min1=0101and min2=1001and (md1=0 and md2=00)thenmin1=0000;elsif (min2=1001and (sec1=0101 and sec2=1001) or (min2=1001and md1=0 and md2=00)thenmin1=min1+1;end if;end if;-end if;end process m110;-分钟个位 m220:process(clk,sec1,sec2,md1,md2)beginif clkevent and clk=1 thenif min2=1001and (sec1=0101 and sec2=1001)thenmin2=0000;elsif min2=1001and (md1=0 and md2=00)thenmin2=0000;else if (sec1=0101 and sec2=1001) or(md1=0 and md2=00)thenmin2=min2+1;end if;end if;end if;end process m220;-秒十位 s110:process(clk)beginif clkevent and clk=1 thenif (sec1=0101 and sec2=1001)thensec1=0000;else if sec2=1001thensec1=sec1+1;end if;end if;end if;end process s110;-秒个位 s220:process(clk)beginif clkevent and clk=1 thenif sec2=1001 thensec2=0000;else sec2=sec2+1;end if;end if;end process s220;-时间设置小时部分 sethour1:process(clk,seth2)beginif clkevent and clk=1 thenif seth1=0010and seth2=0011 thenseth1=0000;elsif seth2=1001 thenseth1=seth1+1;end if;end if;end process sethour1;sethour2:process(clk,md1,md2,seth1)beginif clkevent and clk=1 thenif (seth1=0010and seth2=0011)or seth2=1001thenseth2=0000;elsif md1=1 and md2=00 thenseth2=seth2+1;end if;end if;end process sethour2;-时间设置分钟部分 setmin1:process(clk,setm2)beginif clkevent and clk=1 thenif setm1=0101and setm2=1001thensetm1=0000;elsif setm2=1001thensetm1=setm1+1;end if;end if;end process setmin1;setmin2:process(clk,md1,md2)beginif clkevent and clk=1thenif setm2=1001thensetm2=0000;elsif md1=1 and md2=01thensetm2=setm2+1;end if;end if;end process setmin2;-闹铃speaker:process(clk,hou1,hou2,min1,min2)beginif clkevent and clk=1thenif seth1=hou1 and seth2=hou2 and setm1=min1 and setm2=min2 thenclken=1;else clken=0;end if;end if;end process speaker;disp:process(md1,hou1,hou2,min1,min2,sec1,sec2,seth1,seth2,setm1,setm2)beginif md1=0 then-计时时间显示和设置模式h1=hou1;h2=hou2;m1=min1;m2=min2;s1=sec1;s2=sec2;else -闹铃时间现实和设置模式h1=seth1;h2=seth2;m1=setm1;m2=setm2;s1=1111;s2=1111;end if;end process disp;end one; (3)乐曲演奏模块:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY Speakera IS PORT ( clk : IN STD_LOGIC; Tone : IN STD_LOGIC_VECTOR (10 DOWNTO 0); SpkS : OUT STD_LOGIC );END;ARCHITECTURE one OF Speakera IS SIGNAL PreCLK, FullSpkS : STD_LOGIC;BEGIN DivideCLK : PROCESS(clk) VARIABLE Count4 : STD_LOGIC_VECTOR (3 DOWNTO 0) ; BEGIN PreCLK 11 THEN PreCLK = 1; Count4 := 0000; ELSIF clkEVENT AND clk = 1 THEN Count4 := Count4 + 1; END IF; END PROCESS; GenSpkS : PROCESS(PreCLK, Tone)- 11位可预置计数器 VARIABLE Count11 : STD_LOGIC_VECTOR (10 DOWNTO 0);BEGIN IF PreCLKEVENT AND PreCLK = 1 THEN IF Count11 = 16#7FF# THEN Count11 := Tone ; FullSpkS = 1; ELSE Count11 := Count11 + 1; FullSpkS = 0; END IF; END IF; END PROCESS; DelaySpkS : PROCESS(FullSpkS)-将输出再2分频,展宽脉冲,使扬声器有足够功率发音 VARIABLE Count2 : STD_LOGIC;BEGIN IF FullSpkSEVENT AND FullSpkS = 1 THEN Count2 := NOT Count2; IF Count2 = 1 THEN SpkS = 1; ELSE SpkS = 0; END IF; END IF; END PROCESS;END;LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY NoteTabs IS PORT (clk : IN STD_LOGIC; ToneIndex : OUT STD_LOGIC_VECTOR (3 DOWNTO 0) );END;ARCHITECTURE one OF NoteTabs ISCOMPONENT MUSIC -音符数据ROM PORT(address : IN STD_LOGIC_VECTOR (7 DOWNTO 0); inclock : IN STD_LOGIC ; q : OUT STD_LOGIC_VECTOR (3 DOWNTO 0);END COMPONENT; SIGNAL Counter : STD_LOGIC_VECTOR (7 DOWNTO 0);BEGIN CNT8 : PROCESS(clk,Counter) BEGIN IF Counter=138 THEN Counter = 00000000; ELSIF (clkEVENT AND clk = 1) THEN Counter Counter , q=ToneIndex, inclock=clk); END;LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY ToneTaba IS PORT ( Index : IN STD_LOGIC_VECTOR (3 DOWNTO 0) ; Tone : OUT STD_LOGIC_VECTOR (10 DOWNTO 0); en : IN STD_LOGIC);END;ARCHITECTURE one OF ToneTaba ISBEGINPROCESS(Index,en) BEGINIF en=0 THEN Tone Tone Tone Tone Tone Tone Tone Tone Tone Tone Tone Tone Tone Tone NULL; END CASE;END IF; END PROCESS;END;LIBRARY ieee;USE ieee.std_logic_1164.all;LIBRARY altera_mf;USE altera_mf.altera_mf_components.all;ENTITY music ISPORT( address: IN STD_LOGIC_VECTOR (7 DOWNTO 0);inclock: IN STD_LOGIC ;q: OUT STD_LOGIC_VECTOR (3 DOWNTO 0);END music;ARCHITECTURE SYN OF music ISSIGNAL sub_wire0: STD_LOGIC_VECTOR (3 DOWNTO 0);COMPONENT altsyncramGENERIC (intended_device_family: STRING;width_a: NATURAL;widthad_a: NATURAL;numwords_a: NATURAL;operation_mode: STRING;outdata_reg_a: STRING;address_aclr_a: STRING;outdata_aclr_a: STRING;width_byteena_a: NATURAL;init_file: STRING;lpm_hint: STRING;lpm_type: STRING);PORT ( clock0: IN STD_LOGIC ;address_a: IN STD_LOGIC_VECTOR (7 DOWNTO 0);q_a: OUT STD_LOGIC_VECTOR (3 DOWNTO 0);END COMPONENT;BEGINq Cyclone,width_a = 4,widthad_a = 8,numwords_a = 256,operation_mode = ROM,outdata_reg_a = UNREGISTERED,address_aclr_a = NONE,outdata_aclr_a = NONE,width_byteena_a = 1,init_file = data1.mif,lpm_hint = ENABLE_RUNTIME_MOD=YES, INSTANCE_NAME=rom2,lpm_type = altsyncram)PORT MAP ( clock0 = inclock, address_a = address, q_a = sub_wire0);END SYN;3、仿真及仿真结果分析本实验是以KEY2、KEY1为控制整个闹钟的校时,校分,校闹钟时、分,分别将KEY21,KEY20,KEY1,送到实验上的三个键,由这三个键来控制整个校时,校分,校闹钟时,校闹钟分的过程,加上分别连接的键叫A,B,C键,则当A=0,B=1,C=0时是对时钟进行校时,时个位和时十位会以二十四进制循环自动增加。仿真波形:仿真图1当A=0,B=0,C=0时是对时钟进行校分,分个位和分十位会以六十进制循环增加,并且不对时进位。仿真波形:仿真图2当A=0,B=1,C=1时是对闹钟进行校分,闹钟时个位和时十位会以二十四进制循环自动增加。仿真波形:仿真图3当A=0,B=0,C=1时是对闹钟进行校时,闹钟分个位和分十位会以六十进制循环增加,并且不对时进位。仿真波形:仿真图4而当A=1,B=0,C=0或者A=1,B=1,C=0是正常的计时时间,秒从零开始计时,每秒加一,当到达五十九在来一个脉冲后,秒十位和秒个位清零,从零开始直到六十一直循环,并且向分个位清零;分位的原理同秒的一样;而时与秒,分的不同之处是,当时计数到二十三时清零并且不向任何位进位。仿真波形:仿真图5另外当计数的时,分和闹钟所事先设置时、分相等时,歌曲会响起,作为闹钟并且维持一分钟,一分钟歌曲自动停止。4、实验调试结果 为验证所设计程序是否正确,将程序下载进行硬件测试。在Quartus开发环境中进行管脚锁定,连接好数码管驱动电路,然后将目标文件下载到器件中。最终可以看到时、分、秒正常显示。引脚分配如下(选择模式5)图6三、结论及心得体会经过一周的努力终于完成闹钟系统的设计,闹钟系统是由七个部分组成,其中包括译码器、键盘缓冲器、分频器、记数器、寄存器、显示器、控制器由七个数码管组成的显示屏可以正常显示时间,并且可以通过数字键重新设置闹钟时间,经过仿真测试各个功能键工作正常,闹钟发出蜂鸣声,达到了设计要求。在设计程序时,不能妄想一次就将整个程序设计好,反复修改、不断改进是程序设计的必经之路;要养成注释程序的好习惯,一个程序的完美与否不仅仅是实现功能,而应该让人一看就能明白你的思路,这样也为资料的保存和交流提供了方便;在设计课程过程中遇到问题是很正常的,但应该将每次遇到的问题记录下来,并分析清楚,以免下次再碰到同样的问题。课程设计结束了,但是从中学到的知识会让我受益终身。发现、提出、分析、解决问题和实践能力的提高都会受益于我在以后的学习、工作和生活中。在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固。最后,我们衷心的感谢课设期间一直指导和陪伴着我们的老师。参考资料1 潘松著.EDA技术实用教程(第二版). 北京:科学出版社,2005.2 康华光主编.电子技术基础 模拟部分. 北京:高教出版社,2006.3 阎石主编.数字电子技术基础. 北京:高教出版社,2003.18东北石油大学课程设计成绩评价表课程名称EDA技术课程设计题目名称闹钟系统设计学生姓名张晶学号070901140504指导教师姓名职称序号评价项目指 标满分评分1工作量、工作态度和出勤率按期圆满的完成了规定的任务,难易程度和工作量符合教学要求,工作努力,遵守纪律,出勤率高,工作作风严谨,善于与他人合作。202课程设计质量课程设计选题合理,计算过程简练准确,分析问题思路清晰,结构严谨,文理通顺,撰写规范,图表完备正确。453创新工作中有创新意识,对前人工作有一些改进或有一定应用价值。54答辩能正确回答指导教师所提出的问题。30总分评语:指导教师: 2011年 3 月 11 日
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 工作计划


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!