第一篇:数电课程设计(xiexiebang推荐)
数电课程设计
基于vhdl数字电子时钟
华侨大学 2009级电子信息工程A班 学生:刘飞 学号:0916103045 1实验目的及要求.A:锻炼自己的实际动手能力,学习如何编写相关程序,加强实践。B:设计一个24进制电子时钟,并实现其基本校时功能。
2.时钟的功能
A、按键消抖,整点报时,音乐闹钟,秒表,时分秒校时,秒的清零,达到23时59分59秒
3.设计方案
A它由分频器、计数器、译码器显示器和校时扫描,使能等电路组成。B秒计数器满60后向分计数器进位,分计数器满60后向小时计数器进位,小时计数器按照24进制规律计数。计数器的输出分别经译码器送显示器按键切换显示。计时出现误差时,可以用校时电路校时、校分。
C可设置闹钟,当达到闹钟时间,蜂鸣器就会播放音乐。当到达整点时蜂鸣器会发出5秒钟的叫声,完成其整点报时功能。
D秒表部分由其单独模块构成。其 设置与时钟类似,构成相对简单,可仿照时钟完成。
E总体讲它是由各模块分块构成,(自我感觉来说首先确定其功能想象出原理图,最后一步一步地添加各个功能,这对于我们初学者来说十分重要)。
F将各个模块首先一部分一部分进行仿真,不断改正,连接起来,想成一个整体。如果需要相关的门及触发器,可以通过软件平台中查找,尤其是消抖需要的触发器。
G最后进行硬件测试,并反复调时,观察其计时是否准确,各个模块的功能是否正确。如果出现错误,要进行自顶向下的查找,同时更要结合其功能模块,查错,最后完成时钟
4.原理图为
5.模块(各个模块仿真结果正常)
A.时分秒模块都相对简单,其介绍就不做多说 B.校时功能是在分秒模块内添加一个控制键,让其进行调时分时,完成其功能。C.闹钟模块设置,利用一个切换键让闹钟与其他显示进行切换显示,其设定功能与时分共用。即设置多功能按键 D.秒表模块是单独设置的,它也利用相关的多功能按键。E.切换显示模块稍微简单,只需添加控制开关即可,但要开关要与相关的功能键对应。F.译码显示模块是对前面需要译码的信息进行译码显示,此模块设置为最后连接的模块,可节约资源,减少成本。G.扫描模块主要是应对我们硬件不能同时显示而设置的,相对难度大一点,因为它要考虑到输出的数码显示使能端,和扫描频率大小的设定这这都需要自己亲自测试,毕竟自己第一次使用这种类型的fpga开发板.H.分频模块,由于开发板里面只有一个时钟源50M,我们若要得到相关频率就必须对其进行分频,输出。I.消抖主要通过D触发器完成其功能,并且接上一定的时钟信号。5.具体程序如下
1. 秒模块
进位信号正常,为60进制,较分信号也正常,实现60进制带有进位和清零功能的秒计数模块SECOND,输入为1Hz脉冲和高电平有效的清零信号CLR,输出秒个位、十位及进位信号CO。
library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity second is port(mode1 :in std_logic;clk,reset,semin:in std_logic;sec1,sec0:out std_logic_vector(3 downto 0);enmin:out std_logic);end second;architecture art of second is signal enmin_2:std_logic;signal co:std_logic;begin process(clk,semin,mode1)variable cnt1,cnt0:std_logic_vector(3 downto 0);begin if mode1='0'then enmin_2<=(semin and clk);end if;if reset='1' then cnt1:=“0000”;cnt0:=“0000”;
elsif clk'event and clk='1' then if cnt1=“0101” and cnt0=“1001”then
co<='1';
cnt1:=“0000”;
cnt0:=“0000”;
elsif cnt0<“1001”then
cnt0:=cnt0+1;
co<='0';else
cnt0:=“0000”;
if cnt1<“0101” then
cnt1:=cnt1+1;
co<='0';
else
cnt1:=“0000”;
co<='0';
end if;end if;end if;sec1<=cnt1;sec0<=cnt0;enmin<=(co or enmin_2);end process;end art;
仿真结果正常
2.分模块
进位信号正常,为60进制,较时信号也正常
LIBRARY ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;ENTITY minute10 IS
PORT(en1 : IN STD_LOGIC;
min1,min0
:out std_logic_vector(3 downto 0);
enhour: OUT STD_LOGIC);END minute10;ARCHITECTURE art OF minute10 IS signal enmin_2:std_logic;signal bco:std_logic;BEGIN
Process(en1)variable cnt1,cnt0:std_logic_vector(3 downto 0);begin
if en1'event and en1='1' then
if cnt1=“0101”and cnt0=“1001” then
bco<='1';
cnt1:=“0000”;
cnt0:=“0000”;
elsif cnt0<“1001”then
cnt0:=cnt0+1;
bco<='0';
else
cnt0:=“0000”;
if cnt1<“0101”then
cnt1:=cnt1+1;
bco<='0';
else
cnt1:=“0000”;
bco<='0';
end if;
end if;
end if;
min1<=cnt1;
min0<=cnt0;
enhour<=bco;
end process;end art;
仿真结果正常
3.时模块
进位信号正常,为24进制。
library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity hour is port(mode3 :in std_logic;
en2
:in std_logic;
h1,h0
:out std_logic_vector(3 downto 0));end hour;architecture hour_arc of hour is begin process(en2)variable cnt1,cnt0:std_logic_vector(3 downto 0);begin
if en2'event and en2='1' then if cnt1=“0010”and cnt0=“0011” then cnt0:=“0000”;cnt1:=“0000”;elsif cnt0<“1001”then cnt0:=cnt0+1;else cnt0:=“0000”;cnt1:=cnt1+1;end if;end if;h1<=cnt1;h0<=cnt0;end process;end hour_arc;
仿真结果正常
4.第一个切换模块(不同于第二个)此模块主要用于闹钟显示与时间显示的切换
LIBRARY ieee;use ieee.std_logic_1164.all;ENTITY alarm IS
PORT(amin1,amin0,ah1,ah0,min1,min0,h1,h0
:in std_logic_vector(3 downto 0);
clk:in std_logic;
mode6
:IN STD_LOGIC;
a1,a0,b1,b0
:OUT std_logic_vector(3 downto 0));END alarm;ARCHITECTURE art OF alarm IS BEGIN
Process(mode6,min1,min0,h1,h0,amin1,amin0,ah1,ah0)begin
if mode6='0' then
a1<=min1;
a0<=min0;
b1<=h1;
b0<=h0;
else
a1<=amin1;
a0<=amin0;
b1<=ah1;
b0<=ah0;
end if;end process;end art;仿真结果正常
5第二个切换显示模块
此模块主要用于切换秒表模块与其他模块的显示
LIBRARY ieee;use ieee.std_logic_1164.all;ENTITY alarm2 IS
PORT(tmin1,tmin0,tsec0,tsec1,a1,a0,b0,b1,c1,c0,tsecp0,tsecp1
:in std_logic_vector(3 downto 0);
mode6
:IN STD_LOGIC;
ta1,ta0,tb1,tb0,tc0,tc1
:OUT std_logic_vector(3 downto 0));END alarm2;ARCHITECTURE art OF alarm2 IS BEGIN
Process(mode6,tmin1,tmin0,tsec0,tsec1,a1,a0,b0,b1,c1,c0,tsecp0,tsecp1)begin
if mode6='0' then
ta1<=a1;
ta0<=a0;
tb1<=b1;
tb0<=b0;
tc1<=c1;
tc0<=c0;
else
ta1<=tsec1;
ta0<=tsec0;
tb1<=tmin1;
tb0<=tmin0;
tc0<=tsecp0;
tc1<=tsecp1;
end if;end process;end art;6闹钟模块 library ieee;use ieee.std_logic_1164.all;entity ts_zdbs is port(m1,m0,s6,s7
:in std_logic_vector(3 downto 0);
clk :in std_logic;
q512
:out std_logic);end ts_zdbs;architecture art of ts_zdbs is begin
process(m1,clk,m0,s7,s6)begin if m1=“0101”and m0=“1001”and s7=“0101” then if s6=“1001” or s6=“1000” or s6=“0111” or s6=“0110” then q512<=clk;else
q512<='1';end if;end if;end process;end art;7闹钟的分模块
用于设置分钟的的定时
LIBRARY ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;ENTITY aminute0 IS
PORT(mode4 :in std_logic;
s4: IN STD_LOGIC;
amin1,amin0
:out std_logic_vector(3 downto 0));end aminute0;ARCHITECTURE art OF aminute0 IS BEGIN
Process(mode4,s4)variable cnt1,cnt0:std_logic_vector(3 downto 0);begin
if mode4='1' then
if s4'event and s4='1' then
if cnt1=“0101”and cnt0=“1001” then
cnt1:=“0000”;
cnt0:=“0000”;
elsif cnt0<“1001”then
cnt0:=cnt0+1;
else
cnt0:=“0000”;
if cnt1<“0101”then
cnt1:=cnt1+1;
else
cnt1:=“0000”;
end if;
end if;
end if;
amin1<=cnt1;
amin0<=cnt0;
end if;
end process;end art;
仿真结果正常
8闹钟的时模块 设置时的大小
library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity bahour is port(mode5
:in std_logic;
t5
:in std_logic;
ah1,ah0
:out std_logic_vector(3 downto 0));end bahour;architecture bahour_arc of bahour is begin process(mode5,t5)variable cnt1,cnt0:std_logic_vector(3 downto 0);begin
if mode5='1' then
if t5'event and t5='1' then
if cnt1=“0010”and cnt0=“0011”then cnt0:=“0000”;cnt1:=“0000”;elsif cnt0<“1001”then cnt0:=cnt0+1;else cnt0:=“0000”;cnt1:=cnt1+1;end if;end if;end if;
仿真结果正常
至于外加音乐模块十分复杂,可要可不要(这个模块是通过抄写得到的)9.分频模块1 产生1HZ的时钟信号
library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity fasheng1 is port(clk_in:in std_logic;
clk_out:out std_logic);end fasheng1;architecture arc of fasheng1 is signal number:integer range 0 to 25000000;signal current_clk: std_logic;begin
clk_out<=current_clk;process(clk_in)begin
if clk_in'event and clk_in='0' then if number<=25000000 then
number<=number+1;else number<=0;current_clk<=not current_clk;--shuchushizhongxinhao end if;end if;end process;end arc;,这个模块不好仿真,因为数字太大,利用改小测试之后,正常
10.分频模块2 产生10kHZ的数码管扫描信号,以及用作消抖时钟信号
library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity fasheng2 is port(clk_in:in std_logic;
clk_out:out std_logic);end fasheng2;architecture arc of fasheng2 is signal number:integer range 0 to 2500;signal current_clk: std_logic;begin
clk_out<=current_clk;process(clk_in)begin
if clk_in'event and clk_in='0' then if number<=2500 then
number<=number+1;else number<=0;
current_clk<=not current_clk;--shuchushizhongxinhao end if;end if;end process;end arc;这个模块不好仿真,因为数字太大,利用改小测试之后,也正常
11整点报时模块
其中报时时间为5秒,clk为10kHZ library ieee;use ieee.std_logic_1164.all;entity ts_zdbs is port(m1,m0,s6,s7
:in std_logic_vector(3 downto 0);
clk :in std_logic;
q
:out std_logic);end ts_zdbs;architecture art of ts_zdbs is begin
process(m1,clk,m0,s7,s6)begin if m1=“0101”and m0=“1001”and s7=“0101” then if s6=“1001” or s6=“1000” or s6=“0111” or s6=“0110” then q<=clk;else
q<='1';end if;end if;end process;end art;12.8进制计数器,其输出作为数码管使能,library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity coutn8 is port(sel:in std_logic_vector(2 downto 0);
dp: out std_logic;
enf:out std_logic_vector(7 downto 0));end coutn8;architecture
arc of coutn8 is signal en :std_logic_vector(7 downto 0);
begin
enf<=en;
dp<='1';process(sel)
begin
case sel is
when “000”=>en<=“01111111”;
when “001”=>en<=“10111111”;
when “010”=>en<=“11011111”;
when “011”=>en<=“11101111”;
when “100”=>en<=“11110111”;
when “101”=>en<=“11111011”;
when “110”=>en<=“11111101”;
when “111”=>en<=“11111110”;
end case;
end process;end arc;13译码模块 library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;entity decoderceshi is Port(din:in std_logic_vector(3 downto 0);
--四位二进制码输入 dout:out std_logic_vector(6 downto 0));--输出LED七段码 end decoderceshi;architecture Behavioral of decoderceshi is signal ddout:std_logic_vector(6 downto 0);begin dout(6 downto 0)<=ddout(6 downto 0);process(din)begin case din is when “0000” => ddout<=“0000001”;--0 when “0001” => ddout<=“1001111”;--1 when “0010” => ddout<=“0010010”;--2 when “0011” => ddout<=“0000110”;--3 when “0100” => ddout<=“1001100”;--4 when “0101” => ddout<=“0100100”;--5 when “0110” => ddout<=“0100000”;--6 when “0111” => ddout<=“0001111”;--7 when “1000” => ddout<=“0000000”;--8 when “1001” => ddout<=“0000100”;when others => ddout<=“1111110”;end case;end process;end Behavioral;仿真结果正常
14.扫描模块
library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;use ieee.std_logic_arith.all;entity SELTIMEceshi is
port(clk:in std_logic;------扫描时钟
sec1,sec0,min1,min0,h1,h0:in std_logic_vector(3 downto 0);-----分别为秒个位/时位;分个位/
daout:out std_logic_vector(3 downto 0);----------------输出
sel:out std_logic_vector(2 downto 0));-----位选信号 end SELTIMEceshi;architecture fun of SELTIMEceshi is
signal count:std_logic_vector(2 downto 0);----计数信号 begin
sel<=count;
process(clk)
begin
if(clk'event and clk='0')then
if(count>=“111”)then
count<=“000”;
else
count<=count+1;
end if;
end if;
case count is
when“111”=>daout<=“1011”;
when“110”=>daout<=“1010”;
when“101”=>daout<= sec0;----分个位
when“100”=>daout<= sec1;----分十位
when“011”=>daout<=min0;
----时个位
when“010”=>daout<=min1;----时十位
when“001”=>daout<=h0;
when others =>daout<=h1;
end case;
end process;end fun;15秒表模块 1.分频模块
产生100HZ的时钟信号
library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity fasheng100 is port(clk_in:in std_logic;
clk_out:out std_logic);end fasheng100;architecture arc of fasheng100 is signal number:integer range 0 to 250000;signal current_clk: std_logic;begin
clk_out<=current_clk;process(clk_in)begin
if clk_in'event and clk_in='0' then if number<=250000 then
number<=number+1;else number<=0;current_clk<=not current_clk;--shuchushizhongxinhao end if;end if;end process;end arc;2. 秒表整体模块
LIBRARY ieee;(顶层文件)use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity miao is port(clknew,cclr:in std_logic;
tsec0,tsec1,tmin0,tmin1,tsecp0,tsecp1:out std_logic_vector(3 downto 0));end miao;architecture arc of miao is component count100 port(clk0,clr:in std_logic;
secp0,secp1 :out std_logic_vector(3 downto 0);
dout1:out std_logic);end component;component tsecond port(enx1,clr:in std_logic;sec1,sec0:out std_logic_vector(3 downto 0);dout2:out std_logic);end component;component tminute0
PORT(enx2,clr
: IN STD_LOGIC;
min1,min0
:out std_logic_vector(3 downto 0));END component;signal kdout1,kdout2:std_logic;begin u1: count100 port map(clk0=>clknew,clr=>cclr,secp0=>tsecp0,secp1=>tsecp1,dout1=>kdout1);u2: tsecond port map(enx1=>kdout1,clr=>cclr,sec1=>tsec1,sec0=>tsec0,dout2=>kdout2);u3: tminute0 port map(enx2=>kdout2,clr=>cclr,min1=>tmin1,min0=>tmin0);end arc;
100进制模块 LIBRARY ieee;
use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity count100 is port(clk0,clr:in std_logic;
secp0,secp1 :out std_logic_vector(3 downto 0);
dout1:out std_logic);end count100;architecture arc of count100 is begin process(clk0,clr)variable cnt0,cnt1:std_logic_vector(3 downto 0);begin
if clr='1' then cnt0:=“0000”;cnt1:=“0000”;elsif clk0'event and clk0='1' then
if cnt0=“1001” and cnt1=“1001” then cnt0:=“0000”;cnt1:=“0000”;dout1<='1';elsif
cnt0<“1001”then
cnt0:=cnt0+1;
dout1<='0';else
cnt0:=“0000”;
if cnt1<“1001” then
cnt1:=cnt1+1;
dout1<='0';
else
cnt1:=“0000”;
dout1<='0';
end if;end if;end if;secp1<=cnt1;secp0<=cnt0;end process;end arc;60进制秒模块 library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity tsecond is port(enx1,clr:in std_logic;sec1,sec0:out std_logic_vector(3 downto 0);dout2:out std_logic);end tsecond;architecture art of tsecond is begin process(enx1,clr)variable cnt1,cnt0:std_logic_vector(3 downto 0);begin if clr='1' then cnt1:=“0000”;cnt0:=“0000”;elsif enx1'event and enx1='1' then if cnt1=“0101” and cnt0=“1001”then
dout2<='1';
cnt1:=“0000”;
cnt0:=“0000”;
elsif cnt0<“1001”then
cnt0:=cnt0+1;
dout2<='0';else
cnt0:=“0000”;
if cnt1<“0101” then
cnt1:=cnt1+1;
dout2<='0';
else
cnt1:=“0000”;
dout2<='0';
end if;end if;end if;sec1<=cnt1;sec0<=cnt0;end process;end art;60进制分钟模块 LIBRARY ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;ENTITY tminute0 IS
PORT(enx2,clr
: IN STD_LOGIC;
min1,min0
:out std_logic_vector(3 downto 0));END tminute0;ARCHITECTURE art OF tminute0 IS BEGIN
Process(enx2,clr)variable cnt1,cnt0:std_logic_vector(3 downto 0);begin
if clr='1' then
cnt1:=“0000”;
cnt0:=“0000”;
elsif enx2'event and enx2='1' then
if cnt1=“0101”and cnt0=“1001”then
cnt1:=“0000”;
cnt0:=“0000”;
elsif cnt0<“1001”then
cnt0:=cnt0+1;
else
cnt0:=“0000”;
if cnt1<“0101”then
cnt1:=cnt1+1;
else
cnt1:=“0000”;
end if;
end if;
end if;
min1<=cnt1;
min0<=cnt0;
end process;end art;各个仿真结果正常 其整个仿真结果图为
6.感悟:做完这个实验是我由完全不懂到懂了很多的vhdl编程,确实了解了很多的知识与技能,同时这其中也有我的同学的帮忙与指点以及网上的参考,才让我能够顺利完成这个实验。
相信只要动手做就有可能做成,倘若连不动手,不去思考,连做成想法都没有,甚至连抄写的想法也没有,结果注定会做不成。
第二篇:数电课程设计
题目:光控计数器
学院:核工程技术学院
专业:核技术
学号:09026103
姓名:史镇玮
作者(签名):
完成日期:2011年6月日 【课题名称】 光控计数器 【内容摘要】
利用光线的通断来统计数目的光控计数器。其主要系统组成为:光电转换模块、整形模块、时序控制模块、计数译码模块和显示模块,通过对光电的转换,由时序逻辑电路控制,达到自动计数的功能。【设计内容及要求】
本设计主要是利用光线的通断来统计计数。要求设计两路光控电路,根据光控电路产生触发脉冲的先后顺序,来判断计数器进行加或减计数,要求计数器的最大计数容量为99,用数码管显示数字,并设置手动复位。【设计原理】 1工作原理
首先由光控电路将接收的光信号转换为电信号,经由555定时器组成的施密特触发器整形和555定时器组成的单稳态触发器触发脉冲,输出计数脉冲信号。再通过计数器和译码器,在数码显示管上显示数目的增加或减少,实现自动计数的功能。2.整个系统组成
整个系统由五个部分组成:光控电路、触发脉冲、加减计数、显示译码和数码显示,其工作原理框图如下:
3.电路图(见附录)【单元电路设计及原理】 1.光电转换电路
光电转换电路用于将光信号转换为系统所需的电信号。由于需要进行数目的加和减的运算,此部分需要两个相同的光控电路。每个电路的组成为:一个施密特触发器和单稳态触发器。
当光敏电阻处于光照时,电阻阻值较低,单稳态输出低电平。当遮住第一光敏电阻光时,电阻升高,单稳态触发器输出高,进入暂稳态,维持1.1s 施密特触发器:
一个555定时器芯片、R1、RG(光敏电阻),当RG有光照时,电阻下降。随之,TH端电压下降,输出端3口输出高电平。反之,RG弱光时,电阻升高,TH端电压升高,3输出低电平。单稳态触发器:
用555芯片构成单稳触发器,每次触发产生一个1s左右的方波脉冲。当从施密特触发器3输出,单稳态触发器2(TR)输入高电平,3端立刻输出低电平。随之,当2输入低电平,3随即输出高电平。然而,当2马上输入高电平时,3输出将维持一段时间,进入暂稳态。
维持时间:Tw=RC ln3 = 1.1s
2、时序控制电路
时序控制电路在本课题中主要用于判断计数的增加或是减少,在此选用了一个双D触发器74LS74、74LS00芯片来实现。74LS74双D触发器,用于和其它芯片一起构成时序逻辑电路。由于74LS74是上升边沿触发的边沿D触发器,电路结构是维特—阻塞型的,所以又称维特—阻塞触发器。它要求控制端D的信号应超前CP脉冲上升边沿2Tpd1时间建立,并要求在CP脉冲触发边沿到来后继续维持1Tpd1时间(此处的Tpd1是TTL门的平均传输延迟时间)
当上端3输出由低到高的电平,高电平维持1.1s,在其维持的时间段中,给下端3输入一由低到高的电平,给D触发器CP一上升沿。这是,D触发器工作 Q′=D′=0,同时两与非门的输出由低到高变化,给了下一模块一上升沿。
3、计数和译码和显示部分
计数部分由两片74LS191异步级联而成。译码部分是由两片74LS47来完成,显示部分是由两个共阴极LED数码显示管。用于接收计数脉冲信号并将其转化成单独的信号输出并显示。74LS191 74LS191是集成4位同步二进制加减计数器,可执行十六进制加减法计数及异步置数功能。可通过外电路连接构成其他进制的计数器,本课题连接成十进制计数器。
当14(CP)来上升沿时,191(1)开始计数,分为两种情况,U′/D输入为0,则进行加法计数,U′/D输入为1时,进行减法计数。
同时,2和7接与非门,输出端接置数端LD′和191(2)CP,191(1)的2和7输出1时,(2)CP为0,下一状态为1,上升沿到,进位计数。74LS47和数码管 两个译码器和两个数码管来完成,用于接收计数脉冲信号并将其转化成单独的信号输出并显示。当47译码器3端接地,数码管全部显示。【参数计数及器件选择】
1.测量光敏电阻在无光和有光时电阻。第一个,有光,Rg=5.34KΩ,无光时,Rg=29.8KΩ。第二个,有光,Rg=6.1KΩ,无光时,Rg=34.5KΩ。根据1/3Rg(无光)≤R1≤2/3Rg(有光),选择R1=R3=10KΩ
2.对数码管检测。将数码显示管的的3端接地,用高电平依次接到除8以外的其他端,发现无任何显示。说明使用的是共阳极数码显示管,应在3脚或8脚加电源(中间接限流电阻)。经再次测试,数码管显示正常。【组装与调试】
整个电路分为三个模块进行组装调试,分析。
1、施密特触发器与单稳态触发器的调试
按图接好电路,R1选择10KΩ,接通电源,将3端接到发光二极管。这时,二极管正常发光。当对光敏电阻进行遮光处理,二极管为暗。第二个触发器的调试,同上述操作,R3为10KΩ。
当施密特触发器正常工作时,在检测单稳态触发器。此时二极管接到3端,二极管为暗。当对光敏电阻进行遮光处理,二极管正常发光,照光后,持续1.1s。表示单稳态触发器调试良好。第二块单稳态触发器,同上述操作。
2、双D触发器与与非门测试
D触发器的1、4端输入高电平信号,检测Q`=D`。与非门按有“0必出1,11为零”的原则检测。检测完成后,将其接入电路。
3、计数和译码和显示部分
按图连好电路,将第一片191芯片14端输入单脉冲,观察数码管显示结果,当5端输入高电平时为减法,5端输入低电平时为加法,数码管正常计数,说明电路正常。调试完成后,按图将其接入总电路。【报错分析】
1、计数部分调试时,发现只有第一个数码管计数,而第二个数码管停止不计。经检测,第二个74LS191芯片没有脉冲输入。由此判断,与非门74LS00芯片,出现问题。更换后,计数正常。
2.电路连接完成后,只能做减法而不做加法。经调试,发现74LS74芯片出现问题。更换后,计数正常。
3.更换74LS74后,发现计数紊乱。与电路图对照后,发现,没有将74LS74的1、4端接到高电平。【实验结果】
整个模块进行调试,对第一模块RG遮光,马上对第二个RG遮光处理,数码显示管按预期的进行1次加法运算。但对第二块RG遮光,马上对第一块RG遮光,则进行2次减法运算。【应用及评估】
现今人们在生活、学习和工作中,经常需要对某种物品进行数量统计。如进出房间的人数统计。常规的机械计数和人工计数不仅麻烦,而且极为浪费时间和资源。在学习了脉冲数字电路的基础上,本课题所设计的一种利用光线的通断来统计数目的光控计数器,用一种较为简单的设计解决了这一现实问题。而且此产品简单方便,非常易于用于实际生活中,有教高的实用价值。【所需元器件】
试验箱(含面包板)
1块 555定时器4片 74LS74
1片 74LS00
1片 74LS1912片 74LS47 2片 数码管
2个 电阻:10K欧姆4个 1K欧姆 2个 电容:100µF 2个 0.01µF 4个 【心得体会】
经过两天的实验,使得在课堂上学习的知识得到巩固,同时增加了对电路的分析,连接,调试,错误分析等能力,思维得到了进一步的升华。1)做课程设计同时也是对课本知识的巩固和加强,由于课本上的知识太多,平时课间的学习并不能很好的理解和运用各个元件的功能,在这次课程设计过程中,我们了解了很多元件的功能,并且对于其在电路中的使用有了更多的认识。
2)通过动手实践让我们对各个元件映象深刻。认识来源于实践,实践是认识的动力和最终目的,实践是检验真理的唯一标准。
3)调试过程是痛苦的,调试电路是需要非常强的理论作为基础的,但也是最能提升能力的部分,只有通过亲自调试电路,发现电路存在的问题,思考产生的原因,并想办法解决问题,才能加深对自己设计电路的认识。4)此次课程设计,学到了很多课内学不到的东西,比如独立思考解决问题,出现差错的随机应变,能静下心来,不烦躁去解决问题等都受益非浅。在整个课程设计当中,深刻体会到设计一个电路的难度。虽然已经有设计总电路图,但实验过程中并不是一帆风顺的,期间遇到过好多问题。但最终通过自己的能力得以解决。当看到自己的成果时,发现其实课程设计是很有意思的。我们需要认真的去体会实验给我们带来的乐趣。总之,此次课程设计实验,使我受益匪浅。【参考文献】
1.阎石.《数字电子技术基础》.高等教育出版社.2.管小明.《数字电子技术基础实验与课程设计》.电子与机械工程学院机电基础教学部
附录
附:光控计数器电路总图
第三篇:数电课程设计
数电课程设计(序列检测器)
课程设计题目:设计一个10010的序列检测器。
设计思路如下:
状态图
INIT=0,A1=1,A2=10,A3=100,A4=1001,A5=10010.图中,沿红线状态从INIT变到A5,即输入为正确的序列10010,黑线为每次输入错误时的状态转移。
状态转移表
设计程序如下
module xljcq(clk,A,unclk);input clk,A;output unclk;reg unclk;reg [4:0] Sreg,Snext;parameter INIT=1'b0,A1=1'b1;parameter [1:0] A2=2'b10;parameter [2:0] A3=3'b100;parameter [3:0] A4=4'b1001;parameter [4:0] A5=5'b10010;always @(posedge clk)
Sreg<=Snext;always @(A,Sreg)begin
case(Sreg)
INIT: if(A==0)Snext=INIT;
else
Snext=A1;
A1:
if(A==0)Snext=A2;
else
Snext=A1;
A2:
if(A==0)Snext=A3;
else
Snext=A1;
A3:
if(A==0)Snext=INIT;
else
Snext=A4;
A4:
if(A==0)Snext=A5;
else
Snext=A1;
A5:
if(A==0)Snext=A3;
else
Snext=A1;
default Snext=INIT;
endcase end always @(Sreg)
case(Sreg)
INIT,A1,A2,A3,A4: unclk=0;
A5: unclk=1;
default unclk=0;
endcase endmodule
程序功能仿真图:
Figure1
从figure1中可以看出在连续的6个clk的posedge, 输入A为10010,所以在第六个clk的posedge,输出unclk由0变为1。
Figure2
Figure2是紧接figure1的功能仿真时序图,在此时序中,六个clk 的posedge输入A为101010,和设计的要求一样,unclk一直都为0.
第四篇:数电课程设计
数字电子技术课程设计报告
题目:自动浇花系统
班级:
目录
一、设计任务要求———————1
二、方案设计与论证——————2 三、四、五、六、七、各单元电路设计与分析————————————————3 总体电路原理图及元器件清单—————————————7 电路仿真及仿真结果分析———————————————7 作品照片——————————8 结论与心得体会———————10
自动浇花系统一、设计任务要求:
1.要求实现至少两种不同的浇灌模式(区别可以体现在浇灌频率、水量以及时段等方面);
2.可以通过按键实现不同模式间进行切换的功能; 3.通过使用流水灯转换的快慢模拟浇灌时期水量的大小; 4.显示当前浇花区间内浇灌的次数;
二、方案设计与论证:
输入两位十进制数设置浇花时间间隔,输入一位2进制数表示水量模式选择。用流水灯模拟浇花过程,用LED显示浇花次数。可通过计数器计算时间,与用户输入的时间间隔数字比较,如果相等,则通过流水灯模拟浇花过程。
三、各单元电路设计与分析:
分析:此电路图是由两位进制数的计算器可以选用两个74LS90 而组成,其对应电路如上图。通过一个时序脉冲频率为100HZ来给信号,当第一个计数器达到9时,需要进制计数所以在通过74LS08与非门来计数十位的数。
分析:这是一个两个由74LS85D芯片组成的两位十进制的比较器,此电路简单,是用来通过用户输入的指令比较如果相等则表示通过,那么系统就会浇花,则LED就会显示次数。
分析:此电路为核心电路,可以使用一个触发器或寄存器保留浇花指令信号。使用一个计数器记录浇花时间。浇花结束后反馈给触发器一个信号使其复位。用到jk触发器和90计数器和08,32等芯片。
四、总体电路原理图及元器件清单:
总体电路原理图:
元器件清单:74LS90五个,7485两个,74138两个,74LS112一个,74LS08一个,74LS32一个,直流稳压电源。
五、电路仿真及仿真结果分析:
六、作品照片:
七、:结论与心得体会:
结论:此次的实验结果与原理结果相吻合,通过用户输入的指令与计数器计算的时间相比较,如果是一致那么则启动该系统,通过流水灯闪烁来代表浇花的过程,已达到实验的目的和效果。
心得体会:在此次实验的过程中,自己首先要了解自己做的作品的目的和想法。要以一个抽象的概念模拟实验,不能是盲目的去做一些简单的焊锡,打孔,跳线等没有思考的问题。自己要去学会怎么用仿真软件去将你的实验原理图验证正确才可以下手。再有就是学会AD 画图每一个细节都是不能忽视的,比如说找个电阻,电容,二极管。等一些电子元器件,如果你没有很好的掌握此AD软件的功能那么你是无法快速的找到对应的元件,还有就是在画图的过程中需要考虑很多小问题,比如说线不能重叠需要跳线,但是你的板子很小,这就需要你想一个巧的办法去解决,从那些元件的空隙连过去也是可以的。一些元件的使用方法也是值得我们注意的,比如说数码管,它分供阴极和供阳极,如果你搞错了你也是的得不到你想要的结果。芯片的正反是否装错,在焊锡的时候是否打吧芯片给烧坏了等一系列微小,但有不得不值得我们注意的问题。所以在做实验是我学会了要仔细仔细再仔细,做完后需要学会通过用万用表检测电路是否没有短路或者断路,与自己的实验原理图对照要及时的找出问题所在。自己的思维能够严谨。一个完整的实验是需要一个人的耐力,信心,仔细,创新的许多品质,达不到实验的目的绝对是不行的。没有恒心和毅力就这么个小小的实验都做不出来,那么将来在社会上什么事情都不会让你干,遇到困难就想放弃你也就什么事情都干不成。因此通过此次的数
电课程设计我更加明白了我们现在差欠的品质太多,从做作品的效率和效果来看就是你要步入社会的状态。我们需要更加努力的在大学期间磨炼自己,学好自己的专业课,从大学中培养良好的品质完善自己,以便出社会更好的应对麻烦和问题。
第五篇:数电课程设计
电子技术课程设计
题目名称 多功能数字钟设计 班 级 自动化1204 学 号 201209157043 学生姓名 田野 指导教师 刘 琼 设计时间 2014-6-9 ~ 2014-6-13
设计任务与要求:
Ⅰ 以十进制数字形式显示时、分、秒的时间。
Ⅱ 小时计数器的计时要求为“24翻1”,分钟和秒的时间要求为60进位。
Ⅲ 能实现手动快速校时、校分;
Ⅳ 具有整点报时功能,报时声响为四低一高,最后一响为整点。
Ⅴ 具有定制控制(定小时)的闹钟功能。
Ⅵ 画出完整的电路原理图
设计内容简介:数字钟是一个简单的时序组合逻辑电路,数字钟的电路系统主要包括时间显示,脉冲产生,报时,闹钟四部分。脉冲产生部分包括振荡器、分频器;时间显示部分包括计数器、译码器、显示器;报时和闹钟部分主要由门电路构成,用来驱动蜂鸣器。
整体构思或方案选择:
该系统的工作原理是:振荡器产生的稳定高频脉冲信号,作为数字钟的时间基准,再经过分频器输出标准秒脉冲。秒计数器计满60后向分计数器进位,分计数器计满60后向小时计数器,小时计数器采用12进制计数,计数器的输出经译码器送显示器。计时出现误差时可以用标准时电路进行校时、校分、校秒。
方案设计:定时器555与RC组成的多谐振荡器作为时间标准信号源。
分频器的功能主要有两个:一是产生标准秒脉冲信号;二是提供功能扩展电路所需要的信号,如仿电台报时用的1KHz的高音频信号和500KHz的低音频信号等。因此,可以选用3片我们较熟悉的中规模集成电路计数器74LS90可以完成上述功能。因每片为1/10分频,3片级联则可获得所需要的频率信号,即每1片Q0端输出频率为500Hz,每2片Q3输出为10Hz,每3片的Q3端输出1Hz。时间计数器电路:一般采用10进制计数器来实现时间计数单元的计数功能。为减少器件使用数量,可选74LS90,其内部逻辑框图如图6所示。该器件为双2-5-10异步计数器,并且每一计数器均提供一个异步清零端(高电平有效)。
图 5 74LS90内部逻辑框图
秒个位计数单元为10进制计数器,无需进制转换,只需将Q0与CPW(下降沿有效)相连即可。CPR(下降沿有效)与1Hz秒输入信号相连,Q3可作为向上的进位信号与十位计数单元的CPR相连。秒十位计数单元为6进制计数器,需要进制转换,可以利用74LS90的有两个清零端的特点,在不用门电路的情况下实现10进制转6进制,具体电路见下面设计图。分个位和分十位计数单元电路结构分别与秒个位和秒十位计数单元完全相同。
译码驱动及显示单元电路:译码电路的功能是将“秒”、“分”、“时”计数器的输出代码进行翻译,变成相应的数字。用于驱动LED七段数码管的译码器常用的有74LS48。74LS48是BCD-7段译码器/驱动器,其输出是OC门输出且低电平有效,专用于驱动LED七段共阴极显示数码管。如图9所示。若将“秒”、“分”、“时”计数器的每位输出分别接到相应七段译码器的输入端,便可进行不同数字的显示。
校时电路:校正时间的方法是:首先截断正常的计数通路,然后再进行人工出触发计数或将频率较高的方波信号加到需要校正的计数单元的输入端,校正好后,再转入正常计时状态即可。根据要求,数字钟应具有分校正和时校正功能,因此,应截断分个位和时个位的直接计数通路,并采用正常计时信号与校正信号可以随时切换的电路接入其中。图4所示为所设计的校时电路。
图 6 方案一校正电路图
定时控制电路:数字钟在指定的时刻发出信号,或驱动音响电路“闹时”;或对某装置的电源进行接通或断开“控制”。在本次设计中设计成闹时,指定时刻为05时59分00钞音响电路以1KHZ的频率的闹一分钟到6时00分00秒结束。(可以通过必一个二输入为四输入引入上下午的指示信号来进一步确定闹钟的响铃时间)
图10 定时控制电路 时间脉冲电路的设计
图 13 产生1Hz时间脉冲的电路图
555构成振荡电路和74LS90构成分频电路。如图11,555输出1KHz的脉冲,三片74LS90级联分频即可得500Hz和1Hz信号。
60进制计数器的设计:“秒”计数器电路与“分”计数器电路都是60进制,它由一级10进制计数器和一级6进制计数器连接构成。如图12.所示由74LS90构成的60进制计数器。首先将两片74LS90设置成十进制加法计数器,将两片计数器并行进位则最大可实现100进制的计数器。现要设计一个60进制的计数器,可利用“反馈清零”的方法实现。因为74LS90有两个异步清零端R0(1)他R0(2),分别用十位端人Q2和Q0与他们相连,当计数器输出“2Q32Q22Q12Q0、1Q3Q2Q1Q0=0110、0000”时,通过门电路形成一置数脉冲,使计数器归零,这样可以不用门电路实现60进制计数器。
图14 60进制电路图
译码及驱动显示电路
译码电路的功能是将“秒”、“分”、“时”计数器的输出代码进行翻译,变成相应的数字。用于驱动LED七段数码管的译码器常用的有74LS48。74LS48是BCD-7段译码器/驱动器,其输出是OC门输出且高电平有效,专用于驱动LED七段共阴极显示数码管。由74LS48和LED七段共阳数码管组成的一位数码显示电路如图 14 所示。若将“秒”、“分”、“时”计数器的每位输出分别接到相应七段译码器的输入端,便可进行不同数字的显示。
图 16译码及驱动显示电路图
校时电路的设计:数字种启动后,每当数字钟显示与实际时间不符进,需要根据标准时间进行校时。校“秒”时,采用等待校时。校“分”、“时”的原理比较简单,采用加速校时。
对校时电路的要求是 : 1.在小时校正时不影响分和秒的正常计数。2.在分校正时不影响秒和小时的正常计数。
如图15所示,当开关断开时,校正信号和0相与非的输出为1,正常输入信号可以顺利通过与非门,故校时电路处于正常计时状态;当开关闭合时,情况正好与上述相反,这时校时电路处于校时状态。与非门可选74LS00。因此实际使用时,须对开关的状态进行消除抖动处理,图17为加2个0.01uF的电容。
图 17 校时电路图
自动报整点电路
当分十位计数器的进位脉冲的上降沿到来时,小时计数器加1,新的小时数置入74LS192,同时又使74LS74的状态翻转,1Q经两非门后使PL=1,此时74LS192开始减法计数,脉冲CP(1Hz)提供。CP=1时音响发出1KHz的声音,CP=0时停响。当减法计数到0时,计数器的借位输出下降沿使D触发器状态翻转,使1Q=0,这时PL=0,74LS192又回到置数状态,并且封锁了音响电路,直到下一个分十位进位信号的下降沿到来。
触摸报整点时数电路
用555构成单稳态触发器,没触摸报时开关闭合后(再断开),进入暂态,暂态时间为略大于12S,在该时间内会封锁分十位进位信号的下降沿,直到回到稳态后。在单稳态触发的进入暂态时,输出端输出上升沿,使D触发器状态翻转,1Q=1,74LS192进入减法计数,并伴随音响发音。直到减法计数到0时,计数器的借位输出下降沿,经门电路后使D触发器状态翻转,1Q=0,这时PL=0,74LS192又回到置数状态,并且封锁了音响电路,直到下一次的触发。
图20 自动(触摸)报整点时数时数电路
电路总图
图 1 电路总图 设计收获、体会和建议:
课程设计是一个课本与实践相结合的机会,从初期的懵懂不解到逐步摸索前进最终得出结果的过程中我也体会到了很多:
1.设计初期要考虑周到,否则后期改进很困难。应该在初期就多思考几个方案,选择最合适的方案动手设计。总体设计在整个设计过程中非常重要,应该花较多的时间在上面。
2.在设计某些模块的时候如果无法把握住整体,这时可以先进行小部分功能的实现,在此基础上进行改进,虽然可能会多花一些时间,但这比空想要有效的多。
3.尽可能是电路连线有序,模块之间关系清楚,既利于自己修改,也利于与别人交流。
4.很多难点的突破都来自于与同学的交流,交流使自己获得更多信息,开拓了思路,因此要重视与别人的交流。
5.应该有较好的理论基础,整个实验都是在理论的指导下完成了,设计过程中使用了许多理论课上学的内容,如真值表、卡拉图等。本次设计把理论应用到了实践中,同时通过设计,也加深了自己对理论知识的理解和掌握。
参考文献
1、谢自美.电子线路设计·实验·测试.华中科技大学出版社.2006.1
2、姚福安.电子电路设计与实践.山东科技出版社.2001.10
3、马建国.电子系统设计.高等教育出版社.2004.1 4 《数字电子技术基础》伍时和 主编 清华大学出版社。《电子线路设计·实验·测试》第三版,谢自美 主编,华中科技大学出版社。《电子线路综合设计实验教程》 刘鸣 主编 天津大学出版。《新型集成电路的应用――电子技术基础课程设计》,梁宗善主编,华中科技大学出版社。《电子技术基础课程设计》,孙梅生等编著,高等教育出版社。