基于multisim的定时器课程设计
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2.2
通过初步设计,可以确定该系统应该包括置数电路,秒脉冲发生器,计数器,译码显示电路,时序控制电路,警报电路等6部分构成。其中置数电路,计时器和时序控制电路是该系统的主要部分。置数电路完成置数,计数器的主要功能是完成倒计时功能,而控制电路具有计数器的启动计数,暂停,连续计数等功能。为了满足系统的设计要求,在设计控制电路时,应正确处理各个信号的时序关系。在操作直接清零开关时,计时器清零,显示器显示零。当启动开关置1时,控制电路应封锁时钟信号cp,通过置数器置数,计数器完成置数功能,显示器显示所置的数。当启动开关置0时,计数器开始计数。当暂停,连续计数开关拨在暂停位置上,计数器停止计数,处于保持状态;当暂停,连续计数开关拨在连续计数的位置上,计数器继续递减计数。当计数器递减计数到0的时,封锁时钟信号cp,使计数器处于保持状态。
end if;
if s(9)='1'then tmpa:="1001";
elsif s(8)='1' then tmpa:="1000";
elsif s(7)='1'then tmpa:="0111";
elsif s(6)='1'then tmpa:="0110";
elsif s(5)='1'then tmpa:="0101";
图3.9
3.1.6
控制电路主要实现异步清零,异步置数,暂停\连续计数等功能。具体电路图如下。
图3.10
总电路如图3.11所示:
图3.11
3.2
3.2.1
点击File选中New Project Wizard,填入相应的工程名字,工程名字与实体名相同。如下图所示。
图3.12
连击两次Next,填入相应的参数,点击Finish即完成工程的建立,如图所示。
if pld='1'then
if d(9)='1'then tmpb:="1001";
elsif d(8)='1' then tmpb:="1000";
elsif d(7)='1'then tmpb:="0111";
elsif d(6)='1'then tmpb:="0110";
elsif d(5)='1'then tmpb:="0101";
elsif d(4)='1'then tmpb:="0100";
elsif d(3)='1'then tmpb:="0011";
elsif d(2)='1'then tmpb:="0010";
elsif d(1)='1'then tmpb:="0001";
elsif d(0)='1'then tmpb:="0000";
2
2.1
我们可以用优先编码器74ls147来完成1~99秒的置数功能,用555时基电路构成的多谐振荡器来产生频率为1HZ的脉冲输出周期为1秒的方波脉冲,将该方波脉冲信号送到计数器74ls192的cp减计数脉冲端,在通过译码器74ls48把输入的8421BCD码经过内部作和电路“翻译”成七段(a,b,c,d,e,f,g)输出,显示十进制数,然后在适当的位置设置开关或控制电路即可实现计数器的清零,启动和暂停\连续,译码显示电路与亮灯及光电报警灯功能。
port(clk,clr:in std_logic;
pld,enb:in std_logic;
warn:out std_logic;
s1,s0:out std_logic_vector(6 downto 0);
d:in std_logic_vector(9 downto 0);
s:in std_logic_vector(9 downto 0));
在电路完成后,将置数开关拨到有效,并置数为30s,显示器显示30字数。
图4.1
将置数开关拨到无效,则开始计数电路进行减计数,并在显示电路中显示相应的剩余时间,在此过程中电路的暂停、连续、清零等功能均得以实现。在倒计时为零时,二极管亮,蜂鸣器发出响声。
4.2
对编译成功的程序进行仿真
图4.2
由仿真的波形图可知当enb为高电平时,clr清零端为高电平时,显示器显示零。当置数pld为高电平时,置数为30,则显示器显示30.当置数pld为低电平时,开始减计数。减为零时,warn为高电平有效。
公式计算:
T1=(R1+R2)C ln 2;
T2=R2Cln2;
振荡周期:T=T1+T2=0.7(R1+2R2)C=1(s)
若取C=10uF,结合实际选取电阻为600Ω,200Ω。
图3.1内部管脚图图3.2N555多谐振荡电路图
3.1.2
置数电路利用74LS147优先编码器中优先级别高的信号排斥级别低的信号这一特点来置数,并将输出的编码输入到计数电路中,即完成置数功能。
variable tmpb:std_logic_vector(3 downto 0);
variable tmpwarn:std_logic;
begin
if clr='1'then tmpa:="0000";tmpb:="0000";tmpwarn:='0';
elsif clk'event and clk='1'then
(a)(b)
图3.3 74LS147管脚图
本次实验的置数电路可以按图3.4接:
图3.4
3.1.3
本次课程设计中选用74LS192来实现减法的计数功能。图3.5是74LS192的管脚图。
(a)(b)
图3.5
74LS192具有下述功能:
异步清零:CLR=1,Q3Q2Q1Q0=0000.
异步置数:CLR=0,PL=0,Q0Q1Q2Q3=D0D1D2D3.
保持:CLR=0,~PL=1,UP=DOWN=1,Q0Q1Q2Q3保持原状态
加计数:CLR=0,~PL=1,UP-=CP,DOWN=1,Q0Q1Q2Q3按加法规律计数
减计数:CLR=0,~PL=1,DOWN=CP,UP=1,Q1Q2Q3Q4按减法规律计数
按照课程设计任务书要求,需要计时在1~99秒内,所以设计中需要两个十进制的计数器。我们可以用两片74LS192来实现。计数电路中的两片加计数脉冲输入端都要接高电平,且要将低片位的借位信号加到高位片的减计数脉冲输入端。高位片的借位信号控制警报电路。具体接法如图3.6。
图3.13
3.2.2
(1)点击File,New,VHDL File,OK一个编辑窗口如图所示
图3.14
(2)在编辑框里填写如下程序
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity count_30 is
elsif s(4)='1'then tmpa:="0100";
elsif s(3)='1'then tmpa:="0011";
elsif s(2)='1'then tmpa:="0010";
elsif s(1)='1'then tmpa:="0001";
elsif s(0)='1'then tmpa:="0000";
系统设计框图如图2.1所示。
图2.1
3
3.1
3.1.1
用555集成电路组成多谐振荡电路为系统提供时钟秒脉冲,555定时器应用为多谐振荡电路时,当电源接头vcc通过电阻R1,R2向电容C充电,其上电压按指数规律上升,当u上升到2/3 Vcc,会使比较器C1输出翻转,输出电压为零,同时放电管T导通,电容C通过R2放电;当电容电压下降到1/3Vcc,比较器C2工作输出高电平,C放电终止,Vcc通过R1,R2又开始充电;周而复始,形成振荡。则其周期与放电时间有关,也就是与外接元件有关,不受电压电源变化影响。
本设计为倒计时计时器,其作用范围在1~99s,具有直接清零,启动,暂停和连续以及具有光电报警功能,同时应用了气短数码管来显示时间。此计时器有了启动,暂停和连续功能,可以方便地实现断点计时功能,当计时器递减到零时,会发出光电报警信号。本设计完成中途计时功能,实现了在许多的特定场合进行实践追踪的功能,在社会生活也具有广泛的价值。
1
随着社会文明的进步和科学技术的发展,先进的电子技术在各个近代跨学科门类和技术领域占有不可或缺的核心地位。在我国现代化得建设的发展进程中,数字电子技术在国民经济和科学研究各个领域的应用也越来越广泛。而计时器恰恰是数字电子技术的一个重要组成部分,在许多的领域中计时器均得到普遍应用,诸如在体育比赛中,定时报警器,游戏中的倒计时器,交通信号灯,红绿灯,行人灯,还可以做时间提醒设备等,由此可见计时器在现代社会是何其重要。
when"1000"=>s0<="1111111";
when"1001"=>s0<="1101111";
when others=>s0<="0000000";
end case;
end process;
end a;
(3)存盘并进行编译,如图所示。
图3.14
4
4.1
将555的输出端接到示波器上观察到的波形为一脉冲,其频率近似为一秒。基本符合课程设计中所需秒信号的要求。
接入脉冲信号
图3.6
3.1.4
译码电路的功能是将计数器的输出代码进行翻译,编程相应的数字。用于驱动LED七段数码管的译码器常用的又有74LS48。图3.6是74LS48的管脚图。
图3.6
图3.7是74LS8的真值表。
图3.7
本次实验译码显示电路按图3.8接。
图3.8
3.1.5
警报电路由二极管和蜂鸣器组成,利用二极管的单向导通性,当高位片变为0时,其借位端为低电平,则二极管导通,蜂鸣器发出响声,完成警报功能。本实验的警报电路按图3.9接。
when"1001"=>s1<="1101111";
when others=>s1<="0000000";
end case;
end process;
process(ss)
begin
case ss is
when"0000"=>s0<="0111111";
when"0001"=>s0<="0000110";
when"0011"=>s1<="1001111";
when"0100"=>s1<="1100110";
when"0101"=>s1<="1101101";
when"0110"=>s1<="1111101";
when"0111"=>s1<="0000111";
when"1000"=>s1<="1111111";
end if;
tmpwarn:='0';
elsif enb='1'then
if tmpa="0000"then
if tmpb/="0000"then
tmpa:="1001";
tmpb:=tmpb-1;
else
tmpwarn:='1';
end if;
else tmpa:=tmpa-1;
end if;
end if;
end if;
ss<=tmpa;dd<=tmpb;warn<=tmpwarn;
end process;
peo2:process(dd)
begin
case dd is
when"0000"=>s1<="0111111";
when"0001"=>s1<="0000110";
when"0010"=>s1<="1011011";
总结
课程设计需要的是活学活用所涉及的知识。经过这次课程设计,才明白生产一电子产品是多么的不容易。里面的过程要求我要非常细心,要想设计并制作一个非常完美实用的数字电路,确实是一个不轻松的工作,不仅要有动手的能力,还要有灵活应用芯片理论的功能,为此需要阅读大量关于这方面的书籍。
在本次的课程设计中通过自己选题,找材料,分析,设计等,掌握了一些软件的应用,为以后的学习垫下了铺垫。整个设计实现了从单一的理论知识到解决实际问题的转变。通过本次实验我最大的收获就是提高了自身的动手能力和培养了我寻求解决问题的能力。在设计中,我充分的应用我们所学的理论知识,例如:集成电路74LS系列、二极管、整时电路555等元件的应用。这次课程设计使我受益匪浅,在摸索该如何设计电路使之实现所需功能的过程中,特别有趣,培养了我的设计思维,同时也积极的请教了同学及老师,在他们的帮助下我也学到了很多。在让我体会到设计电路艰辛的同时,更让我体会到成功的喜悦和快乐。本次的实验也鞭策我要更加努力学习,并且有坚持不懈的精神!
end count_30;
architecture a of count_30 is
signal dd:std_logic_vector(3 downto0);
signal ss:std_logic_vector(3 downto0);
begin
pro1:process(clk,clr,enb)
variable tmpa:std_logic_vector(3 downto 0);
when"0010"=>s0<="1011011";
when"0011"=>s0<="1001111";
when"0100"=>s0<="1100110";
when"0101"=>s0<="1101101";
when"0110"=>s0<="1111101";
when"0111"=>s0<="0000111";
通过初步设计,可以确定该系统应该包括置数电路,秒脉冲发生器,计数器,译码显示电路,时序控制电路,警报电路等6部分构成。其中置数电路,计时器和时序控制电路是该系统的主要部分。置数电路完成置数,计数器的主要功能是完成倒计时功能,而控制电路具有计数器的启动计数,暂停,连续计数等功能。为了满足系统的设计要求,在设计控制电路时,应正确处理各个信号的时序关系。在操作直接清零开关时,计时器清零,显示器显示零。当启动开关置1时,控制电路应封锁时钟信号cp,通过置数器置数,计数器完成置数功能,显示器显示所置的数。当启动开关置0时,计数器开始计数。当暂停,连续计数开关拨在暂停位置上,计数器停止计数,处于保持状态;当暂停,连续计数开关拨在连续计数的位置上,计数器继续递减计数。当计数器递减计数到0的时,封锁时钟信号cp,使计数器处于保持状态。
end if;
if s(9)='1'then tmpa:="1001";
elsif s(8)='1' then tmpa:="1000";
elsif s(7)='1'then tmpa:="0111";
elsif s(6)='1'then tmpa:="0110";
elsif s(5)='1'then tmpa:="0101";
图3.9
3.1.6
控制电路主要实现异步清零,异步置数,暂停\连续计数等功能。具体电路图如下。
图3.10
总电路如图3.11所示:
图3.11
3.2
3.2.1
点击File选中New Project Wizard,填入相应的工程名字,工程名字与实体名相同。如下图所示。
图3.12
连击两次Next,填入相应的参数,点击Finish即完成工程的建立,如图所示。
if pld='1'then
if d(9)='1'then tmpb:="1001";
elsif d(8)='1' then tmpb:="1000";
elsif d(7)='1'then tmpb:="0111";
elsif d(6)='1'then tmpb:="0110";
elsif d(5)='1'then tmpb:="0101";
elsif d(4)='1'then tmpb:="0100";
elsif d(3)='1'then tmpb:="0011";
elsif d(2)='1'then tmpb:="0010";
elsif d(1)='1'then tmpb:="0001";
elsif d(0)='1'then tmpb:="0000";
2
2.1
我们可以用优先编码器74ls147来完成1~99秒的置数功能,用555时基电路构成的多谐振荡器来产生频率为1HZ的脉冲输出周期为1秒的方波脉冲,将该方波脉冲信号送到计数器74ls192的cp减计数脉冲端,在通过译码器74ls48把输入的8421BCD码经过内部作和电路“翻译”成七段(a,b,c,d,e,f,g)输出,显示十进制数,然后在适当的位置设置开关或控制电路即可实现计数器的清零,启动和暂停\连续,译码显示电路与亮灯及光电报警灯功能。
port(clk,clr:in std_logic;
pld,enb:in std_logic;
warn:out std_logic;
s1,s0:out std_logic_vector(6 downto 0);
d:in std_logic_vector(9 downto 0);
s:in std_logic_vector(9 downto 0));
在电路完成后,将置数开关拨到有效,并置数为30s,显示器显示30字数。
图4.1
将置数开关拨到无效,则开始计数电路进行减计数,并在显示电路中显示相应的剩余时间,在此过程中电路的暂停、连续、清零等功能均得以实现。在倒计时为零时,二极管亮,蜂鸣器发出响声。
4.2
对编译成功的程序进行仿真
图4.2
由仿真的波形图可知当enb为高电平时,clr清零端为高电平时,显示器显示零。当置数pld为高电平时,置数为30,则显示器显示30.当置数pld为低电平时,开始减计数。减为零时,warn为高电平有效。
公式计算:
T1=(R1+R2)C ln 2;
T2=R2Cln2;
振荡周期:T=T1+T2=0.7(R1+2R2)C=1(s)
若取C=10uF,结合实际选取电阻为600Ω,200Ω。
图3.1内部管脚图图3.2N555多谐振荡电路图
3.1.2
置数电路利用74LS147优先编码器中优先级别高的信号排斥级别低的信号这一特点来置数,并将输出的编码输入到计数电路中,即完成置数功能。
variable tmpb:std_logic_vector(3 downto 0);
variable tmpwarn:std_logic;
begin
if clr='1'then tmpa:="0000";tmpb:="0000";tmpwarn:='0';
elsif clk'event and clk='1'then
(a)(b)
图3.3 74LS147管脚图
本次实验的置数电路可以按图3.4接:
图3.4
3.1.3
本次课程设计中选用74LS192来实现减法的计数功能。图3.5是74LS192的管脚图。
(a)(b)
图3.5
74LS192具有下述功能:
异步清零:CLR=1,Q3Q2Q1Q0=0000.
异步置数:CLR=0,PL=0,Q0Q1Q2Q3=D0D1D2D3.
保持:CLR=0,~PL=1,UP=DOWN=1,Q0Q1Q2Q3保持原状态
加计数:CLR=0,~PL=1,UP-=CP,DOWN=1,Q0Q1Q2Q3按加法规律计数
减计数:CLR=0,~PL=1,DOWN=CP,UP=1,Q1Q2Q3Q4按减法规律计数
按照课程设计任务书要求,需要计时在1~99秒内,所以设计中需要两个十进制的计数器。我们可以用两片74LS192来实现。计数电路中的两片加计数脉冲输入端都要接高电平,且要将低片位的借位信号加到高位片的减计数脉冲输入端。高位片的借位信号控制警报电路。具体接法如图3.6。
图3.13
3.2.2
(1)点击File,New,VHDL File,OK一个编辑窗口如图所示
图3.14
(2)在编辑框里填写如下程序
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity count_30 is
elsif s(4)='1'then tmpa:="0100";
elsif s(3)='1'then tmpa:="0011";
elsif s(2)='1'then tmpa:="0010";
elsif s(1)='1'then tmpa:="0001";
elsif s(0)='1'then tmpa:="0000";
系统设计框图如图2.1所示。
图2.1
3
3.1
3.1.1
用555集成电路组成多谐振荡电路为系统提供时钟秒脉冲,555定时器应用为多谐振荡电路时,当电源接头vcc通过电阻R1,R2向电容C充电,其上电压按指数规律上升,当u上升到2/3 Vcc,会使比较器C1输出翻转,输出电压为零,同时放电管T导通,电容C通过R2放电;当电容电压下降到1/3Vcc,比较器C2工作输出高电平,C放电终止,Vcc通过R1,R2又开始充电;周而复始,形成振荡。则其周期与放电时间有关,也就是与外接元件有关,不受电压电源变化影响。
本设计为倒计时计时器,其作用范围在1~99s,具有直接清零,启动,暂停和连续以及具有光电报警功能,同时应用了气短数码管来显示时间。此计时器有了启动,暂停和连续功能,可以方便地实现断点计时功能,当计时器递减到零时,会发出光电报警信号。本设计完成中途计时功能,实现了在许多的特定场合进行实践追踪的功能,在社会生活也具有广泛的价值。
1
随着社会文明的进步和科学技术的发展,先进的电子技术在各个近代跨学科门类和技术领域占有不可或缺的核心地位。在我国现代化得建设的发展进程中,数字电子技术在国民经济和科学研究各个领域的应用也越来越广泛。而计时器恰恰是数字电子技术的一个重要组成部分,在许多的领域中计时器均得到普遍应用,诸如在体育比赛中,定时报警器,游戏中的倒计时器,交通信号灯,红绿灯,行人灯,还可以做时间提醒设备等,由此可见计时器在现代社会是何其重要。
when"1000"=>s0<="1111111";
when"1001"=>s0<="1101111";
when others=>s0<="0000000";
end case;
end process;
end a;
(3)存盘并进行编译,如图所示。
图3.14
4
4.1
将555的输出端接到示波器上观察到的波形为一脉冲,其频率近似为一秒。基本符合课程设计中所需秒信号的要求。
接入脉冲信号
图3.6
3.1.4
译码电路的功能是将计数器的输出代码进行翻译,编程相应的数字。用于驱动LED七段数码管的译码器常用的又有74LS48。图3.6是74LS48的管脚图。
图3.6
图3.7是74LS8的真值表。
图3.7
本次实验译码显示电路按图3.8接。
图3.8
3.1.5
警报电路由二极管和蜂鸣器组成,利用二极管的单向导通性,当高位片变为0时,其借位端为低电平,则二极管导通,蜂鸣器发出响声,完成警报功能。本实验的警报电路按图3.9接。
when"1001"=>s1<="1101111";
when others=>s1<="0000000";
end case;
end process;
process(ss)
begin
case ss is
when"0000"=>s0<="0111111";
when"0001"=>s0<="0000110";
when"0011"=>s1<="1001111";
when"0100"=>s1<="1100110";
when"0101"=>s1<="1101101";
when"0110"=>s1<="1111101";
when"0111"=>s1<="0000111";
when"1000"=>s1<="1111111";
end if;
tmpwarn:='0';
elsif enb='1'then
if tmpa="0000"then
if tmpb/="0000"then
tmpa:="1001";
tmpb:=tmpb-1;
else
tmpwarn:='1';
end if;
else tmpa:=tmpa-1;
end if;
end if;
end if;
ss<=tmpa;dd<=tmpb;warn<=tmpwarn;
end process;
peo2:process(dd)
begin
case dd is
when"0000"=>s1<="0111111";
when"0001"=>s1<="0000110";
when"0010"=>s1<="1011011";
总结
课程设计需要的是活学活用所涉及的知识。经过这次课程设计,才明白生产一电子产品是多么的不容易。里面的过程要求我要非常细心,要想设计并制作一个非常完美实用的数字电路,确实是一个不轻松的工作,不仅要有动手的能力,还要有灵活应用芯片理论的功能,为此需要阅读大量关于这方面的书籍。
在本次的课程设计中通过自己选题,找材料,分析,设计等,掌握了一些软件的应用,为以后的学习垫下了铺垫。整个设计实现了从单一的理论知识到解决实际问题的转变。通过本次实验我最大的收获就是提高了自身的动手能力和培养了我寻求解决问题的能力。在设计中,我充分的应用我们所学的理论知识,例如:集成电路74LS系列、二极管、整时电路555等元件的应用。这次课程设计使我受益匪浅,在摸索该如何设计电路使之实现所需功能的过程中,特别有趣,培养了我的设计思维,同时也积极的请教了同学及老师,在他们的帮助下我也学到了很多。在让我体会到设计电路艰辛的同时,更让我体会到成功的喜悦和快乐。本次的实验也鞭策我要更加努力学习,并且有坚持不懈的精神!
end count_30;
architecture a of count_30 is
signal dd:std_logic_vector(3 downto0);
signal ss:std_logic_vector(3 downto0);
begin
pro1:process(clk,clr,enb)
variable tmpa:std_logic_vector(3 downto 0);
when"0010"=>s0<="1011011";
when"0011"=>s0<="1001111";
when"0100"=>s0<="1100110";
when"0101"=>s0<="1101101";
when"0110"=>s0<="1111101";
when"0111"=>s0<="0000111";