LED点灯实验报告.pdf
LED 点灯实验报告 华中科技大学 电信提高班 1101 一实验目的:设计多种方案点亮 DE2 开发板上的 LED 灯,熟悉使用 DE2 开发板。二方案设计:方案一:设计一个计数器,通过计数器输出十进制数值的奇偶性来控制 LED 灯的亮与暗 Step1:设计一个计数规律为 4-5-6-7-8-9-4-5-6-7-8-9-4.的计数器 1.设计分频电路 该电路的作用是把一个频率为 50MHz的电源分频为 1Hz的电源。该设计电路我在 quartus上,采用 verilog HDL语言实现。源代码如下截图:说明:分频器的源代码截图 然后将这段代码生成一个元件,如下图,其中有一个 50MHz的输入端口,有一个 1Hz的输出端口。说明:生成的分频器元件 说明:In:输入脉冲频率(50MHZ)Out:输出脉冲频率(1HZ)2.设计计数电路 计数电路通过芯片74191实现,由于在计数器到9时重新由4开始计数,因此在QDQCQBQA输出为 1010 的时候,反馈给 74191 的载入端子,使其重新载入 DCBA=0100,开始计数。在 quartus 上设计的电路如下图,其中 Lab05 元件为七段显示译码器件,用于接入发光二极管,从而比较直观地验证结果。(4-9 计数,译码电路)(电路引脚分配截图)该电路点亮 LED 灯的方法是:十进制计数输出为奇数是,LED 灯亮,输出为偶数时,LED灯灭,电路在 DE2 开发板实现的结果录像在附件中。方案二:模仿交通灯的设计,控制红色和绿色的 LED 灯的亮与灭 该方案是通过一盏红色 LED 灯和绿色 LED 灯来简易地模仿交通灯的设计,其基本原理是:在一定时间内显示红灯,然后开始倒计时,过了一定时间后,就显示一段时间的绿灯,再倒计时,然后重新显示红灯。在这个实验中我简化了交通灯的模型,红灯和绿灯的倒计时间一样,都设定为 8 秒,即计时器显示为 8-7-6-5-4-3-2-1-8-7-6-5-4-3-2-1.于是,应该先做一个模八的倒计时计数器,这个功能我通过芯片 74191 完成。而红灯绿灯的切换显示我通过一个JK 触发器完成,其余的主要是为实现模为 8 服务,在 quartus 上连接的电路如下截图所示:(红绿灯模拟电路连线)实验测试结果应该为每次倒计时 8 到 1 的时候,都只会有一盏灯亮,然后到下一个 8 到 1倒计时的时候,就会换成另一种颜色的 LED 灯亮,而原来亮的 LED 灯会灭掉。在 DE2 开发板上的实现详见附件:方案三:模仿射击小游戏中的子弹发射过程,控制 18 盏红色 LED 灯和 2 盏绿色LED 灯的亮与灭 如今假设从右往左开枪射击,特别地用两盏绿色 LED 灯代表枪头,每次绿色 LED 灯亮就代表开枪射击,用两盏发光的红色 LED 灯代表射出的枪弹,开枪后枪弹从右往左运动,设计中用两盏发光的红色 LED 灯从右往左运动代表。那么通过电路设计,可以模拟出射击小游戏中的枪弹射击过程。设计电路中,使用了一个使 50MHz 分频成 12Hz 的分频器,是通过 verilog 代码编写的分频元件,其 verilog 代码如下截图所示:(50MHz-12Hz 分频器代码截图)然后通过芯片 7490 构成一个 0-9 的计数器,然后把计数器的输出,作为数据选择器的输入,电路中我使用的芯片为 7442 数据选择器芯片,然后把数据选择器的每个输出端口连接到相邻的两个 LED 灯上去,就完成了简化后的“子弹发射”模型。由于数据选择器的输出是高电平,因此在 7442 芯片的输出都加了一个非门把电平置反。实验设计电路如图所示:(“子弹发射”模型设计电路)在 DE2 开发板上的测试成果详见附件中的视频,部分截图如下所示:方案四:设计一个四比特移位器,利用移位器控制四盏 LED 灯的亮与暗 Step1:运用 verilog HDL 设计 4to1 的数据选择器 如今我们需要的数据选择器的要求如下:数据输入端口为:W0,W1,W2,W3,选择输入端口为 S0,S1;输出为一位的 F。当 S0=0,S1=0 时,F 为 W0;当 S0=1,S1=0 时,F 为 W1;当 S0=0,S1=1 时,F 为 W2;当 S0=1,S1=1 时,F 为 W3;于是,得到的 verilogHDL 语句如下截图(图一):图一 通过这段程序所建模出来的 4to1 选择器元件如图二:图二 Step2:设计一个移位器 通过分析得到如下输出表格:S1 S0 F3 F2 F1 F0 通过端口 0 0 X3 X2 X1 X0 W0 0 1 X2 X1 X0 X-1 W1 1 0 X1 X0 X-1 X-2 W2 1 1 X0 X-1 X-2 X-3 W3 因此,用四个 4-to-1 数据选择器,分别作为 F3,F2,F1,F0 的输出,容易看出,输出 F3的选择器 W0 应该连接 X3,W1 端口应该连接 X2,W2 端口应该连接 X1,W3 端口应该连接 X0。以此类推,就能弄清楚每个端口应该连接哪一个输入端子。通过连接,得到如下的电路图,如图三:图三 Step3:测试 运用 DE2 的 LEDR 灯,高电平发光,低电平不发光的特性,用作测试工具 测试的时候,是根据如下图分配引脚的:(图四)图四 以下表格为数据测试表格,其输入和输出的真值关系如下表:X3 X2 X1 X0 X-1 X-2 X-3 S1 S0 F3 F2 F1 F0 1 0 0 1 1 1 0 0 1 0 0 1 1 1 1 1 0 0 0 0 1 1 0 0 0 0 1 1 1 0 0 1 1 0 0 1 1 1 0 1 1 0 1 0 1 0 1 0 0 1 0 1 1 0 1 1 0 1 1 0 1 0 1 1 0 然后根据上述表格的输入,在 DE2 板上得到输出结果,如下图所示,其中 F3,F2,F1,F0分别代表前四个 LED 灯的亮暗情况,1 为灯亮,0 为灯灭:(上表的第一种情况,三、四灯亮)(上表的第二种情况,灯全灭)(上表的第三种情况,灯全灭)(上表的第四种情况,二、四灯亮)(上表的第五种情况,二、三灯亮)方案五:模仿五进制计数器,一盏灯为个位计数指示灯,另一盏灯为进位指示灯 输入为一个 500MHz 的时间脉冲,通过分频器使之输出 1Hz 的时间脉冲,使用这个 1HZ 的时间脉冲点亮一盏 LED 灯,然后通过芯片 7490,使用 5 进制计数器,在最高位 QD 端子输出脉冲,和时间脉冲进行一次与运算,就可以得到一个和时间脉冲高电平时间相同的高电平,把它作为第二盏 LED 灯的点亮脉冲。通过时间脉冲点亮一盏 LED 灯,用频率为时间脉冲频率的五分之一的脉冲点亮另一盏 LED 灯。设计的逻辑电路图如下:(逻辑电路图)(两盏 LED 灯的波形图)该方案实现的结果已经用视频进行展示,详见附件。方案六:模仿霓虹灯的设计,使两盏 LED 灯交替闪亮 输入为一个 500MHz 的时间脉冲,通过分频器使之输出 1Hz 的时间脉冲,使用这个 1HZ 的时间脉冲点亮一盏 LED 灯,然后通过一个非门,对时间脉冲进行处理,输出在点亮一盏 LED灯,这样就可以使两盏 LED 灯交替点亮,一盏在时间脉冲高电平点亮,另一盏在时间脉冲的低电平点亮。设计的逻辑电路图如下:(逻辑电路图)(引脚分配截图)方案七:模仿学生寝室亮灯的设计,通过开关来控制 LED 灯的亮与灭 学生寝室亮灯,主要有两个开关,一个开关在寝室内部,用于供学生使用,另一个开关由楼管阿姨控制,该开关对所有寝室的灯统一控制。若用 0 表示灯灭和开关断开,用 1 表示灯亮和开关闭合,由于学生寝室的开关相互之间是互相独立的,因此每个学生寝室的开关情况与楼管总开关的关系是一样的,则真值表如下图所示:楼管总开关 学生寝室开关 灯 0 0 0 0 1 0 1 0 0 1 1 1 现在我假设有四间学生寝室,于是就有四盏灯需要点亮,由以上真值表可以画出电路图:(寝室点灯电路设计图)(引脚分配图)在 DE2 开发板上实现的仿真如下图所示,其中,从右数起第五个开关代表楼管开关,其余四个分别为四个寝室的开关。测试结果如下图所示:方案八:通过输入的二进制的数值的奇偶特性控制 LED 灯的亮与暗 这里我设计的电路是一个三位二进制数值的奇偶校验电路,当输入的二进制数值 a0a1a2 是奇数的时候(即有奇数个 1),LED 灯就会发光,当输入的二进制数值 a0a1a2 是偶数的时候(即有偶数个 1),LED 灯就不发光。输入与输出的真值表如下所示:a0 a1 a2 output 0 0 0 0 0 0 1 1 0 1 0 1 0 1 1 0 1 0 0 1 1 0 1 0 1 1 0 0 1 1 1 1 于是,通过卡诺图化简法,可以得出 output 和 a0a1a2 的逻辑表达式。于是使用了异或门设计了如下奇偶校验电路,通过输出的高低电平,控制 LED 灯的亮与暗:(奇偶校验电路设计图)通过 DE2 开发板,测试的结果如下图所示:方案九:直接从 DE2 开发板中使用高电平点亮 LED 灯 这种方案是利用了 DE2 开发板多功能仿真的特点,直接在设计电路中给输出接上一个高电平,然后输出接上一个红色 LED 灯,从而使灯点亮。该方案比较简单,但是充分体现了 quartus软件的仿真模拟功能以及 DE2 开发板对电路设计强大的仿真,模拟以及实现的功能。(高电平点亮LED灯电路设计图)在 DE2 开发板上的测试结果如下截图显示:方案十:利用开关控制 LED 灯的亮与暗 通过设计输入输出电路,然后输入接到 DE2 开发板的开关引脚,输出接到一盏红色 LED 灯上,就可以实现通过开关控制 LED 灯的亮与暗。设计电路如下图:(开关控制 LED 灯亮暗实现电路以及引脚分配截图)在 DE2 开发板上的测试结果如下截图所示:之所以在这里列出方案八方案九这两种最简单的控制 LED 灯亮暗的方法,是因为我之前的七个方案都是基于这两种方案拓展出去,添加别的设计从而点亮 LED 灯的。可以说方案八和方案九是我所有点灯方案的基础和根本,因此,我在这里把它们罗列出来。三实验总结 1.通过这次的完成 LED 灯点亮设计,使我对 DE2 开发板的开发与使用更加熟悉了。通过软件可以轻易模拟出电路,芯片功能等等,通过 DE2 开发板则弥补了软件所欠缺的硬件实现部分,通过 DE2 开发板的可编程逻辑(FPGA),可以轻松使用 DE2 板上所携带的所有电路元件,轻易节省了实际中的连线操作所需要花费的大量时间。2.对于一个实际问题,我们应该首先将其抽象出一个电路模型,然后从模型出发,解决问题。比如我上面的交通灯亮灯问题,射击过程,寝室楼栋亮灯管理等的模拟,都是通过对实际问题的抽象,建模,然后才提出解决方案,设计实现电路。3.这次实验,我觉得最大的体会就是对于电路各个模块的设计与封装。将电路的各模块分开设计,分别调试,大大加大了电路完成的效率。比如说,在好几个点灯方案中我都用到了把 50MHz分频成 1Hz的元件,那就是元件的封装,通过编写一次 verilog代码,就可以重复使用该代码所创造出来的元件,十分方便。各个电路模块分而自治,若在团队合作中,可以增加团队的机动性和合作性。