当前位置:文档之家› 北邮数字电路综合实验报告

北邮数字电路综合实验报告

北邮数字电路综合实验报告
北邮数字电路综合实验报告

数字电路综合实验报告

简易智能密码锁

一、实验课题及任务要求

设计并实现一个数字密码锁,密码锁有四位数字密码和一个确认开锁按键,密码输入正确,密码锁打开,密码输入错误进行警示。

基本要求:

1、密码设置:通过键盘进行 4 位数字密码设定输入,在数码管上显示所输入数字。通过密码设置确定键(BTN 键)进行锁定。

2、开锁:在闭锁状态下,可以输入密码开锁,且每输入一位密码,在数码管上显示“-”,提示已输入密码的位数。输入四位核对密码后,按“开锁”键,若密码正确则系统开锁,若密码错误系统仍然处于闭锁状态,并用蜂鸣器或led 闪烁报警。

3、在开锁状态下,可以通过密码复位键(BTN 键)来清除密码,恢复初始密码“0000”。闭锁状态下不能清除密码。

4、用点阵显示开锁和闭锁状态。

提高要求:

1、输入密码数字由右向左依次显示,即:每输入一数字显示在最右边的数码管上,同时将先前输入的所有数字向左移动一位。

2、密码锁的密码位数(4~6 位)可调。

3、自拟其它功能。

二、系统设计

2.1系统总体框图

2.2逻辑流程图

2.3MDS图

2.4分块说明

程序主要分为6个模块:键盘模块,数码管模块,点阵模块,报警模块,防抖模块,控制模块。以下进行详细介绍。

1.键盘模块

本模块主要完成是4×4键盘扫描,然后获取其键值,并对其进行编码,从而进行按键的识别,并将相应的按键值进行显示。

键盘扫描的实现过程如下:对于4×4键盘,通常连接为4行、4列,因此要识别按键,只需要知道是哪一行和哪一列即可,为了完成这一识别过程,我们的思想是,首先固定输出高电平,在读入输出的行值时,通常高电平会被低电平拉低,当当前位置为高电平“1”时,

没有按键按下,否则,如果读入的4行有一位为低电平,那么对应的该行肯定有一个按键按

下,这样便可以获取到按键的行值。同理,获取列值也是如此,先输出4列为高电平,然后在输出4行为低电平,再读入列值,如果其中有哪一位为低电平,那么肯定对应的那一列有按键按下。由此可确定按键位置。

(X 为无效按键)

2.数码管模块

本实验采用六位七段共阴极数码管,通过选通6个位选管脚,向相应的IO 口送低电平来点亮其中任何一位数码管,因为现在采用四位密码锁,所以只是用了其中四个,最高位两位数码管位选全部置1.

如下附上7段共阴极数码管真值表

3.点阵模块

点阵模块,共由8*8*2个发光二极管组成,行低电平有效,列高电平有效。要求在开锁模式和闭锁模式显示不同的图案,则先将要显示的每幅图像画8*8个小方格的矩形框中,再在有图案下落处的小方格里填上“1”,无图案处填上“0”,这样就形成了与图案所对应的二X 7 8 9

X 4 5 6 X 1 2 3 X X 0 x 消抖 键盘译码 按键储存 键盘扫描

进制数据在该矩形框上的分布。当闭锁时以红色点阵显示,此时绿色点阵全部置0,反之亦然。

4.报警模块

当报警程序被调用,蜂鸣器输出高电平进行报警,表示输入密码错误

5.防抖

按键输入只有为15ms以上的高电平时才会读出按键值从而消除电路中的抖动。

6.控制中心

lockmode='1表示关锁,此时点阵显示落锁,按任何键都不会显示密码,清零或者开锁,在此时输入密码kwei从0开始不断加1,输入的密码位数在数码管上依次左移,当输入密码m与寄存器中预设密码mm相同时,按下确认键btn2切换为开锁状态,lockmode=0,此时按下btn1表示清零,恢复为初始密码0000,按set键寄存器内密码,按下btnloc切换为关锁状态。

三、仿真波形分析

在QUARTUS2中应用系统自带的功能进行波形仿真,这里采用了分模块仿真。

主程序仿真

在主要功能程序方面波形如下,在初始化模式按下set键系统进入修改密码状态,setmode波形显示高电平。为仿真方便,仅使kbin(即行输入信号)在1011和1111两个状态下相互转换,在不同的kbout(即列扫描输出信号)下分别对应4、5、6、7四个数字,故密码寄存器m[x]为输入的修改后的密码。

按下btn2(确认键)确认密码后,setmode变为低电平,即修改密码状态结束。

按下btn1时清零,密码寄存器取值还原为0000,至此均为开锁状态下的操作,lockmode 一直为低电平。

按下闭锁键btnloc后,lockmode从0跳变到1,由此进入闭锁模式。

按键消抖模块仿真

当按下键时得到的高电平为输入x,持续一定时间后方可输出一个高电平,而无论按下的时间多长,都只输出一个高电平y,从而实现消除按键电路中的抖动。

分频模块仿真

为仿真方便,改变分频比。原程序在50Mhz时钟输入下,输出分别为1Mhz、200hz、1000hz、500hz,分别用于键盘扫描、消抖模块输入、点阵扫描以及数码管扫描。

数码管模块仿真

由smgcatout输出可以看出低四位数码管依次选通。第i位选通时,smgzf为m[i]的七段数码管的译码值。

点阵模块仿真

当lockmode=1时dzcolr全部为0仅dzcolg显示图案;当lockmode=0时dzcolg全部为0由dzcolr显示图案;而dzrow一直在进行行扫描,形成了两种不同颜色点阵。

报警模块仿真

当bj=0时,fmq为0;bj=1时,fmq将clk分频后输出,即蜂鸣器发出声响。

四、源程序

-----------------------顶层文件-------------------------

library ieee;

use ieee.std_logic_1164.all;

use ieee.std_logic_unsigned.all;

entity lock is

port (clk : in std_logic;

setmode:out std_logic;

lockmode:out std_logic;

set:in std_logic;

btn1,btn2,btnloc:in std_logic;

smgzf: out std_logic_vector(6 downto 0);

smgcatout:out std_logic_vector(5 downto 0);

kbin: in std_logic_vector(3 downto 0);

kbout: buffer std_logic_vector(3 downto 0);

dzrow,dzcolr,dzcolg: out std_logic_vector(7 downto 0);

fmq: out std_logic

);

end lock;

architecture behave of lock is

signal setm: std_logic;

signal lockm: std_logic;

signal lbj: std_logic;

signal lkwei: integer range 0 to 4;

signal lm1,lm2,lm3,lm4:integer range 0 to 9;

signal clk_1: std_logic; --1MHz

signal clk_2: std_logic; --200Hz

signal clk_3: std_logic; --1000Hz

signal clk_4: std_logic; --500Hz

component kb is -----------键盘模块

port (clk : in std_logic;

set:in std_logic;

btn1,btn2,btnloc:in std_logic;

kbin: in std_logic_vector(3 downto 0);

kbout: buffer std_logic_vector(3 downto 0);

bj:out std_logic;

setmod:out std_logic;

lockmod:out std_logic;

kbwei:out integer range 0 to 4;

m1x,m2x,m3x,m4x:out integer range 0 to 9

);

end component;

component smg is -------------数码管显示模块

port (clk : in std_logic;

setmode:in std_logic;

lockmode:in std_logic;

kwei:in integer range 0 to 4;

m1,m2,m3,m4:in integer range 0 to 9;

smgzf: out std_logic_vector(6 downto 0);

smgcatout:out std_logic_vector(5 downto 0)

);

end component;

component dz is -----点阵模块

port (clk : in std_logic;

--set:in std_logic;

lockmode:in std_logic;

dzrow,dzcolr,dzcolg: out std_logic_vector(7 downto 0)

);

end component;

component alarm is ------报警模块

port (clk : in std_logic;

bj:in std_logic;

fmq: out std_logic

);

end component;

component fenpin is -------分频模块

port(clk: in std_logic;

clk_out1: out std_logic;

clk_out2: out std_logic;

clk_out3: out std_logic;

clk_out4: out std_logic);

end component;

begin

a1: fenpin

port map(clk=>clk,clk_out1=>clk_1,clk_out2=>clk_2,

clk_out3=>clk_3,clk_out4=>clk_4);

u1: kb

port map(clk => clk,

set => set,

btn1 =>btn1,btn2=>btn2,btnloc=>btnloc,

kbin=>kbin,

kbout=>kbout,

bj=>lbj,

setmod=>setm,

lockmod=>lockm,

kbwei=>lkwei,

m1x=>lm1,m2x=>lm2,m3x=>lm3,m4x=>lm4);

u2 :smg

port map(clk => clk_4,

setmode=>setm,

lockmode=>lockm,

kwei=>lkwei,

m1=>lm1,m2=>lm2,m3=>lm3,m4=>lm4,

smgzf=>smgzf,

smgcatout=>smgcatout);

u3 :dz

port map(clk=>clk_3, lockmode=>lockm ,dzrow=>dzrow, dzcolr=>dzcolg, dzcolg=>dzcolr );

u4 :alarm

port map(clk => clk, bj=>lbj, fmq=>fmq);

setmode<=setm;

lockmode<=lockm;

end;

-----------------------键盘模块-------------------------

library ieee;

use ieee.std_logic_1164.all;

use ieee.std_logic_unsigned.all;

entity kb is

port (clk : in std_logic;

set:in std_logic;

btn1,btn2,btnloc:in std_logic;

kbin: in std_logic_vector(3 downto 0);

kbout: buffer std_logic_vector(3 downto 0);

bj:out std_logic;

setmod:out std_logic;

lockmod:out std_logic;

kbwei:out integer range 0 to 4;

m1x,m2x,m3x,m4x:out integer range 0 to 9

);

end kb;

architecture behave of kb is

signal jpout:integer range 0 to 10;

signal alarm:std_logic;

signal tmp4: integer range 0 to 2499999;

signal clkfd: std_logic;

signal m1,m2,m3,m4,mm1,mm2,mm3,mm4: integer range 0 to 9;

signal wei:integer range 0 to 3;

signal kwei:integer range 0 to 4;

signal setmode:std_logic;

signal lockmode:std_logic;

signal set1:std_logic;

signal clear: std_logic;

signal sure: std_logic;

signal lock: std_logic;

signal en,finish: std_logic;

signal btn1_out, btn2_out, btnloc_out, set_out: std_logic;

signal clk_1: std_logic; --1MHz

signal clk_2: std_logic; --200Hz

component scan is

port(clk_1: in std_logic;

clk_2: in std_logic;

row: in std_logic_vector(3 downto 0);

col: buffer std_logic_vector(3 downto 0);

en_up: buffer std_logic;

y: out integer range 0 to 10);

end component;

component fenpin is

port(clk: in std_logic;

clk_out1: out std_logic;

clk_out2: out std_logic;

clk_out3: out std_logic;

clk_out4: out std_logic);

end component;

component debounce is

port(clk, x: in std_logic;

y: out std_logic);

end component;

begin

setmod<=setmode;

lockmod<=lockmode;

bj<=alarm;

kbwei<=kwei;

m1x<=m1;m2x<=m2;m3x<=m3;m4x<=m4;

u1: scan port map(clk_1=>clk_1, clk_2=>clk_2, row=>kbin, col=>kbout, en_up=>en, y=>jpout);

u2: fenpin port map(clk=>clk, clk_out1=>clk_1, clk_out2=>clk_2, clk_out3=>open,clk_out4=>open);

u3: debounce port map(clk=>clk_2, x=>btn1, y=>btn1_out);

u4: debounce port map(clk=>clk_2, x=>btn2, y=>btn2_out);

u5: debounce port map(clk=>clk_2, x=>btnloc, y=>btnloc_out);

u6: debounce port map(clk=>clk_2, x=>set, y=>set_out);

process(clk)

begin

if(clk'event and clk='1')then

if (tmp4=2499999) then

tmp4<=0;clkfd<=not clkfd;

else

tmp4<=tmp4+1;

end if;

end if;

end process;

process(clk_1,en,jpout)

begin

if(clk_1'event and clk_1='1') then

if(lockmode='1')then ----------闭锁状态下输入密码并读入按键值后存入mm wei<=0;

if(jpout/=10)then

if(kwei=3)then mm4<=jpout;kwei<=kwei+1;

elsif(kwei=2)then mm3<=jpout;kwei<=kwei+1;

elsif(kwei=1)then mm2<=jpout;kwei<=kwei+1;

elsif(kwei=0)then mm1<=jpout;kwei<=kwei+1;

end if;

end if ;

if(sure='1')then ---------确认后判断密码是否正确

if((mm1=m1)and(mm2=m2)and(mm3=m3)and(mm4=m4)) then lockmode<='0';alarm<='0';----------正确开锁

else kwei<=0;alarm<='1'; ----------错误报警

end if;

else kwei<=0;---------------开锁状态下

if(lock='1')then --------------上锁

lockmode<='1';

else

if(set1='1')then setmode<='1'; -------修改密码

else setmode<='0';

end if;

if(clear='1') then -----------清零

m1<=0;m2<=0;m3<=0;m4<=0;--mm1<=0;mm2<=0;mm3<=0;mm4<=0;

wei<=0;kwei<=0;alarm<='0'

elsif(setmode='1')then

if(jpout/=10)then ----------------修改密码状态下读入按键值存入m并移位

if(wei=0)then m1<=m2;m2<=m3;m3<=m4;m4<=jpout;wei<=wei+1;

elsif(wei=1)then m1<=m2;m2<=m3;m3<=m4;m4<=jpout;wei<=wei+1;

elsif(wei=2)then m1<=m2;m2<=m3;m3<=m4;m4<=jpout;wei<=wei+1;

elsif(wei=3)then m1<=m2;m2<=m3;m3<=m4;m4<=jpout;wei<=0;

end if;

end if;

if(sure='1')then -----------确认后结束修改密码状态

setmode<='0';alarm<='0';

end if;

end if;

end if;

end if;

end if;

end process;

process(set,sure) --------修改密码键

begin

if(clkfd'event and clkfd='1')then

if(set='1')then

set1<='1';

end if;

if(sure='1')then

set1<='0';

end if;

end if;

end process;

process(btn1) -----------清零键

begin

if(btn1='1')then

else clear<='0';

end if;

end process;

process(btn2) ----------确认键

begin

if(btn2='1')then

sure<='1';

else sure<='0';

end if;

end process;

process(btnloc) -----闭锁键

begin

if(btnloc='1')then

lock<='1';

else lock<='0';

end if;

end process;

end;

----------------------------键盘扫描-------------------------

library ieee;

use ieee.std_logic_1164.all;

use ieee.std_logic_unsigned.all;

entity scan is

port(

clk_1: in std_logic; --高频(for scan) 1Mhz clkout1

clk_2: in std_logic; --低频(for debounce) 200hz clkout2

row: in std_logic_vector(3 downto 0);

col: buffer std_logic_vector(3 downto 0);

en_up: out std_logic;

y: out integer range 0 to 10 );

end scan;

architecture a of scan is

signal en: std_logic;

component debounce is

port(clk, x: in std_logic;

y: out std_logic);

end component;

begin

u1: debounce port map(clk=>clk_2, x=>en, y=>en_up);

process(clk_1)

begin

if(clk_1'event and clk_1='1') then ---------列扫描

if(en='1') then

col<="1000";

else

case col is

when "1110" => col<="1101";

when "1101" => col<="1011";

when "1011" => col<="1110";

when others => col<="1110";

end case;

end if;

end if;

end process;

process(clk_1, col, row)

begin

if(clk_1'event and clk_1='1') then

case col is

when "1000" =>

if((row(3) and row(2) and row(1) and row(0))='1') then

en<='0';

end if;

when "1110" =>

case row is

--when "1110" => y<="1111";

when "1101" =>y<=1; en<='1'; --1

when "1011" =>y<=4; en<='1'; --4

when "0111" =>y<=7; en<='1'; --7

when others => y<=10;

end case;

when "1101" =>

case row is

when "1110" =>y<=0; en<='1'; --0

when "1101" =>y<=2; en<='1'; --2

when "1011" =>y<=5; en<='1'; --5

when "0111" =>y<=8; en<='1' ; --8

when others =>y<=10;

end case;

when "1011" =>

case row is

--when "1110" => y<="1111";

when "1101" =>y<=3; en<='1'; --3

when "1011" =>y<=6; en<='1'; --6

when "0111" =>y<=9; en<='1'; --9

when others =>y<=10;

end case;

when others => null;

end case;

end if;

end process;

end a;

----------------------------消抖-------------------------

library ieee;

use ieee.std_logic_1164.all;

use ieee.std_logic_unsigned.all;

entity debounce is

port(

clk, x: in std_logic; ------------- 200hz低频时钟

y: out std_logic

);

end debounce;

architecture a of debounce is

type state is(s0,s1,s2,s3,s4); ------------5个状态

signal pre_s, next_s: state;

begin

process(clk)

begin

if(clk'event and clk='1') then

pre_s<=next_s;

end if;

end process;

process(pre_s, x) -------输入为连续3个或以上的高电平时,输出一个高电平

begin

case pre_s is

when s0 => -----------初始状态s0

if(x='1') then

next_s<=s1;

else

next_s<=s0;

end if;

y<='0';

when s1 =>

if(x='1') then

next_s<=s2;

else

next_s<=s0;

end if;

y<='0';

when s2 =>

if(x='1') then

next_s<=s3;

else

next_s<=s0;

end if;

y<='0';

when s3 => ------------连续3个高电平,输出一个高电平

y<='1';

next_s<=s4;

when s4 => ----------3个以上高电平,不再继续输出高电平

y<='0';

if(x='1') then

next_s<=s4;

else

next_s<=s0;

end if;

end case;

end process;

end a;

---------------------------分频模块-------------------------

library ieee;

use ieee.std_logic_1164.all;

use ieee.std_logic_unsigned.all;

entity fenpin is

port(

clk: in std_logic;

clk_out1: out std_logic;

clk_out2: out std_logic;

clk_out3: out std_logic;

clk_out4: out std_logic

);

end fenpin;

architecture div of fenpin is

constant div1: integer:=24;--1Mhz,用于键盘扫描

constant div2: integer:=124999;--200hz,用于消抖

constant div3: integer:=24999;--1000hz,用于点阵扫描constant div4: integer:=49999;--500hz,用于数码管扫描signal c1: integer range 0 to div1;

signal c2: integer range 0 to div2;

signal c3: integer range 0 to div3;

signal c4: integer range 0 to div4;

signal temp1: std_logic;

signal temp2: std_logic;

signal temp3: std_logic;

signal temp4: std_logic;

begin

process(clk)

begin

if(clk'event and clk='1') then

if(c1=div1) then

temp1<=not temp1;

c1<=0;

else

c1<=c1+1;

end if;

if(c2=div2) then

temp2<=not temp2;

c2<=0;

else

c2<=c2+1;

end if;

if(c3=div3) then

temp3<=not temp3;

c3<=0;

else

c3<=c3+1;

end if;

if(c4=div4) then

temp4<=not temp4;

c4<=0;

else

c4<=c4+1;

end if;

end if;

end process;

clk_out1<=temp1;

clk_out2<=temp2;

clk_out3<=temp3;

clk_out4<=temp4;

end div;

------------------------------------数码管-------------------------------

library ieee;

use ieee.std_logic_1164.all;

use ieee.std_logic_unsigned.all;

entity smg is

port (clk : in std_logic; --500hz clkout4

setmode:in std_logic;

lockmode:in std_logic;

kwei:in integer range 0 to 4;

m1,m2,m3,m4:in integer range 0 to 9; ----------四位密码的值

smgzf: out std_logic_vector(6 downto 0); ---------编码值

smgcatout:out std_logic_vector(5 downto 0)

);

end smg;

architecture behave of smg is

signal smgcat:integer range 0 to 5;

signal m1y,m2y,m3y,m4y:std_logic_vector(6 downto 0);

begin

process(clk) -----------位选码

begin

if(clk'event and clk='1')then

if (smgcat=5)then

smgcat<=0;

else

smgcat<=smgcat+1;

end if;

end if;

end process;

process(setmode,lockmode,smgcat)

begin

if(lockmode='0')then

case smgcat is --------------输入密码值在数码管显示,从左到右

when 0=>smgcatout<="110111";smgzf<=m1y;

when 1=>smgcatout<="111011";smgzf<=m2y;

when 2=>smgcatout<="111101";smgzf<=m3y;

when 3=>smgcatout<="111110";smgzf<=m4y;

when 4=>smgcatout<="111111";

when 5=>smgcatout<="111111";

end case;

else

smgzf<="0000001"; --------------输入密码在数码管显示“-”

if (kwei=1)then smgcatout<="111110";

elsif (kwei=2)then smgcatout<="111100";

elsif (kwei=3)then smgcatout<="111000";

elsif (kwei=4)then smgcatout<="110000";

else smgcatout<="111111";

end if;

end if;

end process;

process(m1) --------------七段数码管真值表

begin

case m1 is

when 0=>m1y<="1111110";

when 1=>m1y<="0110000";

when 2=>m1y<="1101101";

when 3=>m1y<="1111001";

when 4=>m1y<="0110011";

when 5=>m1y<="1011011";

when 6=>m1y<="1011111";

when 7=>m1y<="1110000";

when 8=>m1y<="1111111";

when 9=>m1y<="1111011";

when others=>m1y<="0000000";

end case;

end process;

process(m2)

begin

case m2 is

when 0=>m2y<="1111110";

when 1=>m2y<="0110000";

when 2=>m2y<="1101101";

when 3=>m2y<="1111001";

when 4=>m2y<="0110011";

when 5=>m2y<="1011011";

when 6=>m2y<="1011111";

when 7=>m2y<="1110000";

when 8=>m2y<="1111111";

when 9=>m2y<="1111011";

when others=>m2y<="0000000";

end case;

end process;

process(m3)

begin

case m3 is

when 0=>m3y<="1111110";

when 1=>m3y<="0110000";

when 2=>m3y<="1101101";

when 3=>m3y<="1111001";

when 4=>m3y<="0110011";

when 5=>m3y<="1011011";

when 6=>m3y<="1011111";

when 7=>m3y<="1110000";

when 8=>m3y<="1111111";

when 9=>m3y<="1111011";

when others=>m3y<="0000000";

end case;

end process;

process(m4)

begin

case m4 is

when 0=>m4y<="1111110";

when 1=>m4y<="0110000";

when 2=>m4y<="1101101";

when 3=>m4y<="1111001";

when 4=>m4y<="0110011";

when 5=>m4y<="1011011";

when 6=>m4y<="1011111";

when 7=>m4y<="1110000";

when 8=>m4y<="1111111";

when 9=>m4y<="1111011";

when others=>m4y<="0000000";

end case;

end process;

end;

------------------------点阵-------------------------------

library ieee;

use ieee.std_logic_1164.all;

use ieee.std_logic_unsigned.all;

entity dz is

port (clk : in std_logic; --1000hz clkout3 lockmode:in std_logic;

dzrow,dzcolr,dzcolg: out std_logic_vector(7 downto 0)

);

end dz;

architecture behave of dz is

北京邮电大学数电实验一实验报告

北京邮电大学数字电路与逻辑 设计实验 学院: 班级: 作者: 学号:

实验一 Quartus II原理图输入法设计 一、实验目的: (1)熟悉Quartus II原理图输入法进行电路设计和仿真 (2)掌握Quartus II 图形模块单元的生成与调 (3)熟悉实验板的使用 二、实验所用器材: (1)计算机 (2)直流稳压电源 (3)数字系统与逻辑设计实验开发板 三、实验任务要求 (1)用逻辑门设计实现一个半加器,仿真验证其功能,并生成新的半加器图形模 块单元。 (2)用(1)中生成的半加器模块和逻辑门设计实现一个全加器,仿真验证其功能, 并下载到实验板测试,要求用拨码开关设定输入信号,发光二极管显示输出信号。 (3)用3线-8线译码器(74LS138)和逻辑门设计实现函数 ,仿真验证其功能,并下载到实验板测试。要求用拨码开关设定输入信号,发光二极管显示输出信号。 四、设计思路和过程 (1)半加器的设计 半加器电路是指对两个输入数据位进行加法,输出一个结果位和进位,不产生进位输入的加法器电路。是实现两个一位二进制数的加法运算电路。数据输入AI被加数、BI加数,数据输出SO和数(半加和)、进位C0。 在数字电路设计中,最基本的方法是不管半加器是一个什么样的电路,按组合数字电路的分析方法和步骤进行。 1.列出真值表 半加器的真值表见下表。表中两个输入是加数A0和B0,输出有一个是和S0,另一个是进位C0。

2 该电路有两个输出端,属于多输出组合数字电路,电路的逻辑表达式如下函数的逻辑表达式为:SO=AI⊕BI CO=AB 所以,可以用一个两输入异或门和一个两输入与门实现。

北邮数字电路综合实验报告

数字电路综合实验报告 简易智能密码锁 一、实验课题及任务要求 设计并实现一个数字密码锁,密码锁有四位数字密码和一个确认开锁按键,密码输入正确,密码锁打开,密码输入错误进行警示。 基本要求: 1、密码设置:通过键盘进行4 位数字密码设定输入,在数码管上显示所输入数字。通过密码设置确定键(BTN 键)进行锁定。 2、开锁:在闭锁状态下,可以输入密码开锁,且每输入一位密码,在数码管上显示“-”,提示已输入密码的位数。输入四位核对密码后,按“开锁”键,若密码正确则系统开锁,若密码错误系统仍然处于闭锁状态,并用蜂鸣器或led 闪烁报警。 3、在开锁状态下,可以通过密码复位键(BTN 键)来清除密码,恢复初始密码“0000”。闭锁状态下不能清除密码。 4、用点阵显示开锁和闭锁状态。 提高要求: 1、输入密码数字由右向左依次显示,即:每输入一数字显示在最右边的数码管上,同时将先前输入的所有数字向左移动一位。 2、密码锁的密码位数(4~6 位)可调。

3、自拟其它功能。 二、系统设计 2.1系统总体框图 2.2逻辑流程图

2.3MDS图 2.4分块说明 程序主要分为6个模块:键盘模块,数码管模块,点阵模块,报警模块,防抖模块,控制模块。以下进行详细介绍。 1.键盘模块 本模块主要完成是4×4键盘扫描,然后获取其键值,并对其进行编码,从而进行按键的识别,并将相应的按键值进行显示。 键盘扫描的实现过程如下:对于4×4键盘,通常连接为4行、4列,因此要识别按键,只需要知道是哪一行和哪一列即可,为了完成这一识别过程,我们的思想是,首先固定输出高电平,在读入输出的行值时,通常高电平会被低电平拉低,当当前位置为高电平“1”时,没有按键按下,否则,如果读入的4行有一位为低电平,那么对应的该行肯定有一个按键按下,这样便可以获取到按键的行值。同理,获取列值也是如此,先输出4列为高电平,然后在输出4行为低电平,再读入列值,如果其中有哪一位为低电平,那么肯定对应的那一列有按键按下。由此可确定按键位置。

数字钟设计报告——数字电路实验报告

. 数字钟设计实验报告 专业:通信工程 :王婧 班级:111041B 学号:111041226 .

数字钟的设计 目录 一、前言 (3) 二、设计目的 (3) 三、设计任务 (3) 四、设计方案 (3) 五、数字钟电路设计原理 (4) (一)设计步骤 (4) (二)数字钟的构成 (4) (三)数字钟的工作原理 (5) 六、总结 (9) 1

一、前言 此次实验是第一次做EDA实验,在学习使用软硬件的过程中,自然遇到很多不懂的问题,在老师的指导和同学们的相互帮助下,我终于解决了实验过程遇到的很多难题,成功的完成了实验,实验结果和预期的结果也是一致的,在这次实验中,我学会了如何使用Quartus II软件,如何分层设计点路,如何对实验程序进行编译和仿真和对程序进行硬件测试。明白了一定要学会看开发板资料以清楚如何给程序的输入输出信号配置管脚。这次实验为我今后对 EDA的进一步学习奠定了更好的理论基础和应用基础。 通过本次实验对数电知识有了更深入的了解,将其运用到了实际中来,明白了学习电子技术基础的意义,也达到了其培养的目的。也明白了一个道理:成功就是在不断摸索中前进实现的,遇到问题我们不能灰心、烦躁,甚至放弃,而要静下心来仔细思考,分部检查,找出最终的原因进行改正,这样才会有进步,才会一步步向自己的目标靠近,才会取得自己所要追求的成功。 2

二、设计目的 1.掌握数字钟的设计方法。 2熟悉集成电路的使用方法。 3通过实训学会数字系统的设计方法; 4通过实训学习元器件的选择及集成电路手册查询方法; 5通过实训掌握电子电路调试及故障排除方法; 6熟悉数字实验箱的使用方法。 三、设计任务 设计一个可以显示星期、时、分、秒的数字钟。 要求: 1、24小时为一个计数周期; 2、具有整点报时功能; 3、定时闹铃(未完成) 四、设计方案 一个基本的数字钟电路主要由译码显示器、“时”,“分”,“秒”计数器和定时器组成。干电路系统由秒信号发生器、“时、 3

数字电路实验报告

数字电路实验报告 姓名:张珂 班级:10级8班 学号:2010302540224

实验一:组合逻辑电路分析一.实验用集成电路引脚图 1.74LS00集成电路 2.74LS20集成电路 二、实验内容 1、组合逻辑电路分析 逻辑原理图如下:

U1A 74LS00N U2B 74LS00N U3C 74LS00N X1 2.5 V J1 Key = Space J2 Key = Space J3 Key = Space J4 Key = Space VCC 5V GND 图1.1组合逻辑电路分析 电路图说明:ABCD 按逻辑开关“1”表示高电平,“0”表示低电平; 逻辑指示灯:灯亮表示“1”,灯不亮表示“0”。 真值表如下: A B C D Y 0 0 0 0 0 0 0 0 1 0 0 0 1 0 0 0 0 1 1 1 0 1 0 0 0 0 1 0 1 0 0 1 1 0 0 0 1 1 1 1 1 0 0 0 0 1 0 0 1 0 1 0 1 0 0 1 0 1 1 1 1 1 0 0 1 1 1 0 1 1 1 1 1 0 1 1 1 1 1 1 表1.1 组合逻辑电路分析真值表 实验分析: 由实验逻辑电路图可知:输出X1=AB CD =AB+CD ,同样,由真值表也能推出此方程,说明此逻辑电路具有与或功能。 2、密码锁问题: 密码锁的开锁条件是:拨对密码,钥匙插入锁眼将电源接通,当两个条件同时满足时,开锁信号为“1”,将锁打开;否则,报警信号为“1”,则接通警铃。

试分析下图中密码锁的密码ABCD 是什么? 密码锁逻辑原理图如下: U1A 74LS00N U2B 74LS00N U3C 74LS00N U4D 74LS00N U5D 74LS00N U6A 74LS00N U7A 74LS00N U8A 74LS20D GND VCC 5V J1 Key = Space J2 Key = Space J3 Key = Space J4 Key = Space VCC 5V X1 2.5 V X2 2.5 V 图 2 密码锁电路分析 实验真值表记录如下: 实验真值表 A B C D X1 X2 0 0 0 0 0 1 0 0 0 1 0 1 0 0 1 0 0 1 0 0 1 1 0 1 0 1 0 0 0 1 0 1 0 1 0 1 0 1 1 0 0 1 0 1 1 1 0 1 1 0 0 0 0 1 1 0 0 1 1 0 1 0 1 0 0 1 1 0 1 1 0 1 1 1 0 0 0 1 1 1 0 1 0 1 1 1 1 0 0 1 1 1 1 1 0 1 表1.2 密码锁电路分析真值表 实验分析: 由真值表(表1.2)可知:当ABCD 为1001时,灯X1亮,灯X2灭;其他情况下,灯X1灭,灯X2亮。由此可见,该密码锁的密码ABCD 为1001.因而,可以得到:X1=ABCD ,X2=1X 。

北京邮电大学数字电路实验报告

北京邮电大学 数字电路与逻辑设计实验 实验报告 实验名称:QuartusII原理图输入 法设计与实现 学院:北京邮电大学 班级: 姓名: 学号:

一.实验名称和实验任务要求 实验名称:QuartusII原理图输入法设计与实现 实验目的:⑴熟悉用QuartusII原理图输入法进行电路设计和仿真。 ⑵掌握QuartusII图形模块单元的生成与调用; ⑶熟悉实验板的使用。 实验任务要求:⑴掌握QuartusII的基础上,利用QuartusII用逻辑 门设计实现一个半加器,生成新的半加器图像模 块。 ⑵用实验内容(1)中生成的半加器模块以及逻辑门 实现一个全加器,仿真验证其功能,并能下载到实 验板上进行测试,要求用拨码开关设定输入信号, 发光二级管显示输出信号。 ⑶用3线—8线译码器(74L138)和逻辑门实现要求 的函数:CBA F+ C + =,仿真验证其 + B C B A A A B C 功能,,并能下载到实验板上进行测试,要求用拨 码开关设定输入信号,发光二级管显示输出信号。二.设计思路和过程 半加器的设计实现过程:⑴半加器的应有两个输入值,两个输出值。 a表示加数,b表示被加数,s表示半加和, co表示向高位的进位。

⑵由数字电路与逻辑设计理论知识可知 b a s ⊕=;b a co ?= 选择两个逻辑门:异或门和与门。a,b 为异 或门和与门的输入,S 为异或门的输出,C 为与门的输出。 (3)利用QuartusII 仿真实现其逻辑功能, 并生成新的半加器图形模块单元。 (4)下载到电路板,并检验是否正确。 全加器的设计实现过程:⑴全加器可以由两个半加器和一个或门构 成。全加器有三个输入值a,b,ci ,两个输 出值s,co :a 为被加数,b 为加数,ci 为低 位向高位的进位。 ⑵全加器的逻辑表达式为: c b a s ⊕⊕= b a ci b a co ?+?⊕=)( ⑶利用全加器的逻辑表达式和半加器的逻 辑功能,实现全加器。 用3线—8线译码器(74L138)和逻辑门设计实现函数 CBA A B C A B C A B C F +++= 设计实现过程:⑴利用QuartusII 选择译码器(74L138)的图形模块

数字电子钟课程设计实验报告

中北大学 信息与通信工程学院 通信工程专业 《电子线路及系统》课程设计任务书2016/2017 学年第一学期 学生姓名:张涛学号: 李子鹏学号: 课程设计题目:数字电子钟的设计 起迄日期:2017年1月4日~2017年7月10日 课程设计地点:科学楼 指导教师:姚爱琴 2017年月日 课程设计任务书

中北大学 信息与通信工程学院 通信工程专业 《电子线路及系统》课程设计开题报告2016/2017 学年第一学期 题目:数字电子钟的设计 学生姓名:张涛学号: 李子鹏学号:

指导教师:姚爱琴 2017 年 1 月 6 日 中北大学 信息与通信工程学院 通信工程专业 《电子线路及系统》课程设计说明书2016/2017 学年第二学期 题目:数字电子钟的设计 学生姓名:张涛学号: 李子鹏学号: 指导教师:姚爱琴 2017 年月日

目录 1 引言 (6) 2 数字电子钟设计方案 (6) 2.1 数字计时器的设计思想 (6) 2.2数字电路设计及元器件参数选择 (6) 2.2.2 时、分、秒计数器 (7) 2.2.3 计数显示电路 (8) 2.2.5 整点报时电路 (10) 2.2.6 总体电路 (10) 2.3 安装与调试 (11) 2.3.1 数字电子钟PCB图 (11) 3 设计单元原理说明 (11) 3.1 555定时器原理 (12) 3.2 计数器原理 (12) 3.3 译码和数码显示电路原理 (12) 3.4 校时电路原理 (12) 4 心得与体会 (12) 1 引言 数字钟是一种用数字电子技术实现时,分,秒计时的装置,具有较高的准确性和直观性等各方面的优势,而得到广泛的应用。此次设计数字电子钟是为了了解数字钟的原理,在设计数字电子钟的过程中,用数字电子技术的理论和制作实践相结合,进一步加深数字电子技术课程知识的理解和应用,同时学会使用Multisim电子设计软件。 2数字电子钟设计方案 2.1 数字计时器的设计思想 要想构成数字钟,首先应选择一个脉冲源——能自动地产生稳定的标准时间脉冲信号。而脉冲源产生的脉冲信号地频率较高,因此,需要进行分频,使得高频脉冲信号变成适合于计时的低频脉冲信号,即“秒脉冲信号”(频率为1Hz)。经过分频器输出的秒脉冲信号到计数器中进行计数。由于计时的规律是:60秒=1分,60分=1小时,24小时=1天,就需要分别设计60进制,24进制计数器,并发出驱动信号。各计数器输出信号经译码器、驱动器到数字显示器,是“时”、“分”、“秒”得以数字显示出来。 值得注意的是:任何记时装置都有误差,因此应考虑校准时间电路。校时电路一般

北邮数电实验报告

北京邮电大学实验报告 实验名称:数字电路与逻辑设计实验报告 学院:信息与通信工程学院 班级: 姓名: 学号: 序号: 日期:

实验三:用VHDL语言设计与实现逻辑电路 一、实验内容 1. 用VHDL语言设计实现一个带异步复位的8421码十进制计数器,仿真验证其功能,并下载到实验版测试。要求用按键设定输入信号,发光二极管显示输出信号; 2.用VHDL语言设计实现一个分频系数为12,分频输出信号占空比为50%的分频器,仿真验证其功能; 3.将(1),(2)和数码管译码器3个电路进行连接,并下载到实验板显示计数结果。 二、模块端口说明及连接图 1.分频器 2. 计数器 clk: 时钟输入信号 clk: 时钟信号输入 clear: 复位信号输入 clear: 复位信号输入 clk_out: 时钟分频后的信号输出 q: 计数器的输出 3.数码管显示 b: 数码管的输入信号 seg: 译码显示输出 onoff: 数码管的输出控制

4.连接图 三、实验分析 1.设计思路 本实验将之前的分频器和计数器以及数码管显示模块组合起来,实现了单个数码管现显示0~9,每隔0.5s切换一次显示内容。 COMPONENT div_12实现了时钟分频,将50MHz的单片机晶振时钟进行分频,输出频率2HZ占空比50%的方波时钟,以此时钟作为内部时钟驱动计数器。 COMPONENT jishuqi是一个十进制计数器,NUM从“0000”到“1001”循环变化,模为10。计数器的输出传递给数码管译码显示电路。 COMPONENT seg7_1是数码管译码显示电路,将收到的信号NUM译码并控制数码管的段锁存来控制数码管的显示。 整体来看,div-12提供了分频后2Hz的时钟,驱动计数器计数,计数的结果作为数码管译码显示模块的输入,根据计数器实时的数进行数码管的显示。综合起来就实现了设计的功能。 在进行电路的连接时,可直接在代码中分成三个进程来实现,也可通过为每个模块建立符号,连接电路图来实现。 2. 具体代码如下: LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY fenpinjishu IS PORT( clear2 :IN STD_LOGIC; clk1:IN STD_LOGIC; b1:OUT STD_LOGIC_VECTOR(6 downto 0); CAT:OUT STD_LOGIC_VECTOR(7 downto 0) );

数字电路组合逻辑电路设计实验报告

数字电路组合逻辑电路设 计实验报告 The Standardization Office was revised on the afternoon of December 13, 2020

实验三组合逻辑电路设计(含门电路功能测试)

一、实验目的 1.掌握常用门电路的逻辑功能 2.掌握小规模集成电路设计组合逻辑电路的方法 3.掌握组合逻辑电路的功能测试方法 二、实验设备与器材 Multisim 、74LS00 四输入2与非门、示波器、导线 三、实验原理 TTL集成逻辑电路种类繁多,使用时应对选用的器件做简单逻辑功能检查,保证实验的顺利进行。 测试门电路逻辑功能有静态测试和动态测试两种方法。静态测试时,门电路输入端加固定的高(H)、低电平,用示波器、万用表、或发光二极管(LED)测

出门电路的输出响应。动态测试时,门电路的输入端加脉冲信号,用示波器观测输入波形与输出波形的同步关系。 下面以74LS00为例,简述集成逻辑门功能测试的方法。74LS00为四输入2与非门,电路图如3-1所示。74LS00是将四个二输入与非门封装在一个集成电路芯片中,共有14条外引线。使用时必须保证在第14脚上加+5V电压,第7脚与底线接好。 整个测试过程包括静态、动态和主要参数测试三部分。 表3-1 74LS00与非门真值表 1.门电路的静态逻辑功能测试 静态逻辑功能测试用来检查门电路的真值表,确认门电路的逻辑功能正确与否。实验时,可将74LS00中的一个与非门的输入端A、B分别作为输入逻辑变量,加高、低电平,观测输出电平是否符合74LS00的真值表(表3-1)描述功能。

北邮-数电实验报告

北邮-数电实验报告

数字电路实验报告 学院:信息与通信工程 专业:信息工程 班级:2013211125 学号:2013210681 姓名:袁普

②:仿真波形图以及分析 波形图: 波形分析:通过分析ab ci三个输入在8中不同组合下的输出,发现与全加器的真值表吻合,说明实现了全加器的逻辑功能。同时看见波形中出现了毛刺(冒险),这也与事实一致。 ③:故障及问题分析 第一次在做全加器的时候发现找不到已经生成的半加器模块,后来发现是因为在建立工程时这两个项目没有建在同一个文件夹里,在调用的时候就找不到。后来我将全加器工程建在同一个文件夹里解决了此问题。

实验二:用VHDL设计和实现组合逻辑电路 一:实验要求 ①:用VHDL设计一个8421码转换为格雷码的代码转换器,仿真验证其功能。 ②:用VHDL设计一个4位二进制奇校验器,要求在为奇数个1时输出为1,偶数个1时输出为0,仿真验证其功能。 ③:用VHDL设计一个数码管译码器,仿真验证其功能,下载到实验板测试,要求用拨码开关设定输入信号,数码管显示输出信号,并且只使一个数码管有显示,其余为熄灭状态。 二:故障及问题分析 在刚开始实现让一个数码管显示的时候,我本来准备再设置6个输入和输出,通过实验板上的拨码来输入信息分别控制不同的数码管的的开闭状态,但是后来发现这样效率很低而且实验板上的拨码开关数量根本不够。在老师的提醒下,我最终在VHDL里直接增加了一个向量输出”011111”来直接控制cat0~5六个管脚,从而达到了实验的要求。

实验三:用VHDL设计和实现时序逻辑电路 一:实验要求 ①:用VHDL语言设计实现一个8421十进制计数器,要求有高电平复位功能,仿真验证其功能。 ②:用VHDL语言设计实现一个分频系数为12,输出为占空比50%方波的分频器,有高电平复位功能,仿真验证其功能。 ③:将(1),(2)和数码管译码器三个电路进行连接,仿真验证其功能,并下载到实验板进行测试,要求第三个数码管显示数字。二:报告内容 ①实验三(3)模块端口说明及模块代码 模块一:div12为一个有高电平复位功能的分频系数为12的分屏器,其输出是一个占空比50%的方波。此模块输入连接一个时钟输入,即可在输出端得到一个周期更大的方波输出。 library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity div12 is port( clear,clk:in std_logic; clk_out:out std_logic ); end div12; architecture struct of div12 is signal temp:integer range 0 to 5; signal clktmp:std_logic; begin process(clk,clear) begin if(clear='1') then

北邮数字电路与逻辑设计实验-实验报告(上)

北京邮电大学电路实验中心<数字电路与逻辑设计实验(上)> 实 验 报 告 班级: xxx 学院: xxx 实验室: xxx 审阅教师:姓名(班内序号): xxx)学号: 2xxx 实验时间: xxxx 评定成绩:

目录 实验1 Quartus II 原理图输入法设计与实现 (3) 一、实验目的 (3) 二、实验所用器材 (3) 三、实验任务要求 (3) 四、实验原理图 (3) 五、实验仿真波形图及分析 (4) 实验2 用VHDL 设计与实现组合逻辑电路 (5) 一、实验目的 (5) 二、实验所用器材 (5) 三、实验任务要求 (5) 四、VHDL代码 (5) 五、实验仿真波形图及分析 (7) 实验3 用VHDL 设计与实现时序逻辑电路 (8) 一、实验目的 (8) 二、实验所用器材 (8) 三、实验任务要求 (8) 四、模块端口说明及连接图 (8) 五、VHDL代码 (9) 六、实验仿真波形图及分析 (10) 实验4 用VHDL 设计与实现数码管动态扫描控制器 (10) 一、实验目的 (10) 二、实验所用器材 (11) 三、实验任务要求 (11) 四、模块端口说明及连接图 (11) 五、VHDL代码 (11) 六、实验仿真波形图及分析 (15) 故障及问题分析 (16) 总结和结论 (17)

实验1 Quartus II 原理图输入法设计与实现 一、实验目的 (1)熟悉用Quartus II原理图输入法进行电路设计和仿真; (2)掌握Quartus II 图形模块单元的生成与调用; (3)熟悉实验板的使用。 二、实验所用器材 (1)计算机; (2)直流稳压电源; (3)数字系统与逻辑设计实验开发板。 三、实验任务要求 (1)用逻辑门设计实现一个半加器,仿真验证其功能,并生成新的半加器图形模块单元。 (2)用(1)中生成的半加器模块和逻辑门设计实现一个全加器,仿真验证其功能,并下载到实验板测试,要求用拨码开关设定输入信号,发光二极管显示输出信号。 (3)用3线-8线译码器(74LS138)和逻辑门设计实现函数+CBA,仿真验证其功能,并下载到实验板测试。要求用拨码开关设定输入信号,发光二极管显示输出信号。 四、实验原理图 (1)半加器原理图 (2)全加器原理图

北京邮电大学电路实验报告-(小彩灯)

北京邮电大学电路实验报告-(小彩灯)

电子电路综合实验报告课题名称:基于运算放大器的彩灯显示电路的设计与实现 姓名:班级:学号: 一、摘要: 运用运算放大器设计一个彩灯显示电路,通过迟滞电压比较器和反向积分器构成方波—三角波发生器,三角波送入比较器与一系列直流电平比较,比较器输出端会分别输出高电平和低电平,从而顺序点亮或熄灭接在比较器输出端的发光管。 关键字: 模拟电路,高低电平,运算放大器,振荡,比较 二、设计任务要求: 利用运算放大器LM324设计一个彩灯显示电路,让排成一排的5个红色发光二极管(R1~R5)重复地依次点亮再依次熄灭(全灭→R1→R1R2→R1R2R3→R1R2R3R4→R1R2R3R4R5→R1R2R3R4→R1R2R3→R1R2→R1→全灭),同时让排成一排的6个绿色发光二极管(G1~G6)单光

三角波振荡电路可以采用如图2-28所示电路,这是一种常见的由集成运算放大器构成的方波和三角波发生器电路,图2-28中运放A1接成迟滞电压比较器,A2接成反相输入式积分器,积分器的输入电压取自迟滞电压比较器的输出,迟滞电压比较器的输入信号来自积分器的输出。假设迟滞电压比较器输出U o1初始值为高电平,该高电平经过积分器在U o2端得到线性下降的输出信号,此线性下降的信号又反馈至迟滞电压比较器的输入端,当其下降至比较器的下门限电压U th-时,比较器的输出发生跳变,由高电平跳变为低电平,该低电平经过积分器在U o2端得到线性上升的输出信号,此线性上升的信号又反馈至迟

滞电压比较器的输入端,当其上升至比较器的上门限电压U th+时,比较器的输出发生跳变,由低电平跳变为高电平,此后,不断重复上述过程,从而在迟滞电压比较器的输出端U o1得到方波信号,在反向积分器的输出端U o2得到三角波信号。假设稳压管反向击穿时的稳定电压为U Z,正向导通电压为U D,由理论分析可知,该电路方波和三角波的输出幅度分别为: 式(5)中R P2为电位器R P动头2端对地电阻,R P1为电位器1端对地的电阻。 由上述各式可知,该电路输出方波的幅度由稳压管的稳压值和正向导通电压决定,三角波的输 出幅度决定于稳压管的稳压值和正向导通电压以及反馈比R1/R f,而振荡频率与稳压管的稳压值和正向导通电压无关,因此,通过调换具有不同稳压值和正向 导通电压的稳压管可以成比例地改变方波和三角波的幅度而不改变振荡频率。 电位器的滑动比R P2/R P1和积分器的积分时间常数R2C的改变只影响振荡频率而 不影响振荡幅度,而反馈比R1/R f的改变会使振荡频率和振荡幅度同时发生变化。因此,一般用改变积分时间常数的方法进行频段的转换,用调节电位器滑动头 的位置来进行频段内的频率调节。

北邮数电实验报告

北京邮电大学 实验报告实验名称:数电电路与逻辑设计实验 学院:信息与通信工程学院 班级: 姓名: 学号: 班内序号: 日期:

一. 实验一:Quartus II 原理图输入法设计 1. 实验名称和实验任务要求 (1)用逻辑门设计实现一个半加器,仿真验证其功能,并生成新的半加器图形模块 元。 (2)用(1)中生成的半加器模块和逻辑门设计实现一个全加器,仿真验证其功能,并下载到实验板测试,要求用拨码开关设定输入信号,发光二极管显示输出信号入信号。 (3)用3线-8线译码器(74LS138)和逻辑门设计实现函数 F=A B C +A B C +A B C + A B C 。 2. 实验原理图及波形图 (1)半加器 (2)全加器

(3)74LS38 3.仿真波形图分析 (1)半加器: 输入为a,b,输出S,CO(进位)。 当ab都为0时,半加和s=0,进位端co=0。 当ab都为1时,半加和s=0,进位端co=1。 当a=1,b=0 或a=0,b=1时,半加和s=1,进位端co=0。 (2)全加器:

输入a,b,输出S,CO(进位),ci(低进位)。 当a=0,b=0,ci=0,输出s=0,co=0。 当a=0,b=1或a=1,b=0又 ci=0,输出s=1,co=0。 当a=0,b=0,ci=1,输出s=1,co=0。 (3)74LS138 输入A,B,C,输出为3。 四个输出对应F中的四个最小项,Y0、Y2、Y4、Y7,以实现函数功能。 二.实验二:用 VHDL 设计与实现组合逻辑电路 1.实验名称和实验任务要求 (1)用VHDL语言设计实现一个共阴极7段数码管译码器,仿真验证其功能。要求用拨码开关设定输入信号,7段数码管显示输出信号。 (2) 用VHDL语言设计实现一个8421码转换为余3码的代码转换器,仿真验证其功能。要求用拨码开关设定输入信号,发光二极管显示输出信号。 (3) 用VHDL语言设计实现一个4位二进制奇校验器,输入奇数个’1’时,输出为’1’,否则输出’0’,仿真验证其功能。要求用拨码开关设定输入信号,发光二极管显示输出信号。 2.实验代码及波形图 (1)共阴极7段数码管译码器 LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY GUAN IS PORT(A:IN STD_LOGIC_VECTOR(3 DOWNTO 0); B:OUT STD_LOGIC_VECTOR(6 DOWNTO 0); C:OUT STD_LOGIC_VECTOR(5 DOWNTO 0)); END GUAN; ARCHITECTURE encoder_arch OF GUAN IS BEGIN PROCESS(A) BEGIN C<="011111"; CASE A IS WHEN"0000"=> B<="1111110";--0 WHEN"0001"=> B<="0110000";--1 WHEN"0010"=> B<="1101101";--2 WHEN"0011"=> B<="1111001";--3 WHEN"0100"=> B<="0110011";--4 WHEN"0101"=> B<="1011011";--5 WHEN"0110"=> B<="1011111";--6 WHEN"0111"=> B<="1110000";--7 WHEN"1000"=> B<="1111111";--8 WHEN"1001"=> B<="1111011";--9

北邮数字电路综合实验报告——交通灯控制器的VHDL实现

数字电路综合实验报告 班级: 姓名: 班内序号: 学号: 日期:

目录 一、实验摘要 (3) 二、实验任务 (3) 1.任务要求 (3) 2.任务解析 (3) 三、实验设计思路 (4) 1.状态转移图 (4) 2.流程图 (5) 3.模块确定 (5) 4.系统框图 (7) 四、程序代码 (7) ⒈主程序 (7) ⒉分频模块 (9) ⒊防抖模块 (10) ⒋交通灯控制模块 (11) ⒌数字译码模块 (14) 五、实验结果 (15) 1.仿真结果 (15) 2.实物结果 (17) 六、所遇问题分析 (17) 七、实验总结 (18)

交通灯控制器的VHDL实现 一、实验摘要 随着交通情况的日益复杂,交通灯在生活中所处的位置也越来越高。本实验就是基于VHDL语言编程实现了十字路口的交通灯控制器。对于交通等控制器的设计是分模块自顶向下的设计思想,软硬件结合来实现本设计。 关键字:交通灯、VHDL、控制器 二、实验任务 1.任务要求 1)南北和东西方向各有一组绿、黄、红灯用于指挥交通,绿灯、黄灯和红灯的持续时间分别为20秒、5 秒和25秒; 2)当有特殊情况(如消防车、救护车等)时,两个方向均为红灯亮,计时停止,当特殊情况结束后,控制 器恢复原来状态,继续正常运行; 3)用两组数码管,以倒计时方式显示两个方向允许通行或禁止通行的时间; 2.任务解析 东西(A车道)和南北(B车道)方向各有一组绿、黄、红灯用于指挥交通(如图1),绿灯、黄灯和红灯的持续时间分别为20 秒、5 秒和25 秒。 图1 十字路口交通灯模型

因此,可以设计如下四个状态,其关系为: 状态 亮灯情况 车辆行驶状况 持续时 间(秒)下一状态A车道B车道 S0 红亮红亮紧急状况,A/B车道均禁止通行~ S1 S1 绿亮红亮A车道通行,B车道禁止通行20 S2 S2 黄亮红亮A车道缓行,B车道禁止通行 5 S3 S3 红亮绿亮A车道禁止通行,B车道通行20 S4 S4 红亮黄亮A车道禁止通行,B车道缓行 5 S1 三、实验设计思路 1.状态转移图 图2 状态转移图

中山大学数字电路与逻辑设计实验报告

中山大学数字电路与逻辑设计实验报告 院系信息科学与技术学院学号 专业计算机科学类实验人 3、实验题目:AU(Arithmetic Unit,算术单元)设计。 实验内容: 设计一个半加半减器,输入为 S、A、B,其中S为功能选择口。当S=0时,输出A+B及进位;当S=1时,输出A-B及借位。 S 输入1 输入2 输出Y 进/借位Cn 0 A B A+B 进位 1 A B A-B 借位 利用三种方法实现。 (1)利用卡诺图简化后只使用门电路实现。 (2)使用74LS138实现。 (3)使用74LS151实现,可分两次单独记录和/差结果、进位借位结果或使用两块74LS151实现。 实验分析: 真值表 S A B Y Cn 0 0 0 0 0 0 0 1 1 0 0 1 0 1 0 0 1 1 0 1 1 0 0 0 0 1 0 1 1 1 1 1 0 1 0 1 1 1 0 0 卡诺图: S AB 0 1 通过卡诺图可得:Y=A B+A B 00 01 11 100 0 1 1 0 0 1 1

S AB 0 1 00 Cn=AB S +A BS 01 =(A S +A S)B 11 10 实验设计: (1)利用门电路实现。 ①利用74LS197的八进制输出端Q1、Q2、Q3作为B 、A 、S 的输入。 ②用异或门74LS86实现输出Y. ③用74LS86实现A ⊕B ,再用74LS08与B 实现与门。 (2)利用74LS138实现 ①将74LS197的Q3、Q2、Q1作为74LS138的S2、S1、S0输入,G2A 、G2B 接低电平,G1接高电平。 ②将74LS138的Y1、Y5、Y2、Y6利用74LS20实现与非门作为输出Y 。 ③ 将74LS138的Y3、Y5利用74LS00实现与非门作为输出Cn 。 0 0 0 1 1 0 0 0

北邮-电子电路综合设计实验(函数信号发生器)报告

电子电路综合设计实验报告 实验1 函数信号发生器的设计与实现 姓名:------ 学号:---------- 班内序号:--

一. 实验名称: 函数信号发生器的设计与调试 二.实验摘要: 采用运放组成的积分电路产生方波-三角波,可得到比较理想的方波和三角波。根据所需振荡频率的高低和对方波前后沿陡度的要求以及对所需方波、三角波的幅度可以确定合适的运放以及稳压管的型号、所需电阻的大小和电容的值。三角波-正弦波的转换是利用差分放大器来完成的,选取合适的滑动变阻器来调节三角波的幅度以及电路的对称性。同时利用隔直电容、滤波电容来改善输出正弦波的波形。 关键词: 方波三角波正弦波频率可调 三、设计任务要求 1.基本要求: (1)输出频率能在1-10KHz范围内连续可调,无明显失真; (2)方波输出电压Uopp=12V,上升、下降沿小于10us,占空比可调范围30%-70%; (3)三角波Uopp=8V; (4)正弦波Uopp错误!未找到引用源。1V. (5)设计该电路的电源电路(不要求实际搭建) 2.提高要求: (1)正弦波、三角波和方波输出波形的峰峰值Uopp均可在1V-10V内连续可调。 (2)三种输出波形的输出端口的输出阻抗小于100Ω。 (3)三种波形从同一端口输出,并能够显示当前输出信号的种类、大小和频率 (4)用CPLD设计DDS信号源 (5)其他函数信号发生器的设计方案 四、设计思路以及总体结构框图 本课题中函数发生器结构组成如下所示:由比较器和积分器组成方波—三角波产生电

路,比较器输出的方波经积分器得到三角波,三角波到正弦波的变换电路主要由差分放大器来完成。差分放大器具有工作点稳定,输入阻抗高,抗干扰能力较强等优点。特别是作为直流放大器时,可以有效地抑制零点漂移,因此可将频率很低的三角波变换成正弦波。波形变换的原理是利用差分放大器传输特性曲线的非线性。 图4-1 函数信号发生器的总体框图 五.分块电路和总体电路的设计 (1)方波——三角波产生电路 图5-1 方波-三角波产生电路

北邮数电实验分析报告-信息

北邮数电实验报告-信息

————————————————————————————————作者:————————————————————————————————日期:

数字电路与逻辑设计实验 姓名*** 学院信息与通信工程学院 专业信息工程 班级*** 学号**** 班内序号***

实验一 一、实验名称和实验任务要求 1.实验内容:QuartusII原理图输入法设计与实现。 2.实验目的: (1)熟悉用QuartusII原理图输入法进行电路设计和仿真。 (2)掌握QuartusII图形模块单元的生成与调用。 (3)熟悉实验板的使用。 3.实验任务要求: (1)用逻辑门设计实现一个半加器,仿真验证其功能,并生成新的半加器图像模块。 (2)用实验内容1中生成的半加器模块和逻辑门设计实现一个全加器,仿真验证其功能,并下载到实验板上测试。要求用拨码开关设定输入信 号,发光二极管显示输出信号。 (3)用3线—8线译码器(74LS138)和逻辑门实现函数 F=(/)(/)(/)+(/)(/)+(/)(/)+,仿真验证其功能,并下载到实 验板测试。要求用拨码开关设定输入信号,发光二极管显示输出信号。 二、原理图 半加器模块和逻辑门设计实现的全加器: 三、仿真波形图及分析 电路实现了全加器的功能。全加器是实现两个1位二进制数及低位来的进位相加求得和数及向高位进位的逻辑电路。由其原理可得逻辑表达式:sum=ain⊕bin⊕cin

cout = (ain⊕bin)cin + ain*bin。 列出真值表: 输入输出 ain bin cin cout sum 0 0 0 0 0 0 0 1 0 1 0 1 0 0 1 0 1 1 1 0 1 0 0 0 1 1 0 1 1 0 1 1 0 1 0 1 1 1 1 1 仿真波形对比真值表,可以看出波形图与理论值完全符合。 四、故障及问题分析 1、问题:按照逻辑表达式连接了全加器电路后,仿真波形很乱。 解决方法:思考后知道了应该把输入信号依次设成2的n次方,这样的仿真波形清楚容易分析。 2、问题:把代码下载到板子上的过程中,进行到37%的时候停了,等了2分钟 也没继续下载。 解决方法:再次重连USB尝试下载,手紧握着接线口,下载成功了,分析可能是接线口接触不好。 实验二 一、实验名称和实验任务要求 1.实验内容:用VHDL设计与实现组合逻辑电路。 2.实验目的: (1)熟悉用VHDL语言设计组合逻辑电路的方法。 (2)熟悉用QuartusII文本输入法进行电路设计。 3.实验任务要求: (1)用VHDL语言设计实现一个4位二进制奇校验器,输入奇数个‘1’时,输出为‘1’,否则输出‘0’,仿真验证其功能,并下载到实验板测 试。要求用拨码开关设定输入信号,发光二极管显示输出信号。 (2)用VHDL语言设计实现一个8421码转换为余3码的代码转换器,仿真验证其功能,并下载到实验板测试。要求用拨码开关设定输入信号, 发光二极管显示输出信号。

数字电路组合逻辑电路设计实验报告

实验三组合逻辑电路设计(含门电路功能测试)

一、实验目的 1.掌握常用门电路的逻辑功能 2.掌握小规模集成电路设计组合逻辑电路的方法 3.掌握组合逻辑电路的功能测试方法 二、实验设备与器材 Multisim 、74LS00 四输入2与非门、示波器、导线 三、实验原理 TTL集成逻辑电路种类繁多,使用时应对选用的器件做简单逻辑功能检查,保证实验的顺利进行。 测试门电路逻辑功能有静态测试和动态测试两种方法。静态测试时,门电路输入端加固定的高(H)、低电平,用示波器、万用表、或发光二极管(LED)测出门电路的输出响应。动

态测试时,门电路的输入端加脉冲信号,用示波器观测输入波形与输出波形的同步关系。 下面以74LS00为例,简述集成逻辑门功能测试的方法。74LS00为四输入2与非门,电路图如3-1所示。74LS00是将四个二输入与非门封装在一个集成电路芯片中,共有14条外引线。使用时必须保证在第14脚上加+5V电压,第7脚与底线接好。 整个测试过程包括静态、动态和主要参数测试三部分。 表3-1 74LS00与非门真值表 1.门电路的静态逻辑功能测试 静态逻辑功能测试用来检查门电路的真值表,确认门电路的逻辑功能正确与否。实验时,可将74LS00中的一个与非门的输入端A、B分别作为输入逻辑变量,加高、低电平,观测输出电平是否符合74LS00的真值表(表3-1)描述功能。 测试电路如图3-2所示。试验中A、B输入高、低电平,由数字电路实验箱中逻辑电平产生电路产生,输入F可直接插至逻辑电平只是电路的某一路进行显示。

仿真示意 2.门电路的动态逻辑功能测试 动态测试用于数字系统运行中逻辑功能的检查,测试时,电路输入串行数字信号,用示波器比较输入与输出信号波形,以此来确定电路的功能。实验时,与非门输入端A加一频率为

2016年北邮数电实验报告

数字电路与逻辑设计 实验报告 学院:电子工程学院 班级: 姓名: 学号: 班内序号:

目录 (一)实验名称及实验任务要求 (1) (二)模块端口说明及连接图 (2) 1.1实验三(3)模块端口说明 (2) 1.2实验三(3)连接图 (2) 2.1实验四模块端口说明 (2) 2.2实验四连接图 (2) (三)原理图或VHDL代码 (3) 1.实验一(2)原理图 (3) 2.实验三(3)VHDL代码 (4) 3.实验四VHDL代码 (7) (四)仿真波形 (10) 1.实验一(2)仿真波形 (10) 2.实验三(3)仿真波形 (11) 3.实验四仿真波形 (11) (五)仿真波形分析 (11) 1.实验一(2)仿真波形分析 (11) 2.实验三(3)仿真波形分析 (11) 3.实验四仿真波形分析 (11) (六)故障及问题分析 (12) (七)总结和结论 (13)

(一)实验名称及实验任务要求 实验一 名称:QuartusII原理图输入法设计与实现 实验任务要求:EDA基础实验1(1)、(2)、(3)必做,选做VHDL 实现加法器。 实验二 名称:用VHDL设计与实现组合逻辑电路 实验任务要求:四人表决器、8421码转格雷码、数码管译码器(下载测试)。 实验三 名称:用VHDL设计与实现时序逻辑电路 实验任务要求:分频器、8421十进制计数器、将分频器/8421十进制计数器/数码管译码器3个电路进行连接并下载。 实验四 名称:用VHDL设计与实现相关电路 实验任务要求:数码管动态扫描控制器、点阵扫描控制器。

(二)模块端口说明及连接图 1.1实验三(3)模块端口说明 cp:时钟信号输入; rst:8421十进制计数器异步置位; c[6...0]:七段二极管数码管显示; cat[7...0]:数码管显示。 1.2实验三(3)连接图 2.1实验四模块端口说明 cp:时钟信号输入; rst:8421计数器异步复位; lgt[6...0]:七段二极管数码管显示; cat[7...0]:数码管显示。 2.2实验四连接图

相关主题
文本预览
相关文档 最新文档