1、哈尔滨工业大学(威海)电子学课程设计汇报带有整点报时数字钟设计和制作姓名:蒋栋栋班级:0802503学号:指导老师:井岩目录一、课程设计性质、目标和任务3二、课程设计基础要求3三、设计课题要求3四、课程设计所需要仪器4五、设计步骤4 1、整体设计框图4 2、各个模块设计和仿真4 2.1分频模块4 2.2计数器模块6 2.3控制模块10 2.4数码管分配13 2.5显示模块14 2.6报时模块16六、调试中碰到问题及处理方法18七、心得体会18一、课程设计性质、目标和任务创新精神和实践能力二者之中,实践能力是基础和根本。这是因为创新基于实践、源于实践,实践出真知,实践检验真理。实践活动是创新源泉
2、,也是人才成长必由之路。经过课程设计锻炼,要求学生掌握电路通常设计方法,含有初步独立设计能力,提升综合利用所学理论知识独立分析和处理问题能力,培养学生创新精神。二、课程设计基础要求掌握现代大规模集成数字逻辑电路应用设计方法,深入掌握电子仪器正确使用方法,和掌握利用计算机进行电子设计自动化(EDA)基础方法。三、设计课题要求(1)结构一个二十四小时制数字钟。要求能显示时、分、秒。(2)要求时、分、秒能各自独立进行调整。(3)能利用喇叭作整点报时。从59分50秒时开始报时,每隔一秒报时一秒,抵达00分00秒时,整点报时。整点报时声频率应和其它报时声频有显著区分。#设计提醒(仅供参考):(1)对频率
3、输入考虑数字钟内所需时钟频率有:基按时钟应为周期一秒标准信号。报时频率可选择1KHz和2KHz左右(两种频率相差八度音,即频率相差一倍)。另外,为预防按键反跳、抖动,微动开关输入应采取寄存器输入形式,其时钟应为几十赫兹。(2)计时部分计数器设计考虑分、秒计数器均为模60计数器。小时计数为模24计数器,同理可建一个24进制计数器模块。(3)校时设计考虑数字钟校准有3个控制键:时校准、分校准和秒校准。微动开关不工作,计数器正常工作。按下微动开关后,计数器以8Hz频率连续计数(若只按一下,则计数器增加一位),可调用元件库中逻辑门建一个控制按键模块,即建立开关去抖动电路(见书70页)。(4)报时设计考
4、虑能够将高频时钟分频得到约2KHz和1KHz音频,作为数字钟报时频率。当电子钟显示XX:59:50时,数字钟开始报时“DO,连续一秒,而且每隔一秒报一下,直至显示XX:00:00时报“DI,连续一秒后停止。最终输出至喇叭。应调用元件库中逻辑门建一个控制报时模块。(5)建一个七段译码模块因在系统可编程器件试验箱上数码管没有经过译码,故要用AHDL语言写一个七段译码模块,且应考虑数码管为共阳极。数码管上点(D2、D4、D6)应置Vcc。四、课程设计所需要仪器1、计算机一台2、quartus软件3、FPGA开发板五、设计步骤1、模块介绍(1) 分频模块:产生1Hz、1KHz、2KHz频率(2) 计数
5、器模块:生成60进制、24进制计数器(3) 控制模块:按键控制、按键消抖(4) 显示模块:7段数码管显示器,分别显示小时、分钟、秒(5) 报时模块:进行整点报时2、各个模块设计和仿真2.1分频模块CLK晶振频率50MHZ,分成2KHZ,1KHZ,1HZ信号。基准1HZ信号作为时钟计时秒计数时钟信号;分频1KHZ,2KHZ信号用于报时电路不一样声讯。程序代码:library ieee;use ieee.std_logic_1164.all;entity fre isport(clk ,sel: in std_logic;clk1hz,clk1khz,clk2khz:out std_logic);
6、end fre;architecture beh of fre issignal data1khz,data2khz,data1hz : std_logic := 0;begin clk1hz = data1hz; clk1khz = data1khz; clk2khz = data2khz; clk1khz_pro : process(clk) -产生1khz信号 variable cnt : integer range 0 to 24999; begin if clkevent and clk=1 then if cnt = 24999 then cnt := 0 ; data1khz =
7、 not data1khz; else cnt := cnt + 1; end if; end if; end process clk1khz_pro; clk2khz_pro : process(clk) -产生2khz信号 variable cnt : integer range 0 to 12499; begin if clkevent and clk=1 then if cnt = 12499 then cnt := 0 ; data2khz = not data2khz; else cnt := cnt + 1; end if; end if; end process clk2khz
8、_pro; clk1hz_pro : process(data1khz) -产生1hz 信号 variable cnt : integer range 0 to 499; begin if data1khzevent and data1khz=1 then if sel=0 then cnt:=0; else if cnt = 499 then cnt := 0 ;data1hz = not data1hz ; else cnt := cnt + 1; end if; end if; end if; end process clk1hz_pro; end beh;输入模块电路图:2.2计数器模
9、块由秒计数器,分计数器,时计数器组成了最基础数字钟计时电路,两个六十进制计数器和二十四进制计数器组合组成。程序代码:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;use IEEE.STD_LOGIC_ARITH.ALL;entity shuzizhong isport(clk_change : in std_logic;s_en,m_en,h_en:in std_logic;sel:in std_logic;secout,minout,hourout :out std_logic;sl,sh,m
10、l,mh,hl,hh:out std_logic_vector(3 downto 0);a:out std_logic_vector(15downto 0);end shuzizhong;architecture behav of shuzizhong issignal low_rega,high_rega,low_regb,high_regb,low_regc,high_regc :std_logic_vector(3 downto 0):=0000;signal sout,mout,hout :std_logic :=0;begin-秒60进制进制 counter_sec_l : proc
11、ess(clk_change,s_en) begin sl=low_rega;sh=high_rega;ml=low_regb;mh=high_regb;hl=low_regc;hh=high_regc; if clk_changeevent and clk_change=1 then if s_en=1 then if low_rega=1001 then low_rega = 0000; else low_rega = low_rega+1; end if; end if; end if; end process counter_sec_l; counter_sec_h : process
12、(clk_change,s_en,low_rega) begin if clk_changeevent and clk_change=1 then if s_en=1 then if low_rega=1001 then if high_rega =0101then high_rega = 0000; else high_rega = high_rega+1; end if; end if; end if; end if; end process counter_sec_h; sout = 1 when low_rega=1001 and high_rega=0101 else 0; -分钟6
13、0进制设置 counter_min_l : process(clk_change,m_en) begin if clk_changeevent and clk_change=1 then if m_en=1 then if sout=1or sel=0 then if low_regb=1001 then low_regb = 0000; else low_regb = low_regb+1; end if; end if; end if; end if; end process counter_min_l; counter_min_h : process(clk_change,m_en,lo
14、w_regb) begin if clk_changeevent and clk_change=1 then if sout=1or sel=0 then if m_en=1 then if low_regb=1001 then if high_regb =0101then high_regb = 0000; else high_regb = high_regb+1; end if; end if; end if; end if; end if; end process counter_min_h; mout = 1 when low_regb=1001 and high_regb=0101a
15、nd sout=1 else 0; -小时24进制设置counter_hour_l : process(clk_change,h_en) begin if clk_changeevent and clk_change=1 then if h_en=1 then if mout=1or sel=0 then if low_regc=1001or hout=1 then low_regc = 0000; else low_regc = low_regc+1; end if; end if; end if; end if; end process counter_hour_l; counter_ho
16、ur_h : process(clk_change,h_en,hout) begin if clk_changeevent and clk_change=1 then if mout=1or sel=0 then if h_en=1 then if hout=1 then high_regc=0000; else if low_regc=1001 then high_regc = high_regc+1; end if; end if; end if; end if; end if; end process counter_hour_h; hout = 1 when low_regc=0011
17、 and high_regc=0010 else 0; secout=sout;minout=mout;hourout=hout; a=high_regb&low_regb&high_rega&low_rega ; end behav;输入模块电路图:2.3控制模块分五个状态0状态正常计时,按下按键进入下一状态开始调时模式1,按下按键进入调秒模式2,按下按键进入调分模式3,按下按键进入调小时模式4.按下按键恢复正常计时模式。程序代码:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity k
18、ey_press isport( set ,mode: in std_logic; clk1khz,clk1hz: in std_logic; secout,minout: in std_logic; clk_change,clk2hz_en:out std_logic ; sel,s_ce,m_ce,h_ce:out std_logic; s_en,m_en,h_en:out std_logic ); end key_press; architecture beh of key_press is signal key1,key2:std_logic; signal sce_reg, mce_
19、reg ,hce_reg:std_logic ; signal ssl,ssen,mmen,hhen:std_logic; signal con : integer range 0 to 4 :=0; -按键按下(延时) begin key_press2 : process(set,clk1khz) variable cnt :integer range 0 to 999; begin if set=0 then if clk1khzevent and clk1khz=1then if cnt=50 and set=0 then cnt :=cnt+1; key2 = 1; else cnt:
20、=cnt+1;key2 = 0; end if; end if; else cnt:=0; key2=0; end if; end process key_press2; key_press1 : process(mode,clk1khz) variable cnt :integer range 0 to 999; begin if mode=0 then if clk1khzevent and clk1khz=1then if cnt=50 and mode=0 then cnt :=cnt+1; key1 = 1; else cnt:=cnt+1;key1 = 0; end if; end
21、 if; else cnt:=0; key1=0; end if; end process key_press1; count : process(key1,key2) begin if key1event and key1=1 then if con=4 then con=0; else con ssl=1; sce_reg = 0;ssen =1; mce_reg = 0;mmen =1; hce_reg = 0;hhen =1; clk2hz_en ssl=0; sce_reg = 0;ssen =1; mce_reg = 0;mmen =1; hce_reg = 0;hhen =1;
22、clk2hz_en ssl=0; sce_reg = 1;ssen =1; mce_reg = 0;mmen =0; hce_reg = 0;hhen =0; clk2hz_en ssl=0; sce_reg = 0;ssen =0; mce_reg = 1;mmen =1; hce_reg = 0;hhen =0; clk2hz_en ssl=0; sce_reg = 0;ssen =0; mce_reg = 0;mmen =0; hce_reg = 1;hhen =1; clk2hz_en ssl=0; sce_reg = 0;ssen =1; mce_reg = 0;mmen =1; hce_reg = 0;hhen =1; clk2hz_en s_ce=sce_reg; m_ce=mce_reg; h_ce=hce_reg; clk_change s_ce=ssen; m_ce=mmen; h_ce=hhen; clk_change s_ce=ssen; m_ce=secout; h_ce=minout; clk_change=clk1hz; end case; end process sel_pro; sel=ssl;s_en=ssen;m_en=mmen;h_en dataout dataout =11111001; when 0010