北邮数电综合实验电子沙漏的设计与实现
北邮数字电路综合实验报告
数字电路综合实验报告简易智能密码锁一、实验课题及任务要求设计并实现一个数字密码锁,密码锁有四位数字密码和一个确认开锁按键,密码输入正确,密码锁打开,密码输入错误进行警示。
基本要求: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行为低电平,再读入列值,如果其中有哪一位为低电平,那么肯定对应的那一列有按键按下。
北邮数电实验电子沙漏源代码
LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;ENTITY div IS --50000和50000000分频PORT(clk,clear,stop: IN STD_LOGIC;clk_out1,clk_out2:OUT STD_LOGIC);END div;ARCHITECTURE a OF div ISSIGNAL tmp1: INTEGER RANGE 0 TO 24999;SIGNAL tmp2: INTEGER RANGE 0 TO 499;SIGNAL clktmp1: STD_LOGIC;SIGNAL clktmp2: STD_LOGIC;BEGINclk_out1<=clktmp1;clk_out2<=clktmp2;P1:PROCESS(clear,clk)BEGINIF clear = '1' THENtmp1<=0;ELSIF clk'event AND clk = '1' THENIF tmp1 = 24999 THENtmp1<=0; clktmp1<= not clktmp1;ELSEtmp1<=tmp1+1;END IF;END IF;END PROCESS P1;P2:PROCESS(clear,stop,clktmp1)BEGINIF clear = '1' THENtmp2<=0;ELSIF stop = '0' THENIF clktmp1'event AND clktmp1 = '1' THENIF tmp2 = 499 THENtmp2<=0; clktmp2<= not clktmp2;ELSEtmp2<=tmp2+1;END IF;END IF;END IF;END PROCESS P2;END a;LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;ENTITY shalou ISPORT(clk0,reset,pause:IN STD_LOGIC;dir:IN STD_LOGIC;figures:OUT STD_LOGIC_VECTOR(6 downto 0);cats:OUT STD_LOGIC_VECTOR(1 downto 0);cat0:OUT STD_LOGIC_VECTOR(3 downto 0);row:OUT STD_LOGIC_VECTOR(15 downto 0);col:OUT STD_LOGIC_VECTOR(7 downto 0));END shalou;ARCHITECTURE b OF shalou ISCOMPONENT divPORT(clk,clear,stop: IN STD_LOGIC;clk_out1,clk_out2:OUT STD_LOGIC);END COMPONENT;SIGNAL clk1,clk2:STD_LOGIC;SIGNAL address:STD_LOGIC_VECTOR(1 downto 0);SIGNAL s1,s2:STD_LOGIC_VECTOR(3 downto 0);SIGNAL led1,led2:STD_LOGIC_VECTOR(6 downto 0);SIGNAL st1:STD_LOGIC_VECTOR(7 downto 0);SIGNAL data:STD_LOGIC_VECTOR(15 downto 0);SIGNAL d0,d1,d2,d3,d4,d5,d6,d7:STD_LOGIC_VECTOR(15 downto 0);SIGNAL pic:STD_LOGIC_VECTOR(4 downto 0);BEGINu1:div PORT MAP(clk=>clk0,clear=>reset,stop=>pause,clk_out1=>clk1,clk_out2=>clk2);cat0<="1111";p1:PROCESS(clk1,reset)BEGINIF reset='1' THENaddress<="11";ELSIF clk1'event AND clk1='1' THENIF address = "01" THENaddress<="00";ELSEaddress<=address+1;END IF;END IF;END PROCESS p1;p2:PROCESS(clk2,reset,pause)BEGINIF reset = '1' THENs1<="0000";ELSIF clk2'event AND clk2 = '1' THENIF s1 = "0101" AND s2 = "1001" THENs1<="0000";ELSIF s2 = "1001" THENs1<=s1+1;END IF;END IF;END PROCESS p2;p3:PROCESS(clk2,reset,pause)BEGINIF reset = '1' THENs2<="0000";ELSIF clk2'event AND clk2 = '1' THENIF s2 = "1001" THENs2<= "0000";ELSEs2<=s2+1;END IF;END IF;END PROCESS p3;p4:PROCESS(s1,s2)BEGINCASE s1 ISWHEN "0000"=>led1<="0111111";WHEN "0001"=>led1<="0000110";WHEN "0010"=>led1<="1011011";WHEN "0011"=>led1<="1001111";WHEN "0100"=>led1<="1100110";WHEN "0101"=>led1<="1101101";WHEN OTHERS=>led1<="0000000";END CASE;CASE s2 ISWHEN "0000"=>led2<="0111111";WHEN "0001"=>led2<="0000110";WHEN "0010"=>led2<="1011011";WHEN "0011"=>led2<="1001111";WHEN "0100"=>led2<="1100110";WHEN "0101"=>led2<="1101101";WHEN "0110"=>led2<="1111101";WHEN "0111"=>led2<="0000111";WHEN "1000"=>led2<="1111111";WHEN "1001"=>led2<="1101111";WHEN OTHERS=>led2<="0000000";END CASE;END PROCESS p4;p5:PROCESS(address)BEGINCASE address ISWHEN "00"=>figures<=led2; cats<="10";WHEN "01"=>figures<=led1; cats<="01";WHEN OTHERS=>figures<="0000000";END CASE;END PROCESS p5;row<=data;col<=st1;d0<="0000000001111111"WHEN pic = "00000"ELSE"0000100001110111"WHEN pic = "00001"ELSE"0000110001110011"WHEN pic = "00010"ELSE"0001110001100011"WHEN pic = "00011"ELSE"0001111001100001"WHEN pic = "00100"ELSE"0011111001000001"WHEN pic = "00101"ELSE"0011111101000000"WHEN pic = "00110"ELSE"0111111100000000"WHEN pic = "00111"ELSE"0111111100000000"WHEN pic = "01000"ELSE"0111111100000000"WHEN pic = "01001"ELSE"0111111100000000"WHEN pic = "01010"ELSE"0111111100000000"WHEN pic = "01011"ELSE"0111111100000000"WHEN pic = "01100"ELSE"0111111100000000"WHEN pic = "01101"ELSE"0111111100000000"WHEN pic = "01110"ELSE"0111111100000000"WHEN pic = "01111"ELSE"0000000000000000";d1<="0000000000111110"WHEN pic = "00000"ELSE "0000000000111110"WHEN pic = "00001"ELSE "0000000000111110"WHEN pic = "00010"ELSE "0000000000111110"WHEN pic = "00011"ELSE "0000000000111110"WHEN pic = "00100"ELSE "0000000000111110"WHEN pic = "00101"ELSE "0000000000111110"WHEN pic = "00110"ELSE "0000000000111110"WHEN pic = "00111"ELSE "0000100000110110"WHEN pic = "01000"ELSE "0000110000110010"WHEN pic = "01001"ELSE "0001110000100010"WHEN pic = "01010"ELSE "0001111000100000"WHEN pic = "01011"ELSE "0011111000000000"WHEN pic = "01100"ELSE "0011111000000000"WHEN pic = "01101"ELSE "0011111000000000"WHEN pic = "01110"ELSE "0011111000000000"WHEN pic = "01111"ELSE "0011111000000000"WHEN pic = "10000"ELSE "0000000000000000";d2<="0000000000011100"WHEN pic = "00000"ELSE "0000000000011100"WHEN pic = "00001"ELSE "0000000000011100"WHEN pic = "00010"ELSE "0000000000011100"WHEN pic = "00011"ELSE "0000000000011100"WHEN pic = "00100"ELSE "0000000000011100"WHEN pic = "00101"ELSE "0000000000011100"WHEN pic = "00110"ELSE "0000000000011100"WHEN pic = "00111"ELSE "0000000000011100"WHEN pic = "01000"ELSE "0000000000011100"WHEN pic = "01001"ELSE "0000000000011100"WHEN pic = "01010"ELSE "0000000000011100"WHEN pic = "01011"ELSE "0000000000011100"WHEN pic = "01100"ELSE "0000100000010100"WHEN pic = "01101"ELSE "0000110000010000"WHEN pic = "01110"ELSE "0001110000000000"WHEN pic = "01111"ELSE "0001110000000000"WHEN pic = "10000"ELSE "0000000000000000";d3<="0000000000001000"WHEN pic = "00001"ELSE "0000000000001000"WHEN pic = "00010"ELSE "0000000000001000"WHEN pic = "00011"ELSE "0000000000001000"WHEN pic = "00100"ELSE "0000000000001000"WHEN pic = "00101"ELSE "0000000000001000"WHEN pic = "00110"ELSE "0000000000001000"WHEN pic = "00111"ELSE "0000000000001000"WHEN pic = "01000"ELSE "0000000000001000"WHEN pic = "01001"ELSE "0000000000001000"WHEN pic = "01010"ELSE "0000000000001000"WHEN pic = "01011"ELSE "0000000000001000"WHEN pic = "01100"ELSE "0000000000001000"WHEN pic = "01101"ELSE "0000000000001000"WHEN pic = "01110"ELSE "0000000000001000"WHEN pic = "01111"ELSE "0000100000000000"WHEN pic = "10000"ELSE "0000000000000000";d4<="0000100000000000"WHEN pic = "00000"ELSE "0000100000000000"WHEN pic = "00001"ELSE "0000100000000000"WHEN pic = "00010"ELSE "0000100000000000"WHEN pic = "00011"ELSE "0000100000000000"WHEN pic = "00100"ELSE "0000100000000000"WHEN pic = "00101"ELSE "0000100000000000"WHEN pic = "00110"ELSE "0000100000000000"WHEN pic = "00111"ELSE "0000100000000000"WHEN pic = "01000"ELSE "0000100000000000"WHEN pic = "01001"ELSE "0000100000000000"WHEN pic = "01010"ELSE "0000100000000000"WHEN pic = "01011"ELSE "0000100000000000"WHEN pic = "01100"ELSE "0000100000000000"WHEN pic = "01101"ELSE "0000100000000000"WHEN pic = "01110"ELSE "0000100000000000"WHEN pic = "01111"ELSE "0000000000001000"WHEN pic = "10000"ELSE "0000000000000000";d5<="0001110000000000"WHEN pic = "00000"ELSE "0001110000000000"WHEN pic = "00001"ELSE "0001110000000000"WHEN pic = "00010"ELSE "0001110000000000"WHEN pic = "00011"ELSE"0001110000000000"WHEN pic = "00101"ELSE "0001110000000000"WHEN pic = "00110"ELSE "0001110000000000"WHEN pic = "00111"ELSE "0001110000000000"WHEN pic = "01000"ELSE "0001110000000000"WHEN pic = "01001"ELSE "0001110000000000"WHEN pic = "01010"ELSE "0001110000000000"WHEN pic = "01011"ELSE "0001110000000000"WHEN pic = "01100"ELSE "0001010000001000"WHEN pic = "01101"ELSE "0001000000001100"WHEN pic = "01110"ELSE "0000000000011100"WHEN pic = "01111"ELSE "0000000000011100"WHEN pic = "10000"ELSE "0000000000000000";d6<="0011111000000000"WHEN pic = "00000"ELSE "0011111000000000"WHEN pic = "00001"ELSE "0011111000000000"WHEN pic = "00010"ELSE "0011111000000000"WHEN pic = "00011"ELSE "0011111000000000"WHEN pic = "00100"ELSE "0011111000000000"WHEN pic = "00101"ELSE "0011111000000000"WHEN pic = "00110"ELSE "0011111000000000"WHEN pic = "00111"ELSE "0011011000001000"WHEN pic = "01000"ELSE "0011001000001100"WHEN pic = "01001"ELSE "0010001000011100"WHEN pic = "01010"ELSE "0010000000011110"WHEN pic = "01011"ELSE "0000000000111110"WHEN pic = "01100"ELSE "0000000000111110"WHEN pic = "01101"ELSE "0000000000111110"WHEN pic = "01110"ELSE "0000000000111110"WHEN pic = "01111"ELSE "0000000000111110"WHEN pic = "10000"ELSE "0000000000000000";d7<="0111111100000000"WHEN pic = "00000"ELSE "0111011100001000"WHEN pic = "00001"ELSE "0111001100001100"WHEN pic = "00010"ELSE "0110001100011100"WHEN pic = "00011"ELSE "0110000100011110"WHEN pic = "00100"ELSE "0100000100111110"WHEN pic = "00101"ELSE "0100000000111111"WHEN pic = "00110"ELSE "0000000001111111"WHEN pic = "00111"ELSE"0000000001111111"WHEN pic = "01001"ELSE"0000000001111111"WHEN pic = "01010"ELSE"0000000001111111"WHEN pic = "01011"ELSE"0000000001111111"WHEN pic = "01100"ELSE"0000000001111111"WHEN pic = "01101"ELSE"0000000001111111"WHEN pic = "01110"ELSE"0000000001111111"WHEN pic = "01111"ELSE"0000000001111111"WHEN pic = "10000"ELSE"0000000000000000";p6:PROCESS(clk1,reset)BEGINIF reset = '1' THENst1<="00000000";ELSIF clk1'event AND clk1 = '1' THENIF st1 = "00000000" OR st1 = "01111111" THENst1<="11111110"; data<=d0;ELSIF st1 = "11111110" THENst1<="11111101"; data<=d1;ELSIF st1 = "11111101" THENst1<="11111011"; data<=d2;ELSIF st1 = "11111011" THENst1<="11110111"; data<=d3;ELSIF st1 = "11110111" THENst1<="11101111"; data<=d4;ELSIF st1 = "11101111" THENst1<="11011111"; data<=d5;ELSIF st1 = "11011111" THENst1<="10111111"; data<=d6;ELSIF st1 = "10111111" THENst1<="01111111"; data<=d7;END IF;END IF;END PROCESS p6;p7:process(clk2,reset,pause)BEGINIF reset = '1' THENpic<="00000";ELSIF clk2'event AND clk2 ='1' THENIF dir = '0' THENIF pic /= "10000" THENpic<=pic+1;END IF;ELSEIF pic /= "00000" THEN pic<=pic-1;END IF;END IF;END IF;END PROCESS p7;END b;。
北邮电子电路综合设计实验报告
北邮电⼦电路综合设计实验报告北京邮电⼤学电⼦电路综合设计实验报告课题名称:函数信号发⽣器的设计学院:信息与通信⼯程学院班级:2013211123姓名:周亮学号:2013211123班内序号:9⼀、摘要⽅波与三⾓波发⽣器由集成运放电路构成,包括⽐较器与RC积分器组成。
⽅波发⽣器的基本电路由带正反馈的⽐较器及RC组成的负反馈构成;三⾓波主要由积分电路产⽣。
三⾓波转换为正弦波,则是通过差分电路实现。
该电路振荡频率和幅度便于调节,输出⽅波幅度⼤⼩由稳压管的稳压值决定,⽅波经积分得到三⾓波;⽽正弦波发⽣电路中两个电位器实现正弦波幅度与电路的对称性调节,实现较理想的正弦波输出波形。
⼆、关键词:函数信号发⽣器⽅波三⾓波正弦波三、设计任务要求1.基本要求:设计制作⼀个函数信号发⽣器电路,该电路能够输出频率可调的正弦波、三⾓波和⽅波信号。
(1) 输出频率能在1--‐10KHz范围内连续可调,⽆明显失真。
(2) ⽅波输出电压Uopp=12V(误差⼩于20%),上升、下降沿⼩于10us。
(3) 三⾓波Uopp=8V(误差⼩于20%)。
(4) 正弦波Uopp1V,⽆明显失真。
2. 提⾼要求:(1) 输出⽅波占空⽐可调范围30%--‐70%。
(2) 三种输出波形的峰峰值Uopp均可在1V--‐10V内连续可调电源电路⽅波--‐三⾓波发⽣电路正弦波发⽣电路⽅波输三⾓波输正弦波输现输出信号幅度的连续调节。
利⽤⼆极管的单向导通性,将⽅波--‐三⾓波中间的电阻改为两个反向⼆极管⼀端相连,另⼀端接⼊电位器,抽头处输出的结构,实现占空⽐连续可调,达到信号发⽣器实验的提⾼要求。
五、分块电路和总体电路的设计过程1. ⽅波--‐三⾓波产⽣电路设计过程:①根据所需振荡频率的⾼低和对⽅波前后沿陡度的要求,选择电压转换速率S R合适的运算放⼤器。
⽅波要求上升、下降沿⼩于10us,峰峰值为12V。
LM741转换速率为0.7V/us,上升下降沿为17us,⼤于要求值。
北邮数字电路与逻辑设计实验-实验报告(下)
北京邮电大学电路实验中心<数字电路与逻辑设计实验(下)>实验报告班级: xxx 学院: xxx实验室: xxx 审阅教师:姓名(班内序号): xxx 学号: xxx实验时间: xxx评定成绩:目录一、任务要求 (2)1.基本要求 (2)2.提高要求 (2)二、系统设计 (2)1.设计思路 (2)2.总体框图 (4)3.分块设计 (5)(1)分频器模块 (5)(2)4×4键盘输入模块 (5)(3)数码管显示模块 (6)(4)8×8 LED点阵显示模块 (6)(5)LCD液晶屏显示模块 (6)(6)中心模块 (6)三、仿真波形及波形分析 (6)1.分频器模块 (6)2.4×4键盘输入模块 (7)3.数码管显示模块 (7)4.8×8 LED点阵显示模块 (8)5.LCD液晶屏显示模块 (8)6.中心模块 (8)四、源程序 (9)1.分频器模块 (9)2.4×4键盘输入模块 (9)3.数码管显示模块 (11)4.8×8 LED点阵显示模块 (12)5.LCD液晶屏显示模块 (19)6.中心模块 (23)五、功能说明及资源利用情况 (26)六、故障及问题分析 (27)七、总结和结论 (27)一、任务要求本电路可供甲乙二人进行猜拳游戏。
通过不同的按键控制,选择多种出拳方式,显示猜拳的结果,实现猜拳游戏,防止了作弊的可能。
1.基本要求1、甲乙双方各用4×4 键盘中的三个按键模拟“石头”、“剪刀”、“布”,一个按键为“确认”。
4×4 键盘第一行为甲,第二行为乙;2、裁判用4×4 键盘第三行的一个按键模拟“开”,一个按键为“准备”,一个按键为“复位”;3、裁判宣布“准备”后,甲乙双方分别选择出拳方式并确认;4、裁判“开”以后,用点阵的左右三列同时显示甲乙双方的猜拳选择(如下图所示),并用两个数码管显示甲乙的猜拳比分;图1甲“布”,乙“剪刀”;甲“剪刀”,乙“石头”5、猜拳游戏为五局三胜制。
北京邮电大学数字电路实验报告
北京邮电大学数字电路与逻辑设计实验实验报告实验名称:QuartusII原理图输入法设计与实现学院:北京邮电大学班级:姓名:学号:一.实验名称和实验任务要求实验名称:QuartusII原理图输入法设计与实现实验目的:⑴熟悉用QuartusII原理图输入法进行电路设计和仿真。
⑵掌握QuartusII图形模块单元的生成与调用;⑶熟悉实验板的使用。
实验任务要求:⑴掌握QuartusII的基础上,利用QuartusII用逻辑门设计实现一个半加器,生成新的半加器图像模块。
⑵用实验内容(1)中生成的半加器模块以及逻辑门实现一个全加器,仿真验证其功能,并能下载到实验板上进行测试,要求用拨码开关设定输入信号,发光二级管显示输出信号。
⑶用3线—8线译码器(74L138)和逻辑门实现要求的函数:CBAF+C+=,仿真验证其+BCBAAABC功能,,并能下载到实验板上进行测试,要求用拨码开关设定输入信号,发光二级管显示输出信号。
二.设计思路和过程半加器的设计实现过程:⑴半加器的应有两个输入值,两个输出值。
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)的图形模块单元。
北京邮电大学数字电路与逻辑设计实验报告.
北京邮电大学数字电路与逻辑设计实验报告学院:xxxx学院姓名:xxx班级:xxxxxxxxxx128学号:xxxxxxxxxx实验一Quartus II原理图输入法设计与实现一、实验目的(1)熟悉用Quartus II原理图输入法进行电路设计和仿真;(2)掌握Quartus II图形模块单元的生成与调用;(3)熟悉实验板的使用。
二、实验所用仪器及元器件(1)计算机;(2)直流稳压电源;(3)数字系统与逻辑设计实验开发板。
三、实验任务要求(1)用逻辑门设计实现一个半加器,仿真验证其功能,并生成新的半加器图形模块单元。
(2)用实验(1)中生成的半加器模块和逻辑门设计实现一个全加器,仿真验证其功能,并下载到实验板测试,要求用拨码开关设定输入信号,发光二极管显示输出信号。
(3)用3线-8线译码器(74LS138)和逻辑门设计实现函数,仿真验证其功能,并下载到实验板测试。
要求用拨码开关设定输入信号,发光二极管显示输出信号。
四、实验原理图及仿真波形图228328(1)半加器【实验原理图】【仿真波形图】【仿真波形图分析】由波形图可以看出,真值表如下:a b so co 000001101010111由此可得,,满足半加器的设计要求。
(2)全加器428【实验原理图】【仿真波形图】【仿真波形图分析】由波形图可以看出真值表如下:ain bin cin sum cout 00000001100101001101100101115281100111111用分别表示信号ain 、bin 、cin 、sum 和cout ,则可得逻辑表达式为满足全加器的设计要求。
(3)3线-8线译码器实现函数【实验原理图】【仿真波形图】【仿真波形图分析】由波形图可得真值表如下:A B C F00010011010101101000101011001111则逻辑表达式为。
实验二用VHDL设计与实现组合逻辑电路一、实验目的(1)熟悉用VHDL语言设计组合逻辑电路的方法;(2)熟悉用Quartus II文本输入法进行电路设计;(3)熟悉不同的编码及其之间的转换。
电子沙漏设计实验报告范文
电子沙漏设计实验报告范文目的本次实验的目的是设计一款电子沙漏,使用数字电路和显示器来实现沙漏倒计时功能。
原理电子沙漏的原理是利用计时器和显示器实现倒计时功能。
在电子沙漏的设计中,使用了集成电路555作为计时器,并通过数码管显示剩余的时间。
实验材料- 集成电路555- 七段数码管- 电阻、电容- 蜂鸣器- 实验面包板- 连接线实验步骤1. 将集成电路555与其他元件连接在实验面包板上,按照电路图连接好各个引脚。
2. 将倒计时的时间设定在合适的范围内,并将时间以二进制的形式转换为十进制数码管可以显示的数字。
3. 连接数码管和倒计时电路,使数码管能够显示剩余的时间。
4. 调试电子沙漏,确认计时器和数码管是否能正常工作。
5. 如果需要,可以再加入蜂鸣器,用于提醒时间结束。
实验结果经过实验,设计的电子沙漏能够正常工作。
在设定的倒计时时间内,数码管能够正确显示剩余时间,并且触发蜂鸣器发出提醒。
实验总结通过本次实验,我深入了解了集成电路555的工作原理和使用方法。
同时,我也学会了如何将数字电路和显示器结合,实现有趣的倒计时功能。
电子沙漏的设计不仅提升了我的电路设计能力,还进一步加深了我对数字电路和显示器的理解。
延伸拓展在实验的基础上,还可以对电子沙漏进行进一步的扩展和改进。
例如,可以添加多个计时器,实现多个时间段的倒计时功能。
或者可以使用微控制器来控制倒计时,实现更复杂的功能。
此外,还可以增加触摸屏或蓝牙模块,实现远程控制和更便捷的操作。
参考文献[1] Sedra, A. S., & Smith, K. C. (2004). Microelectronic circuits (5th ed.). Oxford University Press.[2] 555 Timer IC Datasheet, Texas Instruments.。
北邮数电综合实验报告
北邮数电综合实验报告综合实验报告:基于北邮数电实验的电子门禁系统设计与实现摘要:本次实验通过使用北邮数电实验室提供的器件和设备,设计并实现了一个简易的电子门禁系统。
该系统能够通过输入正确的密码或使用合法的身份卡,实现对门禁的控制和管理。
本文将详细介绍系统设计的原理、实验过程和结果,并对实验进行了总结和评价。
一、引言电子门禁系统是当前社会中广泛应用的一种重要安全保障设施。
它通过使用密码、身份卡等识别方式,对人员出入进行控制和管理。
本实验旨在通过北邮数电实验的学习和实践,学习和掌握电子门禁系统的设计与实现。
二、实验器材与原理实验器材:1.键盘2.蜂鸣器3.LCD显示屏4.数码安全码锁5.单片机开发板6.电源模块7.连线模块实验原理:该电子门禁系统的基本原理如下:1.用户通过键盘输入密码或刷合法的身份卡;2.单片机接收到输入的密码或读取身份卡信息;3.单片机对输入的密码或身份卡信息进行核对;5. 若核对失败,则控制蜂鸣器发出门禁错误提示音,并在LCD显示屏上显示“Access Denied”等拒绝信息。
三、实验过程与结果1.按照实验器材的接线要求,将键盘、蜂鸣器和LCD显示屏与开发板连接好;2.根据实验原理,编写相应的控制程序,并将程序烧录到单片机中;3.打开电源模块,开启电子门禁系统;4.用户通过键盘输入密码或刷合法的身份卡;5.系统接收到用户输入并进行核对;7. 核对失败时,蜂鸣器发出门禁错误提示音,LCD显示屏上显示“Access Denied”等拒绝信息。
实验结果显示,该电子门禁系统能够根据用户输入的密码或身份卡信息,进行核对并作出相应的操作。
当核对成功时,系统会解锁门禁并显示欢迎信息;当核对失败时,系统会发出错误提示并拒绝门禁。
四、实验总结本次实验通过设计和实现基于北邮数电实验的电子门禁系统,使得我们更加深入地了解了电子门禁系统的原理和应用。
通过实验,我们学会了利用键盘、蜂鸣器和LCD显示屏等器材,通过单片机控制,实现了一个简易的电子门禁系统。
北邮数字电路与逻辑设计实验上-综合实验报告
数字电路与逻辑设计实验综合实验报告目录一、实验题目和任务要求 (3)(一)Quartus II原理图输入法设计与实现 (3)(二)用VHDL设计与实现组合逻辑电路 (3)(三)用VHDL设计与实现时序逻辑电路 (3)(四)用VHDL设计与实现相关电路 (4)二、实验内容、原理图、VHDL代码和仿真波形分析 (4)(一)Quartus II原理图输入法设计与实现 (4)1. 半加器 (4)2. 全加器 (5)3. 3-8线译码器 (6)(二)用VHDL设计与实现组合逻辑电路 (6)1. 数码管译码器 (6)2. 8421码转余3码 (6)3. 奇校验器 (7)(三)用VHDL设计与实现时序逻辑电路 (8)1. 8421十进制计数器 (8)2. 分频器 (8)3. 组合电路实现数码管0到9循环显示 (8)(四)用VHDL设计与实现相关电路 (13)1. 数码管动态扫描控制器 (13)2. 点阵行扫描控制器 (16)三、故障及问题分析 (20)四、总结和结论 (21)五、参考文献 (21)一、实验题目和任务要求(一)QuartusII原理图输入法设计与实现实验题目Quartus II原理图输入法设计与实现任务要求1)用逻辑门设计一个半加器,仿真验证其功能,并生成新的半加器图形模块单元。
2)用生成的半加器模块和逻辑门设计与实现一个全加器,仿真验证其功能,并下载到实验板测试,要求用拨码开关设定输入信号,发光二级管显示输出信号。
3)用3-8线译码器和逻辑门设计和实现函数F CBA CBA CBA CBA=+++,仿真验证其功能。
(二)用VHDL设计与实现组合逻辑电路实验题目1)数码管译码器2)8421码转余3码3)奇校验器任务要求1)用VHDL语言设计实现一个共阴极7段数码管译码器,仿真验证其功能,并下载到实验板测试。
要求用拨码开关设定输入信号,发光二极管显示输出信号。
2)用VHDL语言设计实现一个8421码转换为余3码的代码转换器,仿真验证其功能,并下载到实验板测试。
北邮数电综合实验电子沙漏的设计与实现
SIGNAL A : INTEGER RANGE 0 TO 9;
SIGNAL S : INTEGER RANGE 0 TO 7;--控制点阵显示
SIGNAL S1 : INTEGER RANGE 0 TO 16;--沙漏状态
SIGNAL S2 : INTEGER RANGE 0 TO 100;--开机画面
end if;
if CNT6 = 5 and CNT9 = 9 then
CNT6 <= 0; CNT9 <= 0;
end if;
IF SW_1 = '0' and FLAG = '1' THEN
S1<=S1+1;
if S1=16 then
S1<=16;
end if;
END IF;
IF FLAG = '0' THEN
2、用拨码开关 SW1 模拟重力感应器。当 SW1 为低电平时,沙粒从 VD0~VD15 向 VD0'~VD15'移动;当 SW1 为高电平时,沙粒从 VD0'~VD15'向 VD0~VD15 移动。
3、 按键 BTN0 作为计时启动停止按键,启动后沙粒即可按照 SW1 设定的方向移动, 以 SW1 为低电平时为例,LED 移动的顺序与对应关系如图 3 的1~16所示(若 SW1 为高电平,则点阵显示移动顺序为16~1)。每颗沙粒的移动时间为 1 秒,当移动 到图 3 的16时,若 SW1 仍为低电平,则保持沙粒不动,但计时继续,直到 SW1 的 电平发生变化或者 BTN0 计时停止。
对于led灯来说要让它按照设计好的图案显示需要一行行对点阵进行扫描在列中来控制哪一行来显示经过一定时间后到下一行显示而控制红灯亮还是绿灯则通过不同的接口控制在扫描频率够快的时候由于人眼暂留效应会误以为是一直在显示以此达到所需要的效果
北邮数电实验报告
北邮数电实验报告1. 实验目的本实验的目的是通过实际操作和实验验证,加深对数字电路的理解和掌握。
具体实验内容包括: 1. 实现各种基本逻辑电路(与门、或门、非门、异或门等)的电路设计。
2. 学习使用开关和LED灯进行数字信号输入和输出。
3. 掌握数字电路实验中常用的仪器设备的使用方法。
2. 实验器材和环境本实验所使用的器材和环境如下: - FPGA实验箱 - 数字逻辑集成电路(与门、或门、非门、异或门等) - 电源 - 接线板 - 数字电路实验仪器3. 实验步骤3.1 实验准备首先,我们需要将实验所需的器材连接好,包括将数字逻辑集成电路插入到FPGA实验箱上的插槽中,并将电源正确连接。
3.2 电路设计与布线根据实验要求,我们需要设计不同的基本逻辑电路。
比如,要设计一个与门电路,可以通过将两个输入端分别与两个开关连接,将输出端连接到一个LED灯上。
其他的逻辑电路同样可以设计类似的方式。
在设计和布线的过程中,需要注意保持电路的连通性,并避免出现短路等问题。
3.3 输入和输出信号设置根据实验要求,我们需要设置输入和输出信号。
可以通过控制开关的开合状态来设置输入信号,然后观察LED灯的亮灭情况来判断输出信号的状态是否符合预期。
3.4 实验数据记录和分析在实验过程中,我们需要记录每个逻辑电路的输入和输出信号状态,并进行分析。
可以通过绘制真值表或者逻辑门表来记录并分析数据。
4. 实验结果与分析根据实验步骤中记录的数据,我们可以得出实验结果,并进行进一步的分析。
比如,可以通过比对设计的逻辑电路输出和预期输出的差异,来判断实验是否成功完成。
5. 总结与反思通过本次实验,我深入了解和掌握了数字电路的基本原理和实验方法。
通过设计和实验验证,加深了对基本逻辑电路的理解,并熟悉了数字电路实验所使用的仪器设备。
在实验过程中,我遇到了一些问题,比如电路连接错误导致的信号不稳定等,但通过仔细调试和排查,最终解决了这些问题。
数电实验报告北邮(3篇)
第1篇一、实验名称数字电路基础实验二、实验目的1. 熟悉数字电路的基本原理和组成。
2. 掌握常用数字电路元件(如逻辑门、触发器、计数器等)的功能和使用方法。
3. 培养动手能力和实验技能。
三、实验原理数字电路是由逻辑门、触发器、计数器等基本元件组成的。
逻辑门是数字电路的基本单元,用于实现基本的逻辑运算。
触发器是数字电路中的记忆单元,用于存储信息。
计数器是数字电路中的时序单元,用于实现计数功能。
四、实验仪器与设备1. 数字电路实验箱2. 万用表3. 导线4. 74LS00集成电路5. 74LS20集成电路五、实验内容1. 组合逻辑电路分析(1)搭建一个4输入与非门电路,输入端分别为A、B、C、D,输出端为Y。
(2)搭建一个2输入与非门电路,输入端分别为A、B,输出端为Y。
(3)搭建一个4输入与非门电路,输入端分别为A、B、C、D,输出端为Y。
要求输出Y为A、B、C、D的异或运算结果。
2. 触发器应用(1)搭建一个D触发器电路,输入端为D,输出端为Q。
(2)搭建一个JK触发器电路,输入端为J、K,输出端为Q。
(3)搭建一个计数器电路,使用D触发器实现一个4位二进制计数器。
3. 计数器应用(1)搭建一个十进制计数器电路,使用74LS90集成电路实现。
(2)搭建一个任意进制计数器电路,使用74LS90集成电路实现。
(3)搭建一个分频器电路,使用计数器实现。
六、实验步骤1. 根据实验原理和电路图,在实验箱上搭建实验电路。
2. 使用万用表测试电路的各个节点电压,确保电路连接正确。
3. 根据实验要求,输入不同的信号,观察输出结果。
4. 记录实验数据,分析实验结果。
七、实验结果与分析1. 组合逻辑电路分析(1)4输入与非门电路:当A、B、C、D都为0时,Y为1;否则,Y为0。
(2)2输入与非门电路:当A、B都为0时,Y为1;否则,Y为0。
(3)4输入与非门电路:当A、B、C、D中有奇数个1时,Y为1;否则,Y为0。
数字电路实验报告_北邮
一、实验目的本次实验旨在通过实践操作,加深对数字电路基本原理和设计方法的理解,掌握数字电路实验的基本步骤和实验方法。
通过本次实验,培养学生的动手能力、实验技能和团队合作精神。
二、实验内容1. 实验一:TTL输入与非门74LS00逻辑功能分析(1)实验原理TTL输入与非门74LS00是一种常用的数字逻辑门,具有高抗干扰性和低功耗的特点。
本实验通过对74LS00的逻辑功能进行分析,了解其工作原理和性能指标。
(2)实验步骤① 使用实验箱和实验器材搭建74LS00与非门的实验电路。
② 通过实验箱提供的逻辑开关和指示灯,验证74LS00与非门的逻辑功能。
③ 分析实验结果,总结74LS00与非门的工作原理。
2. 实验二:数字钟设计(1)实验原理数字钟是一种典型的数字电路应用,由组合逻辑电路和时序电路组成。
本实验通过设计一个24小时数字钟,使学生掌握数字电路的基本设计方法。
(2)实验步骤① 分析数字钟的构成,包括分频器电路、时间计数器电路、振荡器电路和数字时钟的计数显示电路。
② 设计分频器电路,实现1Hz的输出信号。
③ 设计时间计数器电路,实现时、分、秒的计数。
④ 设计振荡器电路,产生稳定的时钟信号。
⑤ 设计数字时钟的计数显示电路,实现时、分、秒的显示。
⑥ 组装实验电路,测试数字钟的功能。
3. 实验三:全加器设计(1)实验原理全加器是一种数字电路,用于实现二进制数的加法运算。
本实验通过设计全加器,使学生掌握全加器的工作原理和设计方法。
(2)实验步骤① 分析全加器的逻辑功能,确定输入和输出关系。
② 使用实验箱和实验器材搭建全加器的实验电路。
③ 通过实验箱提供的逻辑开关和指示灯,验证全加器的逻辑功能。
④ 分析实验结果,总结全加器的工作原理。
三、实验结果与分析1. 实验一:TTL输入与非门74LS00逻辑功能分析实验结果表明,74LS00与非门的逻辑功能符合预期,具有良好的抗干扰性和低功耗特点。
2. 实验二:数字钟设计实验结果表明,设计的数字钟能够实现24小时计时,时、分、秒的显示准确,满足实验要求。
北邮数电综合实验报告
北邮数电综合实验报告北邮数电综合实验报告一、实验目的与背景数电综合实验是北邮电子信息工程专业的重要实践环节,旨在通过实际操作,巩固和应用学生在数字电路、模拟电路、通信原理等相关课程中所学到的理论知识。
本实验报告将对数电综合实验的内容、过程和结果进行详细描述和分析。
二、实验内容本次数电综合实验的主要内容为设计一个数字电子钟。
该电子钟具备显示时间、日期、闹钟功能,并能实现闹钟的设置、开关控制等基本操作。
实验中,我们需要使用数字集成电路、显示模块、按键开关、时钟模块等元件进行电路设计和搭建。
三、实验过程1. 硬件设计与连接根据实验要求,我们首先进行电路设计。
根据数字电子钟的功能需求,我们需要选取适当的集成电路和模块。
通过分析电路原理图,我们将各个模块进行连接,保证信号的正确传递和控制。
2. 软件编程与调试在硬件连接完成后,我们需要进行软件编程。
通过使用C语言或者Verilog等编程语言,我们可以实现数字电子钟的各项功能。
在编程过程中,我们需要考虑到时钟频率、显示模块的控制、按键开关的响应等因素。
3. 实验调试与测试完成软件编程后,我们需要进行实验调试和测试。
通过连接电源,观察电子钟的各项功能是否正常工作。
如果发现问题,我们需要进行调试,找出问题所在,并进行修复。
四、实验结果与分析经过实验调试和测试,我们成功实现了数字电子钟的设计和搭建。
该电子钟能够准确显示时间和日期,并能根据用户的设置进行闹钟的开关和响铃。
通过实验过程,我们对数字电路的原理和应用有了更深入的理解。
五、实验心得与收获通过参与数电综合实验,我深刻体会到了理论与实践的结合的重要性。
在实验中,我们需要将课堂上所学的知识应用到实际中,通过实际操作来巩固和加深对知识的理解。
同时,实验中也锻炼了我们的动手能力和解决问题的能力。
在实验过程中,我们还学会了团队合作的重要性。
在设计和搭建电路的过程中,我们需要相互配合,互相帮助,共同解决问题。
通过与同学们的合作,我们不仅解决了实验中遇到的各种问题,还加深了与同学们的交流和友谊。
电子沙漏的设计与实现
电子沙漏的设计与实现设计思路:电子沙漏的主要功能是根据用户设定的时间间隔来计时并显示相应的时间。
基本的设计思路是利用微控制器和显示屏来实现这一功能。
我们可以选择常用的Arduino开发板作为主控制器,并通过连接LED显示屏来展示时间。
构建材料:1. Arduino主控制器:我们可以选择一款适合的Arduino型号,如Arduino Uno,并确保具备足够的GPIO口和计时器,以便与其他硬件进行连接。
2.LED显示屏:我们需要选择一款足够大的LED点阵显示屏,以便能够清晰地显示时间。
3.按钮:我们需要使用两个按钮,一个用于增加时间间隔,另一个用于减少时间间隔。
4. 连接线及面包板:用于连接Arduino与其他硬件,并且方便进行电路调试。
实现方法:1. 连接电路:首先,我们需要将Arduino与LED显示屏、按钮等硬件连接起来。
根据硬件的引脚定义,将各个组件连接到Arduino的相应引脚上。
确保连接无误后,将电路连线焊接或使用面包板进行连接。
2. 编写代码:根据电子沙漏的需求,我们需要编写相应的Arduino 代码。
代码的主要功能包括:(a)设置时间:通过按钮控制,用户可以增加或减少时间间隔。
(b)显示时间:将计时结果在LED点阵显示屏上显示出来。
(c)计时功能:利用计时器功能,精确计时并在达到设定时间时产生相应的提示或操作。
3. 调试测试:在完成代码编写后,我们需要进行调试测试,确保电路和代码的正常工作。
首先,上传代码到Arduino开发板,并接上电源。
然后,通过按下按钮来调整时间间隔并观察LED显示屏的结果。
如果一切正常,即可进入下一步。
4.完善功能:在保证基本功能正常工作的情况下,我们可以进一步完善电子沙漏的功能。
例如,可以增加倒计时功能或闹钟功能,让用户能够在设定的时间到达时得到提醒。
总结:通过以上的设计和实现,我们可以得到一个简单而实用的电子沙漏。
通过按钮调整时间间隔,并且可以通过LED显示屏清晰地展示时间。
北邮数电综合实验报告
北邮数电综合实验报告1. 引言本报告旨在总结和分析北邮数电综合实验的结果和过程。
该实验旨在培养学生的综合能力,包括数字电路设计、程序编写和硬件调试。
本文将按照实验步骤的顺序,逐步介绍实验的内容和结果。
2. 实验准备在开始实验之前,我们需要准备以下材料和设备:•Altera Quartus II软件:用于数字电路设计和仿真。
•FPGA(现场可编程门阵列)开发板:用于实际测试和验证设计。
•USB数据线:用于将设计传输到FPGA开发板上。
•数字电路实验板:用于连接外部电路和FPGA开发板。
3. 实验步骤3.1 实验一:基本逻辑门电路设计在本实验中,我们首先设计了基本逻辑门电路,包括与门、或门和非门。
通过使用Quartus II软件,我们可以绘制原理图并进行逻辑仿真。
在验证正确性后,将设计下载到FPGA开发板上进行物理验证。
3.2 实验二:二进制加法器设计在第二个实验中,我们设计了一个4位二进制加法器。
通过使用逻辑门和触发器,我们可以将两个4位二进制数相加,并输出结果。
使用Quartus II软件进行综合、布线和仿真,然后将设计下载到FPGA开发板上进行物理验证。
3.3 实验三:7段数码管驱动器设计在本实验中,我们设计了一个7段数码管驱动器。
通过使用逻辑门和触发器,我们可以将4位二进制数转换为相应的7段显示。
使用Quartus II软件进行综合、布线和仿真,然后将设计下载到FPGA开发板上进行物理验证。
3.4 实验四:有限状态机设计在最后一个实验中,我们设计了一个简单的有限状态机。
该状态机可以通过输入信号的变化而改变其状态,并根据当前状态和输入信号来产生输出。
使用Quartus II软件进行综合、布线和仿真,然后将设计下载到FPGA开发板上进行物理验证。
4. 结果与讨论通过对实验的各个步骤进行详细的设计和验证,我们成功完成了北邮数电综合实验。
通过使用Quartus II软件进行仿真和物理验证,我们验证了设计的正确性和可行性。
电子沙漏
电子沙漏沙漏是一种古老的计时工具,也是一种玩具。
电子沙漏用电子电路控制的发光二极管表示沙粒,模拟沙漏的运动过程。
电子沙漏会像真正的沙漏一样,上部的沙粒(点亮的发光二极管)一粒一粒往下掉,下部的沙粒一粒一粒堆起来。
漏完以后,将电子沙漏倒过来,又会重新开始一粒一粒往下漏。
一、电路整体分析1 电路结构。
电子沙漏是一个级联运用移位寄存器的典型实例,电路图如图1所示,它包括五个组成部分:(1)集成电路IC1、IC2组成的15位移位寄存器;(2)开关S1、S2,二极管VD16、VD17、VD18,电阻R16等组成的输入数据控制电路;(3)晶体管VT1~VT15和VT1'~VT15 组成的输出状态控制电路;(4)发光二极管VD1~VD15和VD1~VD15 组成的显示电路;(5)反相器D1、D2等组成的时钟振荡器。
图2为其原理方框图。
在结构上,两组各15个发光二极管分别排列成为两个三角形,如图3所示。
其中:VD1~VD15位于上部,排列成倒三角形;VD1'~VD15'位于下部,排列成正三角形。
两个三角形的顶尖相对,组成沙漏形状。
当上部有一个发光二极管熄灭时,相应地下部就有一个发光二极管点亮,模拟了沙漏的运动。
2 简要工作原理。
集成移位寄存器IC1、IC2级联组成15位移位寄存器,构成了电子沙漏的主体控制电路。
每一位寄存单元都分别通过NPN晶体管VT和PNP晶体管VT'形成Q和/Q两个互为反相的输出状态,分别控制VD和VD'两组发光二极管。
15位移位寄存器的串行数据输入端D的状态受位置控制电路的控制。
当电子沙漏正向放置时(发光二极管VD1~VD15在上部且全亮),串行数据输入端D=0,并在时钟脉冲CP的作用下逐步右移,使VD1~VD15一个接一个地熄灭,同时VD1'~VD15'一个接一个地点亮,直至VD1~VD15全灭,VD1'~VD15'全亮。
毕业设计毕业论文电子沙漏系统的设计
本科生毕业论文设计电子沙漏系统的设计独创性声明本人郑重声明:所呈交的毕业论文(设计)是本人在指导老师指导下取得的研究成果。
除了文中特别加以注释和致谢的地方外,论文(设计)中不包含其他人已经发表或撰写的研究成果。
与本研究成果相关的所有人所做出的任何贡献均已在论文(设计)中作了明确的说明并表示了谢意。
签名:年月日授权声明本人完全了解许昌学院有关保留、使用本科生毕业论文(设计)的规定,即:有权保留并向国家有关部门或机构送交毕业论文(设计)的复印件和磁盘,允许毕业论文(设计)被查阅和借阅。
本人授权许昌学院可以将毕业论文(设计)的全部或部分内容编入有关数据库进行检索,可以采用影印、缩印或扫描等复制手段保存、汇编论文(设计)。
本人论文(设计)中有原创性数据需要保密的部分为(如没有,请填写“无”):签名:年月日指导教师签名:年月日本文分析了儿童玩具传统沙漏与电子模拟沙漏的不同之处, 并考虑到产品制作成本和人们生活习惯及爱好不同的特点,利用CD4069芯片的工作特点结合三极管的开路特性,研究并设计了一种简单易行,造价低廉的电子玩具。
采用模拟电子技术与数字电子技术相结合的产品结构来进行信号模拟,并向CD4015芯片控制器提供时钟脉冲信号。
同时系统采用双开关调节的方式进行实物内部组网,易于安装,可以有效地提高数据传输的可调可控性能。
关键词:CD4069芯片;时钟脉冲;CD4015芯片ABSTRACTThis paper analyzes the differences of chiliren's toys- traditional hourglass and electronic simulation, and takes the cost of products and the different characteristic of people's living habits and tastes into account. Using the working characteristics of CD4069 chip and combining the open-circuit characteristics of triode to research and design a simple and low cost electronic toys.Adopting the product structure of the combination of analog eletronics and digital electronics to offer the periodic signal for CD4015 chip controller. At the same time, the system uses the way of dual suitches adjustment to take the real internal network, easy to install and it can promote the adjustability of data transmission.Keywords: CD4069 chip; Clock frequency; CD4015 chip1 绪论 (1)1.1 电子沙漏的出现 (1)1.2 电子玩具系统的发展现状 (1)2 电子沙漏系统的构架 (2)2.1 电子沙漏的核心原理与应用 (2)2.1.1 CD4015主要功能介绍 (2)2.1.2 CD4015芯片的管脚说明 (3)2.2 时钟控制技术 (3)2.2.1 时钟控制技术简介 (3)2.3 亮点换位电路模块 (4)2.3.1 亮点换位电路 (4)2.3.2 重力控制模块 (5)2.4 模块组合 (6)2.4.1 模块组合工作过程 (6)3 电路整体分析 (8)3.1 电路整体分析 (8)3.1.1主路工作过程 (8)3.1.2 15位移位寄存器工作过程 (9)3.1.3 输入数据控制电路 (9)3.1.4 输出状态控制电路 (9)3.1.5 位置控制电路 (10)3.1.6 速度控制电路 (10)4 仿真过程 (11)4.1 软件及其功能简介 (11)4.2 点亮电路仿真过程 (14)4.3 时钟电路仿真过程 (15)4.4 控制电路仿真过程 (16)4.4 系统总电路模拟过程 (17)5 结论 (19)6 后续研究 (19)参考文献 (20)致谢 (21)1 绪论1.1 电子沙漏的出现随着人们物质生活水平的不断提高,特别是人们对个人精神生活以及生活品味的重视,防盗报警系统已经慢慢深入到人们生活当中。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
北京邮电大学数电综合实验报告实验名称:电子沙漏的设计与实现学院:信息与通信工程学院姓名:班级:学号:班内序号:一、实验设计的基本要求沙漏是一种古老的计时工具,也是一种玩具。
电子沙漏用发光二极管表示沙粒,模拟沙漏的运动过程。
电子沙漏会像真正的沙漏一样,上部的沙粒(点亮的发光二极管)一粒一粒往下掉,下部的沙粒一粒一粒堆起来。
1、采用 8*8 双色点阵显示电子沙漏的开机界面,如图 2 所示。
其中红色 LED 代表沙漏的上半部分沙粒 VD0~VD15,绿色 LED 代表沙漏的下半部分 VD0'~VD15'。
2、用拨码开关 SW1 模拟重力感应器。
当 SW1 为低电平时,沙粒从VD0~VD15 向 VD0'~VD15'移动;当 SW1 为高电平时,沙粒从VD0'~VD15'向 VD0~VD15 移动。
3、按键 BTN0 作为计时启动停止按键,启动后沙粒即可按照 SW1 设定的方向移动, 以 SW1 为低电平时为例,LED 移动的顺序与对应关系如图 3 的1~16所示(若 SW1 为高电平,则点阵显示移动顺序为16~1)。
每颗沙粒的移动时间为 1 秒,当移动到图 3 的16时,若 SW1 仍为低电平,则保持沙粒不动,但计时继续,直到 SW1 的电平发生变化或者 BTN0 计时停止。
4、设计实现一个 60 秒计时器,当按键 BTN0 启动时开始工作,用于在沙粒移动过程中进行计时校准,并用数码管 DISP0~DISP1 显示计时结果。
提高要求:1、可以调节控制电子沙漏的流动速度。
2、用多种方式呈现电子沙漏界面。
3、自行设定沙粒的移动路径,显示每颗沙粒的移动过程。
4、外接重力感应器,实现真实的电子沙漏功能。
5、自拟其它功能。
二、系统设计1、设计思路实验比较复杂,故采用分模块设计的思想,将模块分为了分频模块、控制模块、数码管显示模块、8*8点阵显示模块。
由于本实验需要用BTN0按键来控制时间和沙漏的开始运行以及时间的暂停功能,故需要检测输入,此时就要用到防抖模块,防止在按下按键时有多个上升沿产生导致开关并不能完美的发挥作用。
控制模块是用来实现具体的操作的,通过对按下BTN0按键的次数统计,将其分为奇数与偶数两种情况,在奇数时使功能正常运行,在统计为偶数时使时间暂停,以此来实现对此系统的控制。
由于数电实验电路板自带着时钟频率,但此频率并不能满足系统的要求,故需要分频将时钟频率变为所需要的频率,用来作为60秒计时器的校准和正常运行。
本实验最重要的部分就是8*8点阵显示模块和数码管显示模块。
对于led灯来说,要让它按照设计好的图案显示,需要一行行对8*8点阵进行扫描,在列中来控制哪一行来显示,经过一定时间后到下一行显示,而控制红灯亮还是绿灯则通过不同的接口控制,在扫描频率够快的时候,由于人眼暂留效应,会误以为是一直在显示,以此达到所需要的效果。
数码管的显示模块与此类似,通过选位信号选择需要亮的数码管,然后在扫描频率较高时则看到稳定显示的数字。
2、系统框图(1)总体框图(2)程序流程图控制模块8*8点阵显示计时器BTN0输入分频模块控制模块8*8点阵显示模块开始初始化开机界面否BTN0是否按下是计时开始并且沙漏开始运动SW1是否翻转是否三、源程序library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity div4k isport(clk_in : in std_logic;clk_out : out std_logic); end;architecture a of div4k issignal cnt : integer range 0 to 1999; signal clk_tmp : std_logic; beginprocess(clk_in)beginif (clk_in'event and clk_in='1') thenif cnt=1999 thencnt<=0; clk_tmp<= not clk_tmp;elsecnt<=cnt+1;end if;end if;end process;clk_out<=clk_tmp;end;沙漏向相反方向流动 是否 计时是否到59s 是否暂停显示暂停是 重新开始计时LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY scan_led_2 ISPORT ( CLK : IN STD_LOGIC;BTN0: IN STD_LOGIC;SW0 : IN STD_LOGIC;SW1 : IN STD_LOGIC;SG : OUT STD_LOGIC_VECTOR(6 DOWNTO 0);BT : OUT STD_LOGIC_VECTOR(5 DOWNTO 0);R:OUT STD_LOGIC_VECTOR(7 DOWNTO 0);Cr:OUT STD_LOGIC_VECTOR(0 TO 6);Cg:OUT STD_LOGIC_VECTOR(0 TO 6));END;ARCHITECTURE arc OF scan_led_2 IScomponent div4kport(clk_in: in std_logic;clk_out: out std_logic);end component;SIGNAL clk_tmp1 : std_logic;SIGNAL BT1:STD_LOGIC_VECTOR(5 DOWNTO 0);SIGNAL CNT6 : INTEGER RANGE 0 TO 6;SIGNAL CNT9 : INTEGER RANGE 0 TO 9;SIGNAL A : INTEGER RANGE 0 TO 9;SIGNAL S : INTEGER RANGE 0 TO 7;--控制点阵显示SIGNAL S1 : INTEGER RANGE 0 TO 16;--沙漏状态SIGNAL S2 : INTEGER RANGE 0 TO 100;--开机画面SIGNAL SW_0 : STD_LOGIC;--SW_0 为1时运行为0时保持原状态 SIGNAL SW_1 : STD_LOGIC;--SW_1 为0时向下运动为1时向上运动 SIGNAL FLAG : STD_LOGIC;-- FLAG='1'时运行 FLAG=‘0’停止SIGNAL COUNT0 : INTEGER RANGE 0 TO 15000;SIGNAL COUNT1 : INTEGER RANGE 0 TO 15001;SIGNAL clk_tmp : STD_LOGIC;BEGINu1:div4k port map(clk_in=>CLK,clk_out=>clk_tmp);P0:process(BTN0)--按键防抖BEGINIF CLK'EVENT AND CLK = '1' THENIF (BTN0 AND CLK)='0'THENCOUNT0<=0;END IF;IF (BTN0 AND CLK)='1'THENCOUNT0<=COUNT0+1;IF COUNT0<=5 THENCOUNT0<=0;FLAG<=NOT FLAG;END IF;END IF;END IF;END PROCESS P0;P1:process(clk_tmp)BEGINIF clk_tmp'EVENT AND clk_tmp = '1' THEN case BT1 iswhen"111110"=> BT1<="111101";when"111101"=> BT1<="111110";when others => BT1<="111110";end case;END IF;if BT1 ="111101" thenBT<="111101";A<=CNT6;end if;if BT1 ="111110" thenBT<="111110";A<=CNT9;end if;END PROCESS P1;P3:process(clk_tmp)BEGINSW_0<=SW0;SW_1<=SW1;IF clk_tmp'EVENT AND clk_tmp = '1' THENCOUNT1 <= COUNT1+1;IF COUNT1 = 12499 THENCOUNT1 <= 0; CNT9 <= CNT9 + 1;if CNT9 = 9 thenCNT9 <= 0; CNT6<= CNT6 + 1;end if;if CNT6 = 5 and CNT9 = 9 thenCNT6 <= 0; CNT9 <= 0;end if;IF SW_1 = '0' and FLAG = '1' THENS1<=S1+1;if S1=16 thenS1<=16;end if;END IF;IF FLAG = '0' THENS1<=S1;CNT6<= CNT6;CNT9 <= CNT9;END IF;IF SW_1 = '1' and FLAG = '1'THENS1<=S1-1;if S1=0 thenS1<=0;end if;END IF;END IF;END IF;END PROCESS P3;P4:process(A)BEGINCASE A IS --实现数码管的显示功能WHEN 0 => SG <= "1111110"; WHEN 1 => SG <= "0110000"; WHEN 2 => SG <= "1101101"; WHEN 3 => SG <= "1111001";WHEN 4 => SG <= "0110011"; WHEN 5 => SG <= "1011011"; WHEN 6 => SG <= "1011111"; WHEN 7 => SG <= "1110000"; WHEN 8 => SG <= "1111111"; WHEN 9 => SG <= "1111011";WHEN OTHERS => NULL ;END CASE ;END PROCESS P4;P5:process(S)BEGINIF clk_tmp'EVENT AND clk_tmp = '1' THENS<=S+1;IF S=7 THENS<=0;END IF;END IF;IF S1=0 thenCASE S ISWHEN 0 => R<="01111111" ;Cg<="0000000";Cr<="1111111";WHEN 1 => R<="10111111" ;Cg<="0000000";Cr<="0111110";WHEN 2 => R<="11011111" ;Cg<="0000000";Cr<="0011100";WHEN 3 => R<="11101111" ;Cg<="0000000";Cr<="0001000";WHEN 4 => R<="11110111" ;Cg<="0001000";Cr<="0000000";WHEN 5 => R<="11111011" ;Cg<="0011100";Cr<="0000000";WHEN 6 => R<="11111101" ;Cg<="0111110";Cr<="0000000";WHEN 7 => R<="11111110" ;Cg<="1111111";Cr<="0000000";WHEN OTHERS => NULL ;END CASE ;END IF;IF S1=1 thenCASE S ISWHEN 0 => R<="01111111" ;Cg<="0001000";Cr<="1110111";WHEN 1 => R<="10111111" ;Cg<="0000000";Cr<="0111110";WHEN 3 => R<="11101111" ;Cg<="0000000";Cr<="0001000"; WHEN 4 => R<="11110111" ;Cg<="0001000";Cr<="0000000"; WHEN 5 => R<="11111011" ;Cg<="0011100";Cr<="0000000"; WHEN 6 => R<="11111101" ;Cg<="0111110";Cr<="0000000"; WHEN 7 => R<="11111110" ;Cg<="1110111";Cr<="0001000";WHEN OTHERS => NULL ;END CASE ;END IF;IF S1=2 thenCASE S ISWHEN 0 => R<="01111111" ;Cg<="0011000";Cr<="1100111"; WHEN 1 => R<="10111111" ;Cg<="0000000";Cr<="0111110"; WHEN 2 => R<="11011111" ;Cg<="0000000";Cr<="0011100"; WHEN 3 => R<="11101111" ;Cg<="0000000";Cr<="0001000"; WHEN 4 => R<="11110111" ;Cg<="0001000";Cr<="0000000"; WHEN 5 => R<="11111011" ;Cg<="0011100";Cr<="0000000"; WHEN 6 => R<="11111101" ;Cg<="0111110";Cr<="0000000"; WHEN 7 => R<="11111110" ;Cg<="1100111";Cr<="0011000";WHEN OTHERS => NULL ;END CASE ;END IF;IF S1=3 thenCASE S ISWHEN 0 => R<="01111111" ;Cg<="0011100";Cr<="1100011"; WHEN 1 => R<="10111111" ;Cg<="0000000";Cr<="0111110"; WHEN 2 => R<="11011111" ;Cg<="0000000";Cr<="0011100"; WHEN 3 => R<="11101111" ;Cg<="0000000";Cr<="0001000"; WHEN 4 => R<="11110111" ;Cg<="0001000";Cr<="0000000"; WHEN 5 => R<="11111011" ;Cg<="0011100";Cr<="0000000"; WHEN 6 => R<="11111101" ;Cg<="0111110";Cr<="0000000"; WHEN 7 => R<="11111110" ;Cg<="1100011";Cr<="0011100";WHEN OTHERS => NULL ;END CASE ;END IF;IF S1=4 thenCASE S ISWHEN 1 => R<="10111111" ;Cg<="0000000";Cr<="0111110"; WHEN 2 => R<="11011111" ;Cg<="0000000";Cr<="0011100"; WHEN 3 => R<="11101111" ;Cg<="0000000";Cr<="0001000"; WHEN 4 => R<="11110111" ;Cg<="0001000";Cr<="0000000"; WHEN 5 => R<="11111011" ;Cg<="0011100";Cr<="0000000"; WHEN 6 => R<="11111101" ;Cg<="0111110";Cr<="0000000"; WHEN 7 => R<="11111110" ;Cg<="1000011";Cr<="0111100";WHEN OTHERS => NULL ;END CASE ;END IF;IF S1=5 thenCASE S ISWHEN 0 => R<="01111111" ;Cg<="0111110";Cr<="1000001"; WHEN 1 => R<="10111111" ;Cg<="0000000";Cr<="0111110"; WHEN 2 => R<="11011111" ;Cg<="0000000";Cr<="0011100"; WHEN 3 => R<="11101111" ;Cg<="0000000";Cr<="0001000"; WHEN 4 => R<="11110111" ;Cg<="0001000";Cr<="0000000"; WHEN 5 => R<="11111011" ;Cg<="0011100";Cr<="0000000"; WHEN 6 => R<="11111101" ;Cg<="0111110";Cr<="0000000"; WHEN 7 => R<="11111110" ;Cg<="1000001";Cr<="0111110";WHEN OTHERS => NULL ;END CASE ;END IF;IF S1=6 thenCASE S ISWHEN 0 => R<="01111111" ;Cg<="1111110";Cr<="0000001"; WHEN 1 => R<="10111111" ;Cg<="0000000";Cr<="0111110"; WHEN 2 => R<="11011111" ;Cg<="0000000";Cr<="0011100"; WHEN 3 => R<="11101111" ;Cg<="0000000";Cr<="0001000"; WHEN 4 => R<="11110111" ;Cg<="0001000";Cr<="0000000"; WHEN 5 => R<="11111011" ;Cg<="0011100";Cr<="0000000"; WHEN 6 => R<="11111101" ;Cg<="0111110";Cr<="0000000"; WHEN 7 => R<="11111110" ;Cg<="0000001";Cr<="1111110";WHEN OTHERS => NULL ;END CASE ;END IF;IF S1=7 thenCASE S ISWHEN 0 => R<="01111111" ;Cg<="1111111";Cr<="0000000"; WHEN 1 => R<="10111111" ;Cg<="0000000";Cr<="0111110"; WHEN 2 => R<="11011111" ;Cg<="0000000";Cr<="0011100"; WHEN 3 => R<="11101111" ;Cg<="0000000";Cr<="0001000"; WHEN 4 => R<="11110111" ;Cg<="0001000";Cr<="0000000"; WHEN 5 => R<="11111011" ;Cg<="0011100";Cr<="0000000"; WHEN 6 => R<="11111101" ;Cg<="0111110";Cr<="0000000"; WHEN 7 => R<="11111110" ;Cg<="0000000";Cr<="1111111";WHEN OTHERS => NULL ;END CASE ;END IF;IF S1=8 thenCASE S ISWHEN 0 => R<="01111111" ;Cg<="1111111";Cr<="0000000"; WHEN 1 => R<="10111111" ;Cg<="0001000";Cr<="0110110"; WHEN 2 => R<="11011111" ;Cg<="0000000";Cr<="0011100"; WHEN 3 => R<="11101111" ;Cg<="0000000";Cr<="0001000"; WHEN 4 => R<="11110111" ;Cg<="0001000";Cr<="0000000"; WHEN 5 => R<="11111011" ;Cg<="0011100";Cr<="0000000"; WHEN 6 => R<="11111101" ;Cg<="0110110";Cr<="0001000"; WHEN 7 => R<="11111110" ;Cg<="0000000";Cr<="1111111";WHEN OTHERS => NULL ;END CASE ;END IF;IF S1=9 thenCASE S ISWHEN 0 => R<="01111111" ;Cg<="1111111";Cr<="0000000"; WHEN 1 => R<="10111111" ;Cg<="0011000";Cr<="0100110"; WHEN 2 => R<="11011111" ;Cg<="0000000";Cr<="0011100"; WHEN 3 => R<="11101111" ;Cg<="0000000";Cr<="0001000"; WHEN 4 => R<="11110111" ;Cg<="0001000";Cr<="0000000"; WHEN 5 => R<="11111011" ;Cg<="0011100";Cr<="0000000"; WHEN 6 => R<="11111101" ;Cg<="0100110";Cr<="0011000"; WHEN 7 => R<="11111110" ;Cg<="0000000";Cr<="1111111";WHEN OTHERS => NULL ;END CASE ;END IF;IF S1=10 thenCASE S ISWHEN 0 => R<="01111111" ;Cg<="1111111";Cr<="0000000"; WHEN 1 => R<="10111111" ;Cg<="0011100";Cr<="0100010"; WHEN 2 => R<="11011111" ;Cg<="0000000";Cr<="0011100"; WHEN 3 => R<="11101111" ;Cg<="0000000";Cr<="0001000"; WHEN 4 => R<="11110111" ;Cg<="0001000";Cr<="0000000"; WHEN 5 => R<="11111011" ;Cg<="0011100";Cr<="0000000"; WHEN 6 => R<="11111101" ;Cg<="0100010";Cr<="0011100"; WHEN 7 => R<="11111110" ;Cg<="0000000";Cr<="1111111";WHEN OTHERS => NULL ;END CASE ;END IF;IF S1=11 thenCASE S ISWHEN 0 => R<="01111111" ;Cg<="1111111";Cr<="0000000"; WHEN 1 => R<="10111111" ;Cg<="0111100";Cr<="0000010"; WHEN 2 => R<="11011111" ;Cg<="0000000";Cr<="0011100"; WHEN 3 => R<="11101111" ;Cg<="0000000";Cr<="0001000"; WHEN 4 => R<="11110111" ;Cg<="0001000";Cr<="0000000"; WHEN 5 => R<="11111011" ;Cg<="0011100";Cr<="0000000"; WHEN 6 => R<="11111101" ;Cg<="0000010";Cr<="0111100"; WHEN 7 => R<="11111110" ;Cg<="0000000";Cr<="1111111";WHEN OTHERS => NULL ;END CASE ;END IF;IF S1=12 thenCASE S ISWHEN 0 => R<="01111111" ;Cg<="1111111";Cr<="0000000"; WHEN 1 => R<="10111111" ;Cg<="0111110";Cr<="0000000"; WHEN 2 => R<="11011111" ;Cg<="0000000";Cr<="0011100"; WHEN 3 => R<="11101111" ;Cg<="0000000";Cr<="0001000"; WHEN 4 => R<="11110111" ;Cg<="0001000";Cr<="0000000"; WHEN 5 => R<="11111011" ;Cg<="0011100";Cr<="0000000"; WHEN 6 => R<="11111101" ;Cg<="0000000";Cr<="0111110"; WHEN 7 => R<="11111110" ;Cg<="0000000";Cr<="1111111";WHEN OTHERS => NULL ;END CASE ;END IF;IF S1=13 thenCASE S ISWHEN 0 => R<="01111111" ;Cg<="1111111";Cr<="0000000"; WHEN 1 => R<="10111111" ;Cg<="0111110";Cr<="0000000"; WHEN 2 => R<="11011111" ;Cg<="0001000";Cr<="0010100"; WHEN 3 => R<="11101111" ;Cg<="0000000";Cr<="0001000"; WHEN 4 => R<="11110111" ;Cg<="0001000";Cr<="0000000"; WHEN 5 => R<="11111011" ;Cg<="0010100";Cr<="0001000"; WHEN 6 => R<="11111101" ;Cg<="0000000";Cr<="0111110"; WHEN 7 => R<="11111110" ;Cg<="0000000";Cr<="1111111";WHEN OTHERS => NULL ;END CASE ;END IF;IF S1=14 thenCASE S ISWHEN 0 => R<="01111111" ;Cg<="1111111";Cr<="0000000"; WHEN 1 => R<="10111111" ;Cg<="0111110";Cr<="0000000"; WHEN 2 => R<="11011111" ;Cg<="0011000";Cr<="0000100"; WHEN 3 => R<="11101111" ;Cg<="0000000";Cr<="0001000"; WHEN 4 => R<="11110111" ;Cg<="0001000";Cr<="0000000"; WHEN 5 => R<="11111011" ;Cg<="0000100";Cr<="0011000"; WHEN 6 => R<="11111101" ;Cg<="0000000";Cr<="0111110"; WHEN 7 => R<="11111110" ;Cg<="0000000";Cr<="1111111";WHEN OTHERS => NULL ;END CASE ;END IF;IF S1=15 thenCASE S ISWHEN 0 => R<="01111111" ;Cg<="1111111";Cr<="0000000"; WHEN 1 => R<="10111111" ;Cg<="0111110";Cr<="0000000"; WHEN 2 => R<="11011111" ;Cg<="0011100";Cr<="0000000"; WHEN 3 => R<="11101111" ;Cg<="0000000";Cr<="0001000"; WHEN 4 => R<="11110111" ;Cg<="0001000";Cr<="0000000"; WHEN 5 => R<="11111011" ;Cg<="0000000";Cr<="0011100"; WHEN 6 => R<="11111101" ;Cg<="0000000";Cr<="0111110"; WHEN 7 => R<="11111110" ;Cg<="0000000";Cr<="1111111"; WHEN OTHERS => NULL ;END CASE ;END IF;IF S1=16 thenCASE S ISWHEN 0 => R<="01111111" ;Cg<="1111111";Cr<="0000000"; WHEN 1 => R<="10111111" ;Cg<="0111110";Cr<="0000000"; WHEN 2 => R<="11011111" ;Cg<="0011100";Cr<="0000000"; WHEN 3 => R<="11101111" ;Cg<="0001000";Cr<="0000000"; WHEN 4 => R<="11110111" ;Cg<="0000000";Cr<="0001000"; WHEN 5 => R<="11111011" ;Cg<="0000000";Cr<="0011100"; WHEN 6 => R<="11111101" ;Cg<="0000000";Cr<="0111110"; WHEN 7 => R<="11111110" ;Cg<="0000000";Cr<="1111111"; WHEN OTHERS => NULL ;END CASE ;END IF;END PROCESS P5;end arc;四.仿真图五、功能说明1、接通电源后可以初始化沙漏的界面,以及计时器界面显示为零。