数电实验七
- 格式:doc
- 大小:186.00 KB
- 文档页数:4
总结计数器使用特点篇一:计数器及其应用实验七计数器及其应用一、实验目的1、学习用集成触发器构成计数器的方法2、掌握中规模集成计数器的使用及功能测试方法3、运用集成计数器构成1/n分频器二、实验原理计数器是一个用以实现计数功能的时序部件,它不仅可用来及脉冲数,还常用作数子系统的定时、分频和执行数字运算以及其它特定的逻辑功能。
计数器种类很多。
按构成计数器中的各触发器是否使用一个时钟脉冲源来分,有同步计数器和异步计数器。
根据计数制的不同,分为二进制计数器、十进制计数器和任意进制计数器。
根据计数器的增减趋势,又分为加法、减法和可逆计数器。
还有可预制数和可变程序功能计数器等等。
目前,无论是ttl还是cmos集成电路,都有品种较齐全的中规模集成计数器。
使用者只要借助于器件手册提供的功能和工作波形图以及引出端的排列,就能正确运用这些器件。
1、用d触发器构成异步二进制加/减计数器图7―1是用四只d触发器构成的四位二进制异步加法计数器,它的连接特点是将每只d触发器接成t触发器,在由低位触发器的q端和高一位的cp端相连接。
若将图7―1稍加改动,即将低位触发器的q端与高一位的cp端相连接,即构成了一个4位二进制减法计数器。
2、中规模同步集成计数器同步集成计数器基本类型见表7-1。
表7-1同步计数器芯片型号和功能⑴同步4位二进制计数器74ls161的功能见表7-2,74ls163的功能见表7-3,引脚图见图7-2。
ld为置数控制端,clr为置0控制端, d0~d3为并行数据输入端,q0~q3为输出端,co为进位输出端。
⑵4位十进制同步计数器74ls160的功能见表7-4,引脚图见图7-2。
74ls162的功能见表7-5,引脚图见图7-2。
表7-2 74ls161的功能表表7-3 74ls163功能表表表⑶4cc40192(74ls192)是同步十进制可逆计数器,具有双时钟输入,并具有清除和置数等功能,其引脚排列如图7-3所示。
本科数电实验教案一、实验目的1. 理解并掌握数字电路的基本原理和实验技能。
2. 熟悉常用逻辑门电路及其功能。
3. 学会使用逻辑门电路进行简单的数字系统设计。
4. 培养动手能力和团队协作能力。
二、实验原理1. 逻辑门电路:与门、或门、非门、异或门等。
2. 逻辑函数及其表示方法:真值表、逻辑图、卡诺图等。
3. 数字电路的基本组成部分:触发器、计数器、译码器等。
4. 数字系统的设计与验证方法。
三、实验器材与仪器1. 数字电路实验箱。
2. 逻辑门电路模块。
3. 触发器、计数器、译码器等模块。
4. Multisim、Proteus等仿真软件。
四、实验内容与步骤1. 实验一:逻辑门电路的搭建与测试步骤:a. 根据真值表搭建与门、或门、非门、异或门电路。
b. 使用Multisim、Proteus等软件进行仿真,验证电路功能。
2. 实验二:数字电路的基本组成部分——触发器步骤:a. 搭建基本RS触发器、D触发器、JK触发器等。
b. 利用仿真软件验证触发器的工作原理。
c. 分析不同触发器之间的联系与区别。
3. 实验三:计数器的设计与仿真步骤:a. 搭建二进制计数器电路。
b. 利用仿真软件验证计数器的功能。
c. 分析计数器的工作原理,探讨计数器的应用场景。
4. 实验四:译码器的设计与仿真步骤:a. 搭建4-16译码器电路。
b. 利用仿真软件验证译码器的功能。
c. 分析译码器的工作原理,探讨译码器的应用场景。
5. 实验五:数字系统的设计与验证步骤:a. 结合所学知识,设计一个简单的数字系统(如计算器、频率发生器等)。
b. 搭建数字系统电路,利用仿真软件进行验证。
五、实验要求与评价1. 实验报告:要求对每个实验的原理、过程、结果进行详细描述,并对实验中遇到的问题进行分析和解答。
2. 实验操作:要求熟练操作实验设备,正确搭建电路,充分理解实验原理。
3. 实验态度:要求认真观察实验现象,积极参与讨论,主动请教老师和同学。
4. 实验成果:要求实验结果准确,能够对数字电路进行分析与设计。
一、实验目的1. 理解和掌握数字电路的基本原理和设计方法。
2. 培养动手能力和实验技能。
3. 提高分析问题和解决问题的能力。
二、实验原理数字电路是一种以二进制为基础的电路,其基本元件是逻辑门和触发器。
本实验主要涉及以下几种逻辑门:与门、或门、非门、异或门、同或门、与非门、或非门等。
1. 与门(AND Gate):当所有输入端都为高电平时,输出才为高电平。
2. 或门(OR Gate):当至少一个输入端为高电平时,输出为高电平。
3. 非门(NOT Gate):对输入信号取反。
4. 异或门(XOR Gate):当输入端信号不同时,输出为高电平。
5. 同或门(NOR Gate):当输入端信号相同时,输出为高电平。
6. 与非门(NAND Gate):与门和非门的组合。
7. 或非门(NOR Gate):或门和非门的组合。
三、实验器材1. 数字电路实验箱2. 逻辑门芯片3. 电源4. 连接线5. 测试仪器四、实验步骤1. 组成基本逻辑门电路:根据实验原理,搭建与门、或门、非门、异或门、同或门、与非门、或非门等基本逻辑门电路。
2. 测试电路功能:使用测试仪器对搭建的电路进行测试,验证电路是否满足基本逻辑功能。
3. 组成组合逻辑电路:根据实验要求,搭建组合逻辑电路,如全加器、半加器、译码器、编码器等。
4. 测试组合逻辑电路:使用测试仪器对搭建的组合逻辑电路进行测试,验证电路是否满足设计要求。
5. 组成时序逻辑电路:根据实验要求,搭建时序逻辑电路,如触发器、计数器、寄存器等。
6. 测试时序逻辑电路:使用测试仪器对搭建的时序逻辑电路进行测试,验证电路是否满足设计要求。
五、实验结果与分析1. 基本逻辑门电路测试结果:根据测试数据,搭建的与门、或门、非门、异或门、同或门、与非门、或非门等基本逻辑门电路均满足设计要求。
2. 组合逻辑电路测试结果:根据测试数据,搭建的全加器、半加器、译码器、编码器等组合逻辑电路均满足设计要求。
1、实验题目实验七计数、译码、显示综合实验2、实验目的熟悉中规模集成电路计数器的功能及应用熟悉中规模集成电路译码器的功能及应用熟悉LED数码管及显示电路的工作原理学会综合测试的方法3、实验原理对于计数规模小的计数器我们使用集成触发器来设计计数器,但是如果计数器的规模达到十六个以上(如六十进制)时,如果还是用集成触发器来设计的话,电路就比较复杂了。
在这种情况下,我们可以用集成计数器来构成任意进制计数器。
利用集成计数器的清零端和置数端实现归零,从而构成按自然态序进行计数的N进制计数器的方法。
1.用同步清零端或置数端置零或置数构成N进制计数器步骤如下:1)写出SN-1的二进制代码。
2)求归零逻辑,即求同步清零端或置数控制信号的逻辑表达式。
3)画连线图2.用异步清零端或置数端置零或置数构成N进制计数器步骤如下1)写成状态SN的二进制代码。
2)求归零逻辑,即求异步清零端或置数控制端信号的逻辑表达式。
3)画连线图在集成计数器中,清零、置数均采用同步方式的有74LS163;均采用异步方式的有74LS193、74LS197、74LS192;清零采用异步方式、置数采用同步方式的有74LS161、74LS160;有的只具有异步清零功能,如CC4520、74LS190、74LS191;74LS90则具有异步清零和异步置数功能。
4、实验内容用集成计数器74LS160分别组成8421码十进制和六进制计数器,然后连接成一个60进制计数器(6进制为高位、10进制为低位)。
使用译码显示电路显示。
用函数发生器的低频连续脉冲(调节频率为1-2HZ)作为计数器的计数脉冲,通过数码管观察计数、译码、显示电路的功能为正确。
让这个六十进制的数字的两位同时显示在一个四联的七段数码管上5、实验分析内容一:个位的实现:将74LS160 的ENP、 ENT 均置为1,那么输出端Q0、Q1、Q2、Q3就是一个十进制的计数器十位的实现:将74LS160 的ENP、 ENT 与个位的74LS160的RCO相连,那么就会实现“逢十进一”六十进制的进位设置方法:利用十位的74LS160 上面的LOAD 控制端,使得当前数字为60时,马上实现LOAD,从而使之显示为0,则在出现59后,就会出现00;仿真如下:另一种实现方法是利用74LS160 上面的MR 控制端,使得十位的74LS160的输出端从0101->0110 转换的过程后,将MR 端置为低电平,使得十位的74LS160的输出被清零;此时是将十位的74LS160的ENP、ENT 均置为1,其CLK 与个位的74LS160的RCO相连,以实现进位的效果。
一、实验名称1. 实验一QuartusⅡ原理图输入法设计与实现2. 实验二用VHDL设计与实现组合逻辑电路(一)3. 实验三用VHDL设计与实现时序逻辑电路(二)4.实验四用VHDL设计与实现时序逻辑电路(三)(数码管动态扫描控制器)二、实验任务要求1.实验一:○1用逻辑门设计实现一个半加器,仿真验证其功能,并生成新的半加器图形模块单元;○2用上面生成的半加器模块和逻辑门设计实现一个全加器,仿真验证其功能,并下载到实验板测试,要求用拨码开关设定输入信号,发光二极管显示输出信号;○3用3线-8线译码器(74LS138)和逻辑门设计实现函数F=CBA+CBA+CBA+CBA,仿真验证其功能,并下载到实验班测试。
要求用拨码开关设定输入信号,发光二极管显示输出信号;2.实验二:○1用VHDL语言设计实现一个4位二进制奇校验器,输入奇数个…1‟时,输出为…1‟,否则输出为…0‟,仿真验证其功能,并下载到实验板测试。
要求用拨码开关设定输入信号,发光二极管显示输出信号;○2用VHDL语言设计实现一个8421码转换为余3码的代码转换器,仿真验证其功能,并下载到实验板测试。
要求用拨码开关设定输入信号,发光二极管显示输出信号;○3用VHDL语言设计实现一个共阴极7段数码管译码器,仿真验证其功能,并下载到实验班测试。
要求用拨码开关设定输入信号,发光二极管显示输出信号;3.实验三:○1用VHDL语言设计实现一个分频系数为12,分频输出信号占空比为50%的分频器。
要求在Quartus Ⅱ平台上设计程序并仿真验证设计;○2用VHDL语言设计实现一个带异步复位的8421码十进制计数器,仿真验证其功能,并下载到实验板测试。
要求用拨码开关设定输入信号,发光二极管显示输出信号;○3将分频器、8421十进制计数器、数码管译码器3个电路进行连接并下载测试。
4.实验四:○1用VHDL语言设计并实现六个数码管串行扫描电路,要求同时显示0、1、2、3、4、5这6个不同的数字图形到6个数码管上,仿真验证其功能,并下载到实验板测试;(必做)○2用VHDL语言设计并实现六个数码管循环左滚动,时钟点亮6个数码管,坐出右进,状态为:012345→123450→234501→345012→450123→501234→012345;(选做)○3用VHDL语言设计并实现六个数码管向左滚动,用全灭的数码管填充右边,直至全部变灭,然后再一次从右边一个一个地点亮。
实验报告实验七实验七 计数器原理测试及其设计计数器原理测试及其设计2.7.1 实验目的实验目的1.掌握中规模集成计数器74LS160、74LS161、74LS163的逻辑功能及使用方法。
2.掌握同步清零与异步清零的区别及74LS160计数器的级联方法。
计数器的级联方法。
3.学习用中规模集成计数器设计任意进制计数器。
学习用中规模集成计数器设计任意进制计数器。
2.7.2 实验仪器设备与主要器件实验仪器设备与主要器件实验箱一个;双踪示波器一台;稳压电源一台;函数发生器一台。
实验箱一个;双踪示波器一台;稳压电源一台;函数发生器一台。
74LS160,74LS161和74LS163。
2.7.3 实验原理实验原理计数器的功能是记录输入脉冲的个数。
他所能记忆的最大脉冲个数称为该计数器的模。
计数器不仅能统计输入脉冲的个数,还可以用作分频、定时、产生节拍脉冲等。
根据进位方式,可分为同步和异步两类。
根据进制,可分为二进制、十进制和任意进制等。
制和任意进制等。
根据逻辑功能,根据逻辑功能,根据逻辑功能,可分为加法计数器、可分为加法计数器、可分为加法计数器、减法计数器和可逆计数器减法计数器和可逆计数器等。
根据电路集成度,可分为小规模集成计数器和中规模集成计数器。
等。
根据电路集成度,可分为小规模集成计数器和中规模集成计数器。
2.7.4 实验内容实验内容1.分别用74LS161和74LS163设计模13计数器,采用清零法实现,并用数码管显示实验结果。
显示实验结果。
设计思路:74LS161是十六进制计数器,所以我在它计数到13(1101)清零就行了,再利用二进制数与BCD 码对应关系,即利用74LS283的逻辑功能使数码管显示实验结果。
计数时电路状态转换关系:显示实验结果。
计数时电路状态转换关系:0000→00010001→→00100010→→00110011→→01000100→→01010101→→01100110→→0111→10001000→→10011001→→1010→10111011→→11001100→→0000设计思路:74LS163接法与74LS161基本一样,只是163的清零信号是12不是13,如图:2.设计一个用3位数码管指示的六十进制计数器,位数码管指示的六十进制计数器,并用三只开关控制计数器的数并用三只开关控制计数器的数据保持、计数及清零功能。
数电实验报告实验目的:本实验旨在通过实际操作,加深对数电原理的理解,掌握数字电子技术的基本原理和方法,培养学生的动手能力和实际应用能力。
实验仪器和设备:1. 示波器。
2. 信号发生器。
3. 逻辑分析仪。
4. 电源。
5. 万用表。
6. 示教板。
7. 电路元件。
实验原理:数电实验是以数字电子技术为基础,通过实验操作来验证理论知识的正确性。
数字电子技术是一种以数字信号为工作对象,利用电子器件实现逻辑运算、数字存储、数字传输等功能的技术。
本次实验主要涉及数字逻辑电路的设计与实现,包括基本逻辑门的组合、时序逻辑电路、触发器等。
实验内容:1. 实验一,基本逻辑门的实验。
在示教板上搭建与非门、或门、与门、异或门等基本逻辑门电路,通过输入不同的逻辑信号,观察输出的变化情况,并记录实验数据。
2. 实验二,时序逻辑电路的实验。
利用触发器、计数器等元件,设计并搭建一个简单的时序逻辑电路,通过改变输入信号,验证电路的功能和正确性。
3. 实验三,逻辑分析仪的应用。
利用逻辑分析仪对实验中的数字信号进行观测和分析,掌握逻辑分析仪的使用方法,提高实验数据的准确性。
实验步骤:1. 按照实验指导书的要求,准备好实验仪器和设备,检查电路连接是否正确。
2. 依次进行各个实验内容的操作,记录实验数据和观察现象。
3. 对实验结果进行分析和总结,查找可能存在的问题并加以解决。
实验结果与分析:通过本次实验,我们成功搭建了基本逻辑门电路,观察到了不同输入信号对输出的影响,验证了逻辑门的功能和正确性。
在时序逻辑电路实验中,我们设计并搭建了一个简单的计数器电路,通过实验数据的记录和分析,验证了电路的正常工作。
逻辑分析仪的应用也使我们对数字信号的观测和分析有了更深入的了解。
实验总结:本次数电实验不仅加深了我们对数字电子技术的理解,还培养了我们的动手能力和实际应用能力。
在实验过程中,我们遇到了一些问题,但通过认真分析和思考,最终都得到了解决。
这次实验让我们深刻体会到了理论与实践相结合的重要性,也让我们对数字电子技术有了更加深入的认识。
数字电路实验报告实验一、引言数字电路是计算机科学与工程学科的基础,它涵盖了数字信号的产生、传输、处理和存储等方面。
通过数字电路实验,我们可以深入了解数字电路的原理和设计,掌握数字电路的基本知识和实验技巧。
本报告旨在总结和分析我所进行的数字电路实验。
二、实验目的本次实验的目的是通过搭建和测试电路,验证数字电路的基本原理,掌握数字电路实验中常用的实验仪器和操作方法。
具体实验目的如下:1. 组装和测试基础门电路,包括与门、或门、非门等。
2. 理解和实践加法器电路,掌握准确的运算方法和设计技巧。
3. 探究时序电路的工作原理,深入了解时钟信号和触发器的应用。
三、实验装置和材料1. 模块化数字实验仪器套装2. 实验台3. 数字电路芯片(例如与门、或门、非门、加法器、触发器等)4. 连接线、电源、示波器等。
四、实验步骤及结果1. 实验一:组装和测试基础门电路在实验台上搭建与门、或门、非门电路,并连接电源。
通过连接线输入不同的信号,测试输出的结果是否与预期一致。
记录实验步骤和观察结果。
2. 实验二:实践加法器电路将加法器电路搭建在实验台上,并输入两个二进制数字,通过加法器电路计算它们的和。
验证求和结果是否正确。
记录实验步骤和观察结果。
3. 实验三:探究时序电路的工作原理将时序电路搭建在实验台上,并连接时钟信号和触发器。
观察触发器的状态变化,并记录不同时钟信号下的观察结果。
分析观察结果,总结时序电路的工作原理。
五、实验结果与分析1. 实验一的结果与分析:通过测试与门、或门、非门电路的输入和输出,我们可以观察到输出是否与预期一致。
若输出与预期一致,则说明基础门电路连接正确,电路工作正常;若输出与预期不一致,则需要检查电路连接是否错误,或者芯片损坏。
通过实验一,我们可以掌握基础门电路的搭建和测试方法。
2. 实验二的结果与分析:通过实践加法器电路,我们可以输入两个二进制数字,并观察加法器电路的运算结果。
如果加法器电路能正确计算出输入数字的和,则说明加法器电路工作正常。
实验7 4*4 键盘扫描控制器1.实验任务说明:设计并实现4*4 键盘扫描控制电路,判断哪个按键被按下,在数码管上显示键值,并通过蜂鸣器发出按键音。
要求:●键值采用16 进制编码,即16 个按键分别对应显示16 进制数0~F,按键对应关系如下:最上面一行从左至右依次为0~3,第二行从左至右依次为4~7,第三行从左至右依次为8~B,最下面一行从左至右依次为C~F,其中b、d 显示为小写,其他字母大写;●按键按下时显示当前键值并保持,直到下一按键被按下时更新显示;●只有按键被按下时蜂鸣器发出按键音,放开后蜂鸣器不发声。
●选做:每个按键对应不同的按键音。
●2.实验设计思路将本实验分为4个部分,分别是顶层,分频器(扫描时钟的分频器和为蜂鸣器提供频率的分频器),数码管译码电路,扫描信号发生电路。
顶层利用状态机实现,状态转移为s0->s1->s2->s3->s0,分别对应扫描到col[0->3->0]。
同时把row 信号转化为一个“时钟信号”clock_change,当有按键按下就输出1,没有则输出0。
并以这个时钟设计一个时序逻辑,当clock_change的上升沿到来才更新tempSegin(传递给数码管的输入信号)和choose(传递给蜂鸣器分频器的输入信号),输出sound信号时,将蜂鸣器输出的信号与clock_change信号相与,以达到按下一次键盘蜂鸣器发声,数码管显示的目的。
3.源程序:1)分频器扫描时钟的分频器:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;entity divide is--divide the frequency to 1/ngeneric( n:natural:=200);port( clk: in std_logic;clk_out: out std_logic);end divide;architecture div_arch of divide is--temporary signalsignal temp: std_logic;beginprocess( clk )--count variable count from 0 to n/2-1--means every n/2 period reverse the clk variable count: integer range 0 to n/2-1;beginif (clk'event and clk='1') thenif( count = n/2-1) thentemp <= not temp;count := 0;elsecount := count + 1;end if;end if;end process;clk_out <= temp;end div_arch;为蜂鸣器提供频率的分频器LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;entity divide_sound is--the origin clk is 50MHz--divide the frequency to 1/ngeneric( n0:natural:=4;n1:natural:=8;n2:natural:=12;n3:natural:=16;n4:natural:=20;n5:natural:=24;n6:natural:=28;n7:natural:=42;n8:natural:=46;n9:natural:=50;n10:natural:=54;n11:natural:=58;n12:natural:=62;n13:natural:=66;n14:natural:=70;n15:natural:=74);port( clk: in std_logic;choose: in integer range 0 to 15;sound_out: out std_logic);end divide_sound;architecture div_arch of divide_sound is --temporary signalsignal temp: std_logic;beginprocess( clk )--count variable count from 0 to n/2-1--means every n/2 period reverse the clk variable count: integer range 0 to 100;variable n:integer range 0 to 200;--count'max is over the n(max)/2 - 1begincase choose iswhen 0 =>n := n0;when 1 =>n := n1;when 2 =>n := n2;when 3 =>n := n3;when 4 =>n := n4;when 5 =>n := n5;when 6 =>n := n6;when 7 =>n := n7;when 8 =>n := n8;when 9 =>n := n9;when 10 =>n := n10;when 11 =>n := n11;when 12 =>n := n12;when 13 =>n := n13;when 14 =>n := n14;when 15 =>n := n15;when others => n:= n0;end case;if(clk'event and clk='1') thenif( count = n/2 - 1) thentemp <= not temp;count := 0;elsecount := count + 1;end if;end if;end process;sound_out <= temp;end div_arch;2)扫描信号发生电路LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;entity scan_seq is--produce the column scan signalport( clk,reset: in std_logic;col: out std_logic_vector(3 downto 0));end scan_seq;architecture arch of scan_seq isbeginprocess(clk)variable count: integer range 0 to 3;--M=4 counter,every count output the porper impulse beginif( reset ='1')thencount := 0;elsif( clk'event and clk='1' )thenif( count = 3)thencount := 0;elsecount := count +1;end if;end if;case count iswhen 0 => col<="1110";when 1 => col<="1101";when 2 => col<="1011";when 3 => col<="0111";end case;end process;end arch;3)数码管译码电路LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY seg7_1H IS --seg7 decoding PORT(a: IN STD_LOGIC_VECTOR(3 DOWNTO 0); --inputb: OUT STD_LOGIC_VECTOR(6 DOWNTO 0); --outputcat: OUT STD_LOGIC_VECTOR(7 DOWNTO 0) --selcect);END seg7_1H;ARCHITECTURE aa OF seg7_1H ISsignal temp: std_logic_vector(3 downto 0);BEGINprocess(a)beginCASE a IS --b6-0 -> abcdefg WHEN "0000" => b <= "1111110"; --0WHEN "0001" => b <= "0110000"; --1WHEN "0010" => b <= "1101101"; --2WHEN "0011" => b <= "1111001"; --3WHEN "0100" => b <= "0110011"; --4WHEN "0101" => b <= "1011011"; --5WHEN "0110" => b <= "1011111"; --6WHEN "0111" => b <= "1110000"; --7WHEN "1000" => b <= "1111111"; --8WHEN "1001" => b <= "1111011"; --9WHEN "1010" => b <= "1110111"; --AWHEN "1011" => b <= "0011111"; --bWHEN "1100" => b <= "1001110"; --CWHEN "1101" => b <= "0111101"; --dWHEN "1110" => b <= "1001111"; --EWHEN "1111" => b <= "1000111"; --FWHEN others => b <= "0000000"; --others END CASE;end process;cat <= "11111110";END aa;4)顶层LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;entity scanKeyboard is--scan the keyboard and display, sound at the same time port(clk,reset: in std_logic;row: in std_logic_vector(3 downto 0);col: out std_logic_vector(3 downto 0);sound: out std_logic;b: out std_logic_vector(6 downto 0);cat: out std_logic_vector(7 downto 0);seeclk: out std_logic);end scanKeyboard;architecture arch of scanKeyboard iscomponent divide_sound is--the origin clk is 50MHz--divide the frequency to 1/ngeneric( n0:natural:=4;n1:natural:=8;n2:natural:=12;n3:natural:=16;n4:natural:=20;n5:natural:=24;n6:natural:=28;n7:natural:=42;n8:natural:=46;n9:natural:=50;n10:natural:=54;n11:natural:=58;n12:natural:=62;n13:natural:=66;n14:natural:=70;n15:natural:=74);port( clk: in std_logic;choose: in integer range 0 to 15;sound_out: out std_logic);end component;component scan_seq is--produce the column scan signalport( clk,reset: in std_logic;col: out std_logic_vector(3 downto 0));end component;component seg7_1H IS --seg7 decoding PORT(a: IN STD_LOGIC_VECTOR(3 DOWNTO 0); --inputb: OUT STD_LOGIC_VECTOR(6 DOWNTO 0); --outputcat: OUT STD_LOGIC_VECTOR(7 DOWNTO 0) --selcect);END component;component divide is--divide the frequency to 1/ngeneric( n:natural:=200);port( clk: in std_logic;clk_out: out std_logic);end component;--clk_scan is the scan signal for column--tempSound is the output of the sound divider--tempSegin is the input of the seg7 translate part--clock_change is disgned to record the row's impulse appear--choose is the select of the keyboardsignal clk_scan: std_logic;signal tempSound:std_logic;signal tempSegin:std_logic_vector(3 downto 0);signal clock_change:std_logic;signal choose: integer range 0 to 15;type state is (s0,s1,s2,s3);signal presentstate, nextstate : state;beginu0:divide_sound port map(clk => clk,choose=>choose,sound_out=>tempSound);u1:divide port map(clk =>clk, clk_out=>clk_scan);u2:scan_seq port map(clk=>clk_scan,reset=>reset,col=>col);u3:seg7_1H port map(a=>tempSegin,b=>b,cat=>cat); --discrible the register for clk_scanp1_reg:process(clk_scan,reset)beginif(reset ='1')thenpresentstate<= s0;elsif( clk_scan'event and clk_scan='1' )thenpresentstate<= nextstate;end if;end process;--discrible the state for clk_scanp2_stateChange:process(presentstate)begincase presentstate iswhen s0 => nextstate<= s1;when s1 => nextstate<= s2;when s2 => nextstate<= s3;when s3 => nextstate<= s0;end case;end process;--discrible the outputp3_out:process(presentstate,row,clock_change)begin--behave synchronize with the clock_changeif( clock_change'event and clock_change = '1')then case presentstate is-- column[0]when s0 => case row iswhen "1110"=>choose <= 12;tempSegin <= "1100";when "1101"=>choose <= 8;tempSegin <= "1000";when "1011"=>choose <= 4;tempSegin <= "0100";when "0111"=>choose <= 0;tempSegin <= "0000";when others=>choose <= 0;tempSegin <= tempSegin;end case;-- column[1]when s1 => case row iswhen "1110"=>choose <= 13;tempSegin <= "1101";when "1101"=>choose <= 9;tempSegin <= "1001";when "1011"=>choose <= 5;tempSegin <= "0101";when "0111"=>choose <= 1;tempSegin <= "0001";when others =>choose <= 0;tempSegin <= tempSegin;end case;-- column[2]when s2 => case row iswhen "1110"=>choose <= 14;tempSegin <= "1110";when "1101"=>choose <= 10;tempSegin <= "1010";when "1011"=>choose <= 6;tempSegin <= "0110";when "0111"=>choose <= 2;tempSegin <= "0010";when others=>choose <= 0;tempSegin <= tempSegin;end case;-- column[3]when s3 => case row iswhen "1110"=>choose <= 15;tempSegin <= "1111";when "1101"=>choose <= 11;tempSegin <= "1011";when "1011"=>choose <= 7;tempSegin <= "0111";when "0111"=>choose <= 3;tempSegin <= "0011";when others=>choose <= 0;tempSegin <= tempSegin;end case;end case;end if;end process;--discrible clkchangep3_clkchange:process(row)beginif( row = "1111")thenclock_change <='0';elseclock_change<='1';end if;end process;--output the sound signalsound <= tempSound and clock_change;--to see the clock_change in waveformseeclk <= clock_change;end arch;4.仿真波形及分析1)分频器1(扫描时钟的分频器)图1-1分频器整体图1-2 分频器计数到99翻转(高翻低)图1-3 分频器计数到99翻转(低翻高)实际应采用分频比为,50k,现仿真时为方便仿真取为200分频,由图1-1可以看到整体分频的情况,由图1-2可以看到分频器在计数到99时由高电平翻为低电平,由图1-3可以看到分频器在计数到99时由低电平翻为高电平。
苏州科技学院实验报告
课程名称:数字电子技术
实验项目名称:时序逻辑电路的应用学生姓名:
专业班级:
学号:
实验日期:
实验七设计一个交通灯控制电路
一设计目的
(1)熟悉集成电路的引脚安排
(2)掌握各芯片的逻辑功能及使用方法
(3)了解面包板结构及其接线方法
(4)了解数字交通灯控制电路的组成及工作原理
(5)学会用仿真软件对设计的原理图进行仿真
(6)熟悉数字交通灯控制电路的设计与制作
二设计思路
(1)设计秒脉冲发生器
(2)设计交通灯定时电路
(3)设计交通灯控制电路
(4)设计交通灯译码电路
(5)设计交通灯显示时间电路
三设计电路图真值表
交通灯控制电路逻辑真值表
四实验心得体会
这次实验,我不仅初步学会了仿真软件的使用方法,同时也更加的了解了数字交通灯控制电路的组成及工作原理,并且知道了如何设计与制作数字交通灯控制电路。
当然在实验中也遇到了一些问题,比如连线没连好,导致控制电路无法运行。
经过努力,设计的交通灯控制电路正确的运行。
此次实验进一步锻炼了我的动手能力,同时也加强了我思考问题的能力。
实验七触发器
一、实验目的
⑴ 学习触发器逻辑功能的测试方法
⑵ 进一步熟悉RS触发器、集成D触发器和JK触发器的逻辑功能及其触发方式二、实验预习
⑴ 复习各种触发器的逻辑功能
⑵ 复习不同触发器的相应触发方式
三、实验器材
⑴ 直流稳压电源、数字逻辑实验箱
⑵ 74LS00、74LS74、74LS76
四、实验内容和步骤
1.基本RS触发器
基本RS触发器用与非门74LS00构成,按图7-1接好线。
在输入端加上不同的信号,通过发光二极管观察电路输出端的状态。
把结果填入自制的表中。
图7-1 基本RS触发器图7-2 D触发器的预置和清零功能
1.真值表
2.仿真图
2.D 触发器 用带预置和清除的双D 型触发器74LS74来测试上升沿触发集成D 型触发器的逻辑功能。
先按图7-2接线,在时钟脉冲的不同电平状态,改变预置端PRE 和清除端CLR 的信号,通过发光二极管观察触发器的输出状态。
把结果填入自制的表中。
然后,按图7-3接线,测试D 触发器的逻辑功能。
在D 触发器的逻辑功能测试中,先将数据输入端D 分别置入“0”或“1”,再用清零端CLR 和预置端PRE 分别将触发器的输出端清除为“0”或置位为“1”,最后再用单脉冲按钮向触发器的时钟输入端CLK 发出脉冲的上升边沿和下降边沿,同时观察电路输出端Q 的输出状态,把结果填入表7-1中。
注意:清零和置位之后,清除端CLK 和预置端PRE 必须置成“1”状态。
图7-3 D 触发器逻辑功能测试 7-4 JK 触发器清除和预置功能的测试
仿真图
3.JK触发器
用带预置和清除的双JK触发器74LS76来测试下降沿触发集成JK触发器的逻辑功能。
先按图7-4接线,改变预置端PRE和清除端CLR的信号,通过发光二极管观察触发器Q输出端的输出状态。
把结果填入自制的表中。
然后,按图7-5接线,测试JK触发器的逻辑功能。
图7-5 JK触发器逻辑功能测试
在JK触发器的逻辑功能测试中,先将数据输入端J、K分别置入00、01、10或11,再用清除端CLR和预置端PRE分别将触发器的输出端清除为“0”或置位为“1”,最后再用单脉冲按钮向触发器的时钟输入端CLK发出脉冲的上升边沿和
下降边沿,同时观察电路输出端Q的输出状态,把结果填入表7-2中。
注意:清零和置位之后,清除端CLK和预置端PRE必须置成“1”状态。
五、思考题
⑴ RS触发器“不定”状态的含义是什么?
⑵ 指出图7-7的电路是什么功能,并画出时序图。
图7-7 思考题电路
答:(1)当RS端均有效时,触发器状态不确定
在此条件下,两个与非门的输出端Q和Q非全为1,在两个输入信号都同时撤去(回到1)后,由于两个与非门的延迟时间无法确定,触发器的状态不能确定是1还是0,因此称这种情况为不定状态,这种情况应当避免。
从另外一个角度来说,正因为R端和S端完成置0、置1都是低电平有效,所以二者不能同时为0。
(2)仿真图如下所示:
可见此触发器为一个3/2分频器。