大连理工大学数字电路课程设计报告:多功能数字时钟设计_第1页
大连理工大学数字电路课程设计报告:多功能数字时钟设计_第2页
大连理工大学数字电路课程设计报告:多功能数字时钟设计_第3页
大连理工大学数字电路课程设计报告:多功能数字时钟设计_第4页
大连理工大学数字电路课程设计报告:多功能数字时钟设计_第5页
已阅读5页,还剩19页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

大连理工大学大连理工大学本科实验报告本科实验报告 题目:多功能数字时钟设计 课程名称:数字电路与系统课程设计 学院(系) :信息与通信工程学院 专业:电子信息工程 班级: 学生姓名: 学号: 完成日期:2014 年 7 月 16 日 2014年7月16日 题目:多功能数字时钟设计题目:多功能数字时钟设计 1 1 设计要求设计要求 1)具有“时” 、 “分” 、 “秒”及“模式”的十进制数字显示功能; 2)具有手动校时、 校分功能, 并能快速调节、 一键复位 (复位时间 12 时 00 分 00 秒) ; 3)具有整点报时功能,从 00 分 00 秒起,亮灯十秒钟; 4)具有秒表功能(精确至百分之一秒) ,具有开关键,可暂停、可一键清零; 5)具有闹钟功能,手动设置时间,并可快速调节,具有开关键,可一键复位(复位时 间 12 时 00 分 00 秒) ,闹钟时间到亮灯十秒钟进行提醒; 6)具有倒计时功能(精确至百分之一秒) ,可手动设置倒计时时间,若无输入,系统 默认 60 秒倒计时,且具有开关键,计时时间到亮灯十秒钟进行提醒,可一键复位(复位时 间默认 60 秒) 。 2 2 设计分析及系统方案设计设计分析及系统方案设计 2.1模式选择模块:按键一进行模式选择,并利用数码管显示出当前模式。模式一: 时钟显示功能;模式二:时钟调节功能;模式三:闹钟功能;模式四:秒表功能;模式五: 倒计时功能。 2.2数字钟的基本功能部分:包括时、分、秒的显示,手动调时,以及整点报时部分。 基本模块是由振荡器、分频器、计数器、译码器、显示器等几部分组成。利用 DE2 硬件中 提供的 50MHZ 晶振,经过分频得到周期为 1s 的时钟脉冲。将该信号送入计数器进行计算, 并把累加结果以“时” “分” “秒”的形式通过译码器由数码管显示出来。 具有复位按键 1, 在时钟模式下按下复位键后对时钟进行复位, 复位时间 12 时 00 分 00 秒。 进入手动调时功能时,通过按键调节时间,每按下依次按键 2,时钟时针加一,按下按 键 2 一秒内未松手,时钟时针每秒钟加十;按键 1 对分针进行控制,原理与时针相同并通过 译码器由七位数码管显示。 从 00 分 00 秒开始,数字钟进入整点报时功能(本设计中以一个 LED 灯代替蜂鸣器, 进行报时) ,亮灯 10 秒钟进行提示。 2.3多功能数字钟的秒表功能部分:计时范围从 00 分 00.00 秒至 59 分 59.99 秒。可由 复位键 0 异步清零,并由开关 1 控制计时开始与停止。 将 DE2 硬件中的 50MHZ 晶振经过分频获得周期为 0.01 秒的时钟脉冲,将信号送入计 数器进行计算,并把累计结果通过译码器由七位数码管显示 2.4多功能数字钟的闹钟功能部分:进入闹钟功能模式后,通过按键 2(设定小时)和 按键 1(设定分钟)设定闹钟时间,当按下按键一秒内未松手时,可进行快速设定时间。当 时钟进入闹钟设定的时间(判断时钟的时信号时针,分针分别与闹钟设定的时信号时针、分 针是否相等) ,则以 LED 灯连续亮 10 秒钟进行提示,并由开关 0 控制闹钟的开和关。 2.5多功能数字钟的倒计时功能部分:可通过按键 3(设定分针)和按键 2(设定秒针) 设定倒计时开始,当按下按键一秒内未松手时,可进行快速设定时间。当没有手动时间设定 时,系统默认为 60 秒倒计时。倒计时的时钟与数字钟的时钟相同,每迎到一个 1s 时钟上升 沿,则计数器减一。计数器减至 00 时,分钟位、秒钟位保持为 00。倒计时结束时(即 00 分 00 秒) ,倒计时信号灯亮 10 秒钟进行提示,并由开关 2 控制倒计时的开始于停止。 本设计通过数据选择器控制译码器,使数码管独立显示,各功能之间互不影响。 当 mode=“000”时,时钟功能,则对时钟信号进行译码,数码管显示时钟数据; 当 mode=“001”时,时间校准功能,则对时钟信号进行译码,数码管显示闹钟数据; 当 mode=“010”时,闹钟功能,则对闹钟信号进行译码,数码管显示闹钟信号数据; 当 mode=“011”时,秒表功能,则对秒表信号进行译码,数码管显示秒表信号数据。 当 mode=“100”时,则倒计时功能,对倒计时钟信号进行译码,数码管显示倒计时信 号数据。 系统总体结构框图如下所示系统总体结构框图如下所示: 3 3 系统以及模块硬件电路设计系统以及模块硬件电路设计 3.1 分频电路参数计算: 6 6 6 1 50 1000 10001 50 10 1 50 1000 1000.1 50 10 1 50 1000 100.01 50 10 Ts Ts Ts 分频模块分频(周期 1s) 分频(周期 0.1s) 分频(周期 0.01s) 时钟 计数器 报时 LED 提醒 闹钟 秒表 计数器 倒计时计数器 数 据 选 择 器 译 码 器 数 码 管 显 示 LED 提醒 3.2 系统硬件电路设计 系统硬件模拟图:系统硬件模拟图: 50MHZ KEY0 KEY1 KEY2 KEY3 Sw0 Sw1 LEDdjs LEDnz 分 别 与 数 码 管 相 连 Sw2 LEDbs 3.3 系统与引脚分配 接口名称类型(输入/输出)引脚号说明 clkINPIN_N2晶振 50MHz 时钟输入 selectmodeINPIN_W26模式选择按键 rstINPIN_G26复位按键 addINPIN_P23高位设置键 decINPIN_N23地位设置键 startnzINPIN_N25闹钟开关 startmbINPIN_N26秒表开关 startdjsINPIN_P25倒计时开关 lednzOUTPIN_AE23闹钟提示灯 leddjsOUTPIN_AE22倒计时提示灯 ledbsOUTPIN_Y18整点报时提示灯 qss6OUTPIN_N9时针高位数码管显示 qss5OUTPIN_P9 qss4OUTPIN_L7 qss3OUTPIN_L6 qss2OUTPIN_L9 qss1OUTPIN_L2 qss0OUTPIN_L3 qsg6OUTPIN_M4时针低位数码管显示 qsg5OUTPIN_M5 qsg4OUTPIN_M3 qsg3OUTPIN_M2 qsg2OUTPIN_P3 qsg1OUTPIN_P4 qsg0OUTPIN_R2 qms6OUTPIN_W24秒针高位数码管显示 qms5OUTPIN_U22 qms4OUTPIN_Y25 qms3OUTPIN_Y26 qms2OUTPIN_AA26 qms1OUTPIN_AA25 qms0OUTPIN_Y23 qmg6OUTPIN_Y24秒针低位数码管显示 qmg5OUTPIN_AB25 qmg4OUTPIN_AB26 qmg3OUTPIN_AC26 qmg2OUTPIN_AC25 qmg1OUTPIN_V22 qmg0OUTPIN_AB23 qgs6OUTPIN_AB24模式显示高位(默认全灭) qgs5OUTPIN_AA23 qgs4OUTPIN_AA24 qgs3OUTPIN_Y22 qgs2OUTPIN_W21 qgs1OUTPIN_V21 qgs0OUTPIN_V20模式显示低位 qgg6OUTPIN_V13 qgg5OUTPIN_V14 qgg4OUTPIN_AE11 qgg3OUTPIN_AD11 qgg2OUTPIN_AC12 qgg1OUTPIN_AB12 qgg0OUTPIN_AF10 qfs6OUTPIN_R3分针高位数码管显示 qfs5OUTPIN_R4 qfs4OUTPIN_R5 qfs3OUTPIN_T9 qfs2OUTPIN_P7 qfs1OUTPIN_P6 qfs0OUTPIN_T2 qfg6OUTPIN_T3分针低位数码管显示 qfg5OUTPIN_R6 qfg4OUTPIN_R7 qfg3OUTPIN_T4 qfg2OUTPIN_U2 qfg1OUTPIN_U1 qfg0OUTPIN_U9 4 4 系统的系统的 VHDLVHDL 设计设计 4.1 顶层设计顶层设计 library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity liyabin is-实体声明,及系统输入与输出 port(clk,rst,add,dec,selectmode,startmb,startnz,startdjs:in std_logic; qgs,qgg,qss,qsg,qfs,qfg,qms,qmg:buffer std_logic_vector(6 downto 0); ledbs,lednz,leddjs:out std_logic ); end; architecture data of liyabin is component mode-模式循环模块元件例化 port(selectmode:in std_logic; mode:buffer std_logic_vector(2 downto 0) ); end component; component gnxz-功能选择模块元件例化 port(zt:in std_logic_vector(2 downto 0); sz1,sz2,sz3,sz4,sz5,sz6:in std_logic_vector(3 downto 0);-时钟显示信号 mb1,mb2,mb3,mb4,mb5,mb6:in std_logic_vector(3 downto 0);-秒表显示信号 nz3,nz4,nz5,nz6:in std_logic_vector(3 downto 0);-闹钟显示信号 djs1,djs2,djs3,djs4,djs5,djs6:in std_logic_vector(3 downto 0);-倒计时显示信号 s1,s2,s3,s4,s5,s6,s7,s8:out std_logic_vector(3 downto 0)-输出, 送入显示模块用数码 管进行显示 ); end component; component fp-分频模块元件例化 port(clk,rst:in std_logic; clk10ms,clk100ms,clk1s:out std_logic); end component; component sz-时钟模块元件例化 port(zt:in std_logic_vector(2 downto 0); clk,clk100ms,rst,add,dec:in std_logic; sz1,sz2,sz3,sz4,sz5,sz6:buffer std_logic_vector(3 downto 0); ledbs: out std_logic ); end component; component nz-闹钟模块元件例化 port(startnz,add,dec,rst,clk,clk100ms:in std_logic; zt:in std_logic_vector(2 downto 0); sz2,sz3,sz4,sz5,sz6:in std_logic_vector(3 downto 0);-时钟显示信号 nz3,nz4,nz5,nz6:buffer std_logic_vector(3 downto 0);-闹钟显示信号 lednz:out std_logic-闹钟提示灯输出 ); end component; component mb-秒表模块元件例化 port(zt:in std_logic_vector(2 downto 0); clk,rst,startmb:in std_logic; mb1,mb2,mb3,mb4,mb5,mb6:buffer std_logic_vector(3 downto 0) ); end component; component djs-倒计时模块元件例化 port(rst,startdjs,add,dec,clk,clk100ms:in std_logic; zt:in std_logic_vector(2 downto 0); djs1,djs2,djs3,djs4,djs5,djs6:buffer std_logic_vector(3 downto 0); leddjs:out std_logic ); end component; component xs-显示模块元件例化 port(xsin:in std_logic_vector(3 downto 0);- xsout:out std_logic_vector(6 downto 0) ); end component; signal clk10ms,clk100ms,clk1s,clk1m,clk1h :std_logic;-分频脉冲信号级进位脉冲信 号 signal sz1,sz2,sz3,sz4,sz5,sz6,sz33,sz55:std_logic_vector(3 downto 0);-时钟显示信号 signal nz3,nz4,nz5,nz6:std_logic_vector(3 downto 0);-闹钟显示信号 signal mb1,mb2,mb3,mb4,mb5,mb6:std_logic_vector(3 downto 0);-秒表显示信号 signal djs1,djs2,djs3,djs4,djs5,djs6:std_logic_vector(3 downto 0);-倒计时显示信号 signal s1,s2,s3,s4,s5,s6,s7,s8:std_logic_vector(3 downto 0);-显示信号 signal zt:std_logic_vector(2 downto 0); begin-结构体 - -模式循环模块- - u1:mode port map(selectmode,zt); - -功能选择模块- - u2:gnxz port map(zt,sz1,sz2,sz3,sz4,sz5,sz6, mb1,mb2,mb3,mb4,mb5,mb6, nz3,nz4,nz5,nz6, djs1,djs2,djs3,djs4, s1,s2,s3,s4,s5,s6,s7,s8); - -分频模块- - u3:fp port map(clk,rst,clk10ms,clk100ms,clk1s); - -时钟模块- - u4:sz port map(zt,clk1s,clk100ms,rst,add,dec,sz1,sz2,sz3,sz4,sz5,sz6,ledbs); - -闹钟模块- - u5:nz port map(startnz,add,dec,rst,clk1s,clk100ms, zt,sz2,sz3,sz4,sz5,sz6,nz3,nz4,nz5,nz6,lednz); - -秒表模块- - u6:mb port map(zt,clk10ms,rst,startmb,mb1,mb2,mb3,mb4,mb5,mb6); - -倒计时模块- - u7:djs port map(rst,startdjs,add,dec,clk10ms,clk100ms, zt,djs1,djs2,djs3,djs4,djs5,djs6,leddjs); - -显示模块- - show1: xs port map(s1,qmg); show2: xs port map(s2,qms); show3: xs port map(s3,qfg); show4: xs port map(s4,qfs); show5: xs port map(s5,qsg); show6: xs port map(s6,qss); show7: xs port map(s7,qgg); show8: xs port map(s8,qgs); end;-结束 4.2分频模块分频模块 library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity fp is port(clk,rst:in std_logic; clk10ms,clk100ms,clk1s:out std_logic); end; architecture data of fp is begin -50 兆分频,产生 clk1s,作为始时钟的秒计时脉冲 process(clk,rst) variable num:integer range 0 to 49999999; begin if rst=0 then num:=0; elsif rising_edge(clk) then if num=49999999 then num:=0; clk1s=1; else num:=num+1; clk1s=0; end if; end if; end process; -5 兆分频,产生 clk100ms(即 clk0.1s) ,作为快速调整时间的脉冲信号 process(clk,rst) variable num:integer range 0 to 4999999; begin if rst=0 then num:=0; elsif rising_edge(clk) then if num=4999999 then num:=0; clk100ms=1; else num:=num+1; clk100ms=0; end if; end if; end process; -5 兆分频,产生 clk10ms(即 clk0.01s)作为秒表计时脉冲 process(clk,rst) variable num:integer range 0 to 499999; begin if rst=0 then num:=0; elsif rising_edge(clk) then if num=499999 then num:=0; clk10ms=1; else num:=num+1; clk10ms=0; end if; end if; end process; end; 4.3 模式循环模块模式循环模块 library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity mode is -实体声明 port(selectmode:in std_logic; mode:buffer std_logic_vector(2 downto 0) ); end; architecture data of mode is begin process(selectmode) begin if rising_edge(selectmode) then-模式循环计数器 if mode=100 then mode=000; else mode=mode+1; end if; end if; end process; end; 4.4 功能选择模块功能选择模块 library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity gnxz is-实体声明 port(zt:in std_logic_vector(2 downto 0); sz1,sz2,sz3,sz4,sz5,sz6:in std_logic_vector(3 downto 0);-时钟显示信号 mb1,mb2,mb3,mb4,mb5,mb6:in std_logic_vector(3 downto 0);-秒表显示信号 nz1,nz2,nz3,nz4,nz5,nz6:in std_logic_vector(3 downto 0);-闹钟显示信号 djs1,djs2,djs3,djs4,djs5,djs6:in std_logic_vector(3 downto 0);-倒计时显示信号 s1,s2,s3,s4,s5,s6,s7,s8:out std_logic_vector(3 downto 0)-输出, 送入显示模块用数码 管进行显示 ); end; architecture data of gnxz is begin process(zt,sz1,sz2,sz3,sz4,sz5,sz6,-选择译码器数日信号 nz3,nz4,nz5,nz6, mb1,mb2,mb3,mb4,mb5,mb6, djs1,djs2,djs3,djs4,djs5,djs6) begin if zt=000 then-1 时钟显示 s1=sz1;s2=sz2;s3=sz3;s4=sz4;s5=sz5;s6=sz6;s7=0001;s8=1111; elsif zt=001 then-2 调整 s1=sz1;s2=sz2;s3=sz3;s4=sz4;s5=sz5;s6=sz6;s7=0010;s8=1111; elsif zt=010 then-3 闹钟 s1=0000;s2=0000;s3=nz3;s4=nz4;s5=nz5;s6=nz6;s7=0011;s8=1111; elsif zt=011 then-4 秒表 s1=mb1;s2=mb2;s3=mb3;s4=mb4;s5=mb5;s6=mb6;s7=0100;s8=1111; elsif zt=100 then-5 倒计时 s1=djs1;s2=djs2;s3=djs3;s4=djs4;s5=djs5;s6=djs6;s7=0101;s8=1111; else s1=sz1;s2=sz2;s3=sz3;s4=sz4;s5=sz5;s6=sz6;s7=0001;s8xsoutxsoutxsoutxsoutxsoutxsoutxsoutxsoutxsoutxsoutxsout=1111111; end case; end process; end; 4.6 时钟及其调整模块时钟及其调整模块 library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity sz is-实体声明 port(zt:in std_logic_vector(2 downto 0); clk,clk100ms,rst,add,dec:in std_logic; sz1,sz2,sz3,sz4,sz5,sz6:buffer std_logic_vector(3 downto 0); ledbs: out std_logic ); end; architecture data of sz is signal clk1m,clk1h,clk1m0,clk1h0:std_logic;-进位脉冲信号 signal js,js1:std_logic_vector(0 downto 0);-按键计时信号 begin process(zt,js,clk100ms,clk1m0,add,dec)-时间校准选择脉冲分针部分 begin if zt=001 and js=1 then clk1m=clk100ms; elsif zt=001 and js/=1 then clk1m=clk1m0 or not dec; else clk1m=clk1m0; end if; end process; process(zt,js1,clk100ms,clk1h0)-时间校准选择脉冲时针部分 begin if zt=001 and js1=1 then clk1h=clk100ms; elsif zt=001 and js1/=1 then clk1h=clk1h0 or not dec; else clk1h=clk1h0; end if; end process; process(zt,clk,rst,add,dec)-时钟分针按键计时 begin ifzt=000 and rst=0 then sz2=0000;sz1=0000; else if zt=001 and dec=0 then if rising_edge(clk) then js=js+1; if js=1 then js=1; end if; end if; else js=0; end if; if zt=001 and add=0 then-时钟时针按键计时 if rising_edge(clk) then js1=js1+1; if js1=1 then js1=1; end if; end if; else js1=0; end if; if rising_edge(clk) then-时钟秒针计数器 if sz2=0101 and sz1=1001 then sz2=0000;sz1=0000;clk1m0=1; elsif sz1=1001then sz1=0000;sz2=sz2+1;clk1m0=0; else sz1=sz1+1;clk1m0=0; end if; end if; end if; end process; process(zt,clk1m,rst)-时钟分针计数器 begin if zt=000 and rst=0 then sz4=0000;sz3=0000; elsif rising_edge(clk1m) then if sz4=0101 and sz3=1001 then sz4=0000;sz3=0000;clk1h0=1; elsif sz3=1001then sz3=0000;sz4=sz4+1;clk1h0=0; else sz3=sz3+1;clk1h0=0; end if; end if; end process; process(clk1h,rst,zt)-时钟时针计数器 begin ifzt=000 and rst=0 then sz6=0001;sz5=0010; elsif rising_edge(clk1h) then if sz6=0010 and sz5=0011 then sz6=0000;sz5=0000; elsif sz5=1001then sz5=0000;sz6=sz6+1; else sz5=sz5+1; end if; end if; end process; process(sz1,sz2,sz3,sz4)-整点报时 begin if sz4=0000 and sz3=0000 and sz2=0000 then ledbs=1; else ledbs=0; end if; end process; end; 4.7 闹钟模块闹钟模块 library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity nz is port(startnz,add,dec,rst,clk,clk100ms:in std_logic; zt:in std_logic_vector(2 downto 0); sz2,sz3,sz4,sz5,sz6:in std_logic_vector(3 downto 0);-时钟显示信号 nz3,nz4,nz5,nz6:buffer std_logic_vector(3 downto 0);-闹钟显示信号 lednz:out std_logic ); end; architecture data of nz is signal js,js1:std_logic_vector(0 downto 0);-按键计时信号 signal clkd,clkg:std_logic;-进位脉冲信号 begin process(js,clk100ms,dec) begin if js=1 then-分针按键计时 clkd=clk100ms; else clkd=not dec; end if; end process; process(js1,clk100ms,add)-时针按键计时 begin if js1=1 then clkg=clk100ms; else clkg=not add; end if; end process; process(zt,add,dec,rst,clk,clkg,clkd)-闹钟时间手动设置 begin if zt=010 then if rst=0 then nz6=0001;nz5=0010;nz4=0000;nz3=0000;- 闹 钟 复 位 12:00:00 else if dec=0 then if rising_edge(clk) then js=js+1; if js=1 then js=1; end if; end if; else js=0; end if; if add=0 then if rising_edge(clk) then js1=js1+1; if js1=1 then js1=1; end if; end if; else js1=0; end if; if falling_edge(clkd) then-闹钟手动设置分钟 if nz4=0101 and nz3=1001 then nz4=0000;nz3=0000; elsif nz3=1001 then nz3=0000;nz4=nz4+1; else nz3=nz3+1; end if; end if; if falling_edge(clkg) then-闹钟手动设置时钟 if nz6=0010 and nz5=0011 then nz6=0000;nz5=0000; elsif nz5=1001 then nz5=0000;nz6=nz6+1; else nz5=nz5+1; end if; end if; end if; end if; end process; process(startnz,nz6,nz5,nz4,nz3,sz2,sz3,sz4,sz5,sz6)-闹钟判断及提示 begin ifstartnz=1 then if nz6=sz6 and nz5=sz5 and nz4=sz4 and nz3=sz3 and sz2=0000 then lednz=1; else lednz=0; end if; else lednz=0; end if; end process; end; 4.8 秒表模块秒表模块 library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity mb is-实体声明 port(zt:in std_logic_vector(2 downto 0); clk,rst,startmb:in std_logic; mb1,mb2,mb3,mb4,mb5,mb6:buffer std_logic_vector(3 downto 0) ); end ; architecture data of mb is signal clk10ms,clk1s,clk1m:std_logic;-进位脉冲信号 begin process(zt,clk,startmb,rst)-秒表脉冲计数器 begin if zt=011 and rst=0 then mb2=0000;mb1=0000; elsif startmb=1 then if rising_edge(clk) then if mb2=1001 and mb1=1001 then mb2=0000;mb1=0000;clk1s=1; elsif mb1=1001then mb1=0000;mb2=mb2+1;clk1s=0; else mb1=mb1+1;clk1s=0; end if; end if; end if; end process; process(zt,clk1s,rst)-秒表分针计数器 begin if zt=011 and rst=0 then mb4=0000;mb3=0000; elsif rising_edge(clk1s) then if mb4=0101 and mb3=1001 then mb4=0000;mb3=0000;clk1m=1; elsif mb3=1001then mb3=0000;mb4=mb4+1;clk1m=0; else mb3=mb3+1;clk1m=0; end if; end if; end process; process(zt,clk1m,rst)-秒表时针计数器 begin if zt=011 and rst=0 then mb6=0000;mb5=0000; elsif rising_edge(clk1m) then if mb6=0101 and mb5=1001 then mb5=0000;mb6=0000; elsif mb5=1001then mb5=0000;mb6=mb6+1; else mb5=mb5+1; end if; end if; end process; end; 4.9倒计时模块倒计时模块 library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; use ieee.std_logic_arith.all; entity djs is-实体声明 port(rst,startdjs,add,dec,clk,clk100ms:in std_logic;-按键及脉冲输入 zt:in std_logic_vector(2 downto 0);-状态输入 djs1,djs2,djs3,djs4,djs5,djs6:buffer std_logic_vector(3 downto 0);-倒计时显示输出 leddjs:out std_logic-倒计时提示灯 ); end; architecture data of djs is signal clk1s,clk1m,clkd,clkg:std_logic;-进位脉冲 signal js,js1:std_logic_vector(0 downto 0);-按键计时信号 signal s1,s2,s3,s4,s5,s6,ss1,ss2,ss3,ss4,ss5,ss6:std_logic_vector(3 downto 0);- 倒 计 时设置时间信号和倒计时减法器时间信号 begin-结构体 process(js,clk100ms,dec)-分针按键计时 begin if js=1 then clkd=clk100ms; else clkd=not dec; end if; end process; process(js1,clk100ms,add)-时针按键计时 begin if js1=1 then clkg=clk100ms; else clkg=not add; end if; end process; process(zt,add,dec,rst,startdjs,clk,clkd,clkg)-倒计时设置时间 begin if zt=100 and rst=0then-异步复位 s6=0000;s5=0000;s4=0101;s3=1001; elsif zt=100 and startdjs=0 then if dec=0 then if rising_edge(clk) then js=js+1; if js=1 then js=1; end if; end if; else js=0; end if; if add=0 then if rising_edge(clk) then js1=js1+1; if js1=1 then js1=1; end if; end if; else js1=0; end if; if rising_edge(clkd) then if s4=0101 and s3=1001 then s4=0000;s3=0000; elsif s3=1001 then s3=0000;s4=s4+1; else s3=s3+1; end if; end if; if rising_edge(clkg) then if s6=0101 and s5=1001 then s6=0000;s5=0000; elsif s5=1001 then s5=0000;s6=s6+1; else s5=s5+1; end if; end if; end if; end process; process(zt,startdjs,clk,s1,s2,s3,s4,s5,s6,ss1,ss2,ss3,ss4,ss5,ss6)-倒计时减法器 begin if zt=100 and startdjs=0 then ss1=0000;ss2=0000; elsif zt=100 and startdjs=1 then if rising_edge(clk) then if ss3=0000 and ss4=0000 and ss5=0000 and ss6=0000 then ss2=0000 ;ss1=0000; elsif ss2=0000 and ss1=0000 then ss2=1001;ss1=1001;clk1s=1; elsif ss1=0000 then ss1=1001;ss2=ss2-1;clk1s=0; else ss1=ss1-1;clk1s=0; end if; end if; end if; end process; process(zt,startdjs,clk1s,s3,s4)-倒计时减法器秒针部分 begin if zt=100 and startdjs=0 then ss3=s3;ss4=s4; elsif rising_edge(clk1s) then if ss3=0000 and ss4=0000 and ss5=0000 and ss6=0000 then ss3=0

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论