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

合集下载

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

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

数字电路综合实验报告简易智能密码锁一、实验课题及任务要求设计并实现一个数字密码锁,密码锁有四位数字密码和一个确认开锁按键,密码输入正确,密码锁打开,密码输入错误进行警示。

基本要求: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行为低电平,再读入列值,如果其中有哪一位为低电平,那么肯定对应的那一列有按键按下。

北京邮电大学 数字电路综合实验报告 洗衣机控制器

北京邮电大学 数字电路综合实验报告 洗衣机控制器

数字电路综合实验预习报告洗衣机控制器信息与通信工程学院xxxxx班xx号xxx洗衣机控制器一、实验目的1. 熟练掌握VHDL 语言和QuartusII 软件的使用;2. 理解状态机的工作原理和设计方法;3. 掌握利用EDA 工具进行自顶向下的电子系统设计方法;二、设计任务要求:制作一个简易全自动洗衣机控制器::1. 洗衣机的工作步骤为洗衣、漂洗和脱水三个过程,工作时间分别为:洗衣20 秒,漂洗25 秒,脱水15 秒;2. 用一个按键实现洗衣程序的手动选择:A、单洗涤;B、单漂洗;C、单脱水;D、漂洗和脱水;E、洗涤、漂洗和脱水全过程;3. 用显示器件显示洗衣机的工作状态(洗衣、漂洗和脱水),并倒计时显示每个状态的工作时间,全部过程结束后,应提示使用者;4. 用一个按键实现暂停洗衣和继续洗衣的控制,暂停后继续洗衣应回到暂停之前保留三、设计思路1)总体思路:洗衣机分为主要分为四个部分,预置部分,输入部分,控制部分,输出部分。

输入部分:负责输入洗衣机的模式选择信号,开始信号,暂停信号,时钟信号。

预置部分:通过一个按键的改变来控制洗衣模式的选择,在开始信号为一的上升沿,读取预置的模式,并初始化总时间,以及控制部分需要用到的信号,并把初始状态送输出部分显示。

输出部分:负责输出洗衣机的当前洗衣模式,剩余时间,以及洗衣结束时的报警信号。

控制部分:根据预置部分的状态开始工作,对输入部分的控制信号进行相应,控制洗衣机的运行中模式的转变,并将改变的输出信号传递给输出部分显示。

方框图状态转移图:洗衣过程中的状态转移,转移的时候改变temp 的值,作为下次转移的标志时间: State=111时temp=40; State=110时temp=25; State=100时temp=0; State=010时temp=0;State=001时temp=0;流程图四、电路设计1、分频模块:PROCESS(CLOCK) --由输入时钟进行100分频产生洗衣时钟BEGINIF (CLOCK'EVENT AND CLOCK='1') THENCOUNT<=COUNT + 1;IF (COUNT=499999) THENCOUNT<=0;CLK<= NOT CLK;END IF;END IF;END PROCESS;功能说明:由于数电实验开发板上的系统时钟为1MHz,想要的到频率为1hz的倒计时时钟,就要对输入时钟clock进行分频,产生计时时钟clk,分频模块中每个clock做count加一,加到499999时count归零,同时clk翻转就可以得到1Hz的时钟。

北邮数电综合实验报告

北邮数电综合实验报告

北京邮电大学数字电路与逻辑设计实验学院:信息与通信工程学院班级: 2013211127 作者:薄士宁学号: 2013212543 ____一.实验名称和任务要求LED 点阵风扇的设计与实现基本要求:1、用8×8 点阵模拟风扇转动,并采用双色点阵显示。

2、风扇转动方式如图1 所示,包括四个点阵显示状态并按顺序循环显示。

风扇转动速度根据环境温度分为4 档,其中1 档的四个显示状态之间的切换时间为2 秒,2 档为1 秒,3 档为0.5 秒,4 档为静止不动。

图1 点阵模拟风扇转动示意图3、环境温度通过2 个BTN 按键设置,一个用来增加,一个用来减少,温度可设置范围为10℃~40℃,温度精度为1℃,并用两个数码管进行温度显示。

风扇根据不同的温度自动采用不同的转动速度,其中20℃~24℃对应1档,25℃~29℃对应2 档,30℃~40℃对应3 档,10℃~19℃对应4 档,用一个数码管显示档位。

4、定时模式:在风扇不同转动速度下,可以通过按键切换进入定时模式。

定时时间可设置范围为20~59 秒,采用两个数码管进行倒计时显示,当倒计时结束后,风扇状态保持静止不动。

5、设置开关键。

风扇开机初始状态为20℃、1 档,并有不小于5 秒的开机音乐。

关机状态为点阵全灭。

提高要求:1、设计LED 风扇的其他工作模式。

2、利用实验板上的温度传感器代替按键直接获取温度数据,实现对LED 风扇四档转速的自动控制。

3、用数码管实时显示温度传感器的温度数据,精度为0.1℃。

4、自拟其他功能。

二.基本思路根据实验要求,画出总的原理图。

实验的基本要求,即8×8双色点阵模拟风扇转动、风扇转动分四个档位(每个档位对应“四种”状态)、通过环境温度控制档位的自动选择、设计定时模式、开关机状态。

为了实现这些既定要求,设计出了温度控制模块、倒计时控制模块、音乐控制模块、点阵风扇模块、数码管显示模块等,通过对时钟的分频、加减法计数器、数据选择器等的运用,来实现上述功能。

北邮数电实验报告

北邮数电实验报告

北邮数电实验报告北邮数电实验报告一、引言数电实验是电子信息类专业学生必修的一门实验课程,通过实践操作,帮助学生巩固理论知识,培养实际动手能力。

本次实验旨在通过设计和搭建一个简单的数字电路,来理解数字电路的基本原理和工作方式。

二、实验目的本次实验的目的是设计一个4位二进制加法器,实现两个4位二进制数的相加运算。

通过实验,我们可以加深对于数字电路的理解,掌握数字电路的设计和搭建方法。

三、实验原理1. 二进制加法器二进制加法器是一种用于计算二进制数相加的数字电路。

它由若干个逻辑门和触发器组成,可以实现二进制数的加法运算。

在本次实验中,我们将设计一个4位二进制加法器,即可以计算两个4位二进制数的相加结果。

2. 逻辑门逻辑门是数字电路中常用的基本元件,用于实现逻辑运算。

常见的逻辑门有与门、或门、非门、异或门等。

在本次实验中,我们将使用与门和异或门来构建4位二进制加法器。

四、实验步骤1. 设计4位二进制加法器的电路图根据实验要求,我们需要设计一个能够计算两个4位二进制数相加的电路。

首先,我们可以将两个4位二进制数分别用D0~D3和E0~E3表示,其中D0和E0分别为最低位。

然后,我们需要使用与门和异或门来实现加法器的功能。

通过逻辑运算,我们可以得到每一位的和以及进位。

最后,将每一位的和连接起来,即可得到最终的结果。

2. 搭建电路根据电路图,我们可以开始搭建实验电路。

首先,将所需的逻辑门和触发器连接起来,形成一个完整的电路。

然后,将所需的输入信号和电源连接到电路上。

最后,使用示波器等工具检查电路的工作状态,确保电路正常运行。

3. 进行实验测试在搭建好电路后,我们可以进行实验测试。

首先,将两个4位二进制数的输入信号连接到电路上。

然后,通过观察输出信号,判断电路是否正确计算了两个二进制数的相加结果。

如果输出信号与预期结果一致,说明电路设计和搭建成功。

五、实验结果与分析在进行实验测试后,我们可以得到实验结果。

通过观察输出信号,我们可以判断电路是否正确计算了两个二进制数的相加结果。

北邮-数电实验报告

北邮-数电实验报告

北邮-数电实验报告数字电路实验报告学院:信息与通信工程专业:信息工程班级:2013211125学号:2013210681姓名:袁普实验一:QuartusⅡ原理图输入法设计与实现一:实验要求①:用逻辑门设计实现一个半加器,仿真验证其功能,并生成新的半加器图形模块单元。

②:用实验一生成的半加器模块和逻辑门设计实现一个全加器,仿真验证其功能,并下载到实验板测试,要求用拨码开关设定输入信号,发光二极管显示输出信号。

③:用3线—8线译码器和逻辑门设计实现函数F,仿真验证其功能,下载到实验板测试。

要求用拨码开关设定输入信号,发光二极管显示输出信号。

二:报告内容①:实验一(2)的原理图用两个已经生成的半加器图形模块单元和一个双输入或门即可实现全加器②:仿真波形图以及分析波形图:波形分析:通过分析ab ci三个输入在8中不同组合下的输出,发现与全加器的真值表吻合,说明实现了全加器的逻辑功能。

同时看见波形中出现了毛刺(冒险),这也与事实一致。

③:故障及问题分析第一次在做全加器的时候发现找不到已经生成的半加器模块,后来发现是因为在建立工程时这两个项目没有建在同一个文件夹里,在调用的时候就找不到。

后来我将全加器工程建在同一个文件夹里解决了此问题。

实验二:用VHDL设计和实现组合逻辑电路一:实验要求①:用VHDL设计一个8421码转换为格雷码的代码转换器,仿真验证其功能。

②:用VHDL设计一个4位二进制奇校验器,要求在为奇数个1时输出为1,偶数个1时输出为0,仿真验证其功能。

③:用VHDL设计一个数码管译码器,仿真验证其功能,下载到实验板测试,要求用拨码开关设定输入信号,数码管显示输出信号,并且只使一个数码管有显示,其余为熄灭状态。

二:故障及问题分析在刚开始实现让一个数码管显示的时候,我本来准备再设置6个输入和输出,通过实验板上的拨码来输入信息分别控制不同的数码管的的开闭状态,但是后来发现这样效率很低而且实验板上的拨码开关数量根本不够。

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

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

数字电路与逻辑设计实验综合实验报告目录一、实验题目和任务要求 (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码的代码转换器,仿真验证其功能,并下载到实验板测试。

北邮数电实验报告

北邮数电实验报告

北邮数电实验报告1. 实验目的本实验的目的是通过实际操作和实验验证,加深对数字电路的理解和掌握。

具体实验内容包括: 1. 实现各种基本逻辑电路(与门、或门、非门、异或门等)的电路设计。

2. 学习使用开关和LED灯进行数字信号输入和输出。

3. 掌握数字电路实验中常用的仪器设备的使用方法。

2. 实验器材和环境本实验所使用的器材和环境如下: - FPGA实验箱 - 数字逻辑集成电路(与门、或门、非门、异或门等) - 电源 - 接线板 - 数字电路实验仪器3. 实验步骤3.1 实验准备首先,我们需要将实验所需的器材连接好,包括将数字逻辑集成电路插入到FPGA实验箱上的插槽中,并将电源正确连接。

3.2 电路设计与布线根据实验要求,我们需要设计不同的基本逻辑电路。

比如,要设计一个与门电路,可以通过将两个输入端分别与两个开关连接,将输出端连接到一个LED灯上。

其他的逻辑电路同样可以设计类似的方式。

在设计和布线的过程中,需要注意保持电路的连通性,并避免出现短路等问题。

3.3 输入和输出信号设置根据实验要求,我们需要设置输入和输出信号。

可以通过控制开关的开合状态来设置输入信号,然后观察LED灯的亮灭情况来判断输出信号的状态是否符合预期。

3.4 实验数据记录和分析在实验过程中,我们需要记录每个逻辑电路的输入和输出信号状态,并进行分析。

可以通过绘制真值表或者逻辑门表来记录并分析数据。

4. 实验结果与分析根据实验步骤中记录的数据,我们可以得出实验结果,并进行进一步的分析。

比如,可以通过比对设计的逻辑电路输出和预期输出的差异,来判断实验是否成功完成。

5. 总结与反思通过本次实验,我深入了解和掌握了数字电路的基本原理和实验方法。

通过设计和实验验证,加深了对基本逻辑电路的理解,并熟悉了数字电路实验所使用的仪器设备。

在实验过程中,我遇到了一些问题,比如电路连接错误导致的信号不稳定等,但通过仔细调试和排查,最终解决了这些问题。

北邮电子-数电综合实验报告

北邮电子-数电综合实验报告

数字电路综合实验设计简易出租车计价器的设计与实现学院:电子工程学院班级: 2011211203学号: 2011210876姓名:孙月鹏班内序号: 04摘要本文介绍了利用Quartus II综合性PLD/FPGA开发软件,在MAXII数字逻辑实验开发板上实现简易出租车计价器功能的设计与实现方法.本方案采用自上而下的设计理念,将整体电路按照功能划分为分频、计数、控制、数码管显示电路、点阵显示电路等若干模块,模块内用VHDL语言完成逻辑设计,模块间用原理图进行连接,使整体可实现计费、计时等功能。

关键字:可编程器件模块化设计出租车计价器VHDL语言一、设计任务要求➢设计一台出租车计价器,不同情况下具有不同的收费标准。

基本要求:1.行驶公里:用时钟2秒钟表示出租车匀速行驶1公里。

在行车5公里以内,按起步价13元收费,超过5公里部分,以每公里2元收费。

燃油附加费每运次1元。

2.途中等待:用按键控制中途等待,等待少于(包括)5秒不收费,超过5秒后没等待3秒钟加收1元。

3.用数码管分时显示计费金额、行驶里程和等候时间.字母A表示当前处于显示计费金额状态,字母B表示当前处于显示行驶里程状态,字母C表示当前处于显示等候时间状态。

4.用按键控制出租车空驶、载客状态。

提高要求:1.用点阵滚动显示收费单据.2.具有夜间模式,基本单价加收20%的费用.出租车收费以元为单位,元以下四舍五入。

3.出租车行驶速度可调可控.4.多人乘车,分段计价。

5.自拟其他功能。

二、设计思路与结构框图1。

设计思路图1 结构框图由结构框图可以分析得出,该系统的的主体是计数控制器。

该系统由外部控制载客控制信号和等待控制信号,以时钟信号的翻转为计数依据,完成对时间、里程和费用的计数,并将结果通过数码管译码电路显示出来。

该系统的控制信号可由拨码或按键输入,时钟由开发板内部时钟分频得出,输出有点阵输出和数码管输出.因此,可将系统分为分频器、计数控制器、数码管译码和显示以及点阵显示四部分。

数字电路实验报告_北邮

数字电路实验报告_北邮

一、实验目的本次实验旨在通过实践操作,加深对数字电路基本原理和设计方法的理解,掌握数字电路实验的基本步骤和实验方法。

通过本次实验,培养学生的动手能力、实验技能和团队合作精神。

二、实验内容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. 实验原理本次实验主要涉及到的数字逻辑电路有与门、或门、非门、异或门等。

这些逻辑门可以通过逻辑运算实现各种功能,如加法器、减法器、比较器等。

我们需要根据实验要求,设计并搭建相应的数字电路,然后通过示波器等仪器进行测试,验证电路的正确性。

3. 实验步骤首先,我们根据实验要求,设计了一个4位全加器电路。

通过逻辑门的组合,实现了4位二进制数的加法运算。

然后,我们搭建了一个4位比较器电路,用于比较两个4位二进制数的大小关系。

最后,我们设计了一个4位减法器电路,实现了4位二进制数的减法运算。

4. 实验结果通过实验,我们成功搭建了4位全加器、4位比较器和4位减法器电路,并进行了测试。

实验结果表明,我们设计的电路能够正确地完成加法、比较和减法运算,符合预期的逻辑规则。

5. 实验总结通过本次实验,我们深入了解了数字逻辑电路的设计与实现过程。

我们学会了使用逻辑门进行电路设计,并通过实验验证了电路的正确性。

实验过程中,我们也遇到了一些问题,如电路连接错误、示波器读数不准确等。

但通过仔细分析和调试,我们最终解决了这些问题,并取得了满意的实验结果。

6. 实验感想数电实验是一门非常重要的实践课程,通过实验我们不仅巩固了理论知识,还培养了实践能力和解决问题的能力。

在实验过程中,我们需要细心观察、仔细分析,并灵活运用所学的知识。

实验不仅考验了我们的动手能力,还锻炼了我们的思维能力和团队合作精神。

7. 实验的意义数电实验的意义在于将理论知识与实际应用相结合,帮助我们更好地理解和掌握数字电路的原理和应用。

北邮数电综合实验报告

北邮数电综合实验报告

北邮数电综合实验报告北邮数电综合实验报告一、实验目的与背景数电综合实验是北邮电子信息工程专业的重要实践环节,旨在通过实际操作,巩固和应用学生在数字电路、模拟电路、通信原理等相关课程中所学到的理论知识。

本实验报告将对数电综合实验的内容、过程和结果进行详细描述和分析。

二、实验内容本次数电综合实验的主要内容为设计一个数字电子钟。

该电子钟具备显示时间、日期、闹钟功能,并能实现闹钟的设置、开关控制等基本操作。

实验中,我们需要使用数字集成电路、显示模块、按键开关、时钟模块等元件进行电路设计和搭建。

三、实验过程1. 硬件设计与连接根据实验要求,我们首先进行电路设计。

根据数字电子钟的功能需求,我们需要选取适当的集成电路和模块。

通过分析电路原理图,我们将各个模块进行连接,保证信号的正确传递和控制。

2. 软件编程与调试在硬件连接完成后,我们需要进行软件编程。

通过使用C语言或者Verilog等编程语言,我们可以实现数字电子钟的各项功能。

在编程过程中,我们需要考虑到时钟频率、显示模块的控制、按键开关的响应等因素。

3. 实验调试与测试完成软件编程后,我们需要进行实验调试和测试。

通过连接电源,观察电子钟的各项功能是否正常工作。

如果发现问题,我们需要进行调试,找出问题所在,并进行修复。

四、实验结果与分析经过实验调试和测试,我们成功实现了数字电子钟的设计和搭建。

该电子钟能够准确显示时间和日期,并能根据用户的设置进行闹钟的开关和响铃。

通过实验过程,我们对数字电路的原理和应用有了更深入的理解。

五、实验心得与收获通过参与数电综合实验,我深刻体会到了理论与实践的结合的重要性。

在实验中,我们需要将课堂上所学的知识应用到实际中,通过实际操作来巩固和加深对知识的理解。

同时,实验中也锻炼了我们的动手能力和解决问题的能力。

在实验过程中,我们还学会了团队合作的重要性。

在设计和搭建电路的过程中,我们需要相互配合,互相帮助,共同解决问题。

通过与同学们的合作,我们不仅解决了实验中遇到的各种问题,还加深了与同学们的交流和友谊。

北邮数电实验报告

北邮数电实验报告

数字电路与逻辑设计实验报告一、要求要求:设计制作一个简易计算器,实现最大输入两位十进制数字的加减乘运算。

基本要求:1、实现最大输入两位十进制数字的加减乘运算;八个拨码开关按两位8421bcd码输入。

2、能够实现多次连算(无优先级,从左到右计算结果),如12+34×56-78=2498。

3、最大长度以数码管最大个数为限,溢出报警。

提高要求:1、有正负数区分。

2、实现除法(不能整除时小数保留2位有效数字)。

3、其它扩展功能。

二、系统设计:设计思路:1、将该程序进行分模块设计。

可以将程序分为:主程序、译码模块和防抖模块。

其中,主程序负责将输入的数据进行存储,对数据进行运算,将数据输出到数码上等;防抖模块负责对按键输入的数防抖;译码模块负责对输入的数据进行译码(由8421bcd码转化为十进制的编码)。

2、分模块进行相应模块的编写。

3、对编好的模块进行测试。

4、编写主程序并进行调试。

总体框图:流程图:分块设计:(按实际操作的分块)输入模块:由符号开关和拨码开关构成。

采用序列存储的方式存储相应的输入。

输入译码模块:将输入的符号序列转化成先用状态,以便选取对应的计算方法;将输入的8421bcd码转化成相应的两位十进制数。

数码显示模块:将寄存器内的数进行输出到数码管上。

显示所输入的第一个数以及最后的结果。

计算模块:调用相应的计算方式,对所输入的数进行计算。

防抖模块:在用按键输入时,所得到的信号可能会有抖动,因此加入此抖动电路。

三、仿真波形及波形分析:分析(波形仿真时,为了方便观察,将8421bcd码输入方式,该为了十进制的直接输入方式,并将输出,有原来的数码管显示改成了直接数字显示)由图中可以看出,当输入12 ,按下“确定”,数字就输入到了寄存器中,输入“+”号(对应仿真中的fuhao“100000”),在输入一个数35,按下“确定”,该计算器就件寄存器中的数与第二次输入的数进行相加,得到结果47。

此时该结果又被直接保存到了寄存器中,继续输入运算符“-”(对应仿真中得fuhao“010000”),输入第三个数18,按下“确定”,计算器对其做减法运算,得到结果29,该结果又在寄存器中存储着。

北邮数电综合实验报告

北邮数电综合实验报告

北邮数电综合实验报告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软件进行仿真和物理验证,我们验证了设计的正确性和可行性。

北邮数电综合实验报告

北邮数电综合实验报告

数字电路与逻辑设计实验题目: 简易出租车计价器学号:姓名:班级:学院:时间:2013/11/4一.设计课题的任务要求设计一台出租车计价器,不同情况具有不同的收费标准。

基本要求:1、行驶公里:用时钟2 秒钟表示出租车匀速行驶1 公里,在行车5 公里以内,按起步价13 元收费,超过5 公里部分,以每公里2 元收费。

燃油附加费为每运次1 元。

2、途中等待:用按键控制中途等待,等待少于(包括)5 秒不收费,超过5 秒后每等待3 秒钟加收1 元。

3、用数码管分时显示计费金额、行驶里程和等候时间。

字母A 表示当前处于显示计费金额状态,字母B 表示当前处于显示行驶里程状态,字母C 表示当前处于显示等候时间状态。

4、用按键控制出租车空驶、载客状态并用点阵显示空驶、载客状态。

二、系统设计(包括设计思路、总体框图、分块设计)1、设计思路:将整个计价器分为控制和计费模块,按键及防抖模块,数码管显示模块,点阵显示模块。

其中控制和计费模块作为系统核心,负责给出所有控制和对外显示信号。

按键及防抖模块提供输入按键信号,用于状态间切换。

数码管用于显示计费金额、里程和等待时间信息。

点阵模块用于显示出租车载客和空驶状态。

2、设计框图:3、分块设计①控制和计费模块:采用状态机的设计方式,根据计费计时方式的不同,分为了S0、S1、S2、S3四个状态,四个状态的含义和状态转移图如图所示:②按键防抖模块:如图:按键防抖模块的原理是利用信号延迟,每个防抖模块都有一个输入时钟,每按下一次按键后输出端将产生一个输入时钟宽度的脉冲,输入时钟频率与主控模块中的状态切换扫描时钟频率相同,使状态能够及时的切换。

③点阵显示模块:点阵模块主要用于显示出租车的空载和载客状态。

空载时显示汉字“空”,载客时显示标志“X”。

输出信号lie和com分别连接到点阵控制的行和列。

En是由计费控制模块给出的空载/载客信号。

④数码管显示模块数码管主要用于显示计费、里程、等待时间信息。

北邮数电实验报告_双色点阵

北邮数电实验报告_双色点阵

北京邮电大学数电综合实验报告实验名称:双色点阵显示控制器学院:姓名:班级:学号:班内序号:一.设计课题的任务要求用8×8点阵设计双色点阵显示控制器 基本要求: 1、固定红色显示一个汉字或图形,显示亮度4级可调,用一个btn 按钮实现亮度调节,亮度变化视觉效果要尽量明显。

2、用从红到绿8级渐变色显示一个固定汉字或图形。

3、分别用单字循环显示、左右滚动显示、上下滚动显示三种显示方式单色显示四个汉字或图形,显示过程中,显示方式用一个btn 按键进行切换。

4、显示的图形或汉字要尽量饱满美观。

提高要求:滚动显示过程中实现四种显示颜色的自动变换,颜色变化视觉效果要尽量明显。

自拟其它功能。

二.系统设计1. 设计思路考虑本程序设计要求模块明确单一但需要变化多种状态,因此采用单模块多状态多进程方式实现。

其中防抖进程用于检测输入,本程序使用BTN 按键进行输入控制,而按键的键入可能由于抖动产生多个上升沿,对程序的控制产生影响。

防抖动采用了延时原理来对冒险或长时间按键电平进行处理。

分频使用了多个进程产生程序所需要的多个时钟频率。

包括:clk1(扫描时钟 大于480Hz 但不过高)clk2(占空比调节1 clk1周期的整数倍,但不过高) clk3(占空比调节2 同clk2,但占空比不同) clk4(占空比调节3 同clk2,但占空比不同) clk5(按键时钟 约100Hz) clk6(滚动变化计时 约1Hz)状态机变化进程用于管理状态变化,当遇到按键电平信号时根据规则改变对应状态。

显示进程包括主要显示进程和一些辅助进程,辅助进程完成了时钟对应计数器计数,主进程则根据状态变化显示不同显示模式下不同的图案。

2. 总体框图(1) 总体结构框图:(2) 逻辑划分框图Mode(3)MDS图3.各进程介绍⑴分频进程们分频进程含一个从50M(也可能是25M)分出的扫描频率clk1,这个频率要大于60*8=480Hz(因为人眼分辨频率为60Hz左右,要保证每排扫描时达到60Hz 则需480Hz)。

北邮电子电路综合设计实验报告

北邮电子电路综合设计实验报告

北京邮电大学电子电路综合设计实验报告课题名称:函数信号发生器的设计学院:信息与通信工程学院 班级: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,大于要求值。

北邮 大三上学期 数字电路综合实验报告

北邮 大三上学期 数字电路综合实验报告

数字电路综合实验报告学院:信息与通信工程学院班级:201*******班内序号:**学生姓名:****学号:201*******一:设计课题的任务要求-------------------------------------------------------------------------------3基本要求:------------------------------------------------------------------------------3提高要求:------------------------------------------------------------------------------3二:系统设计(包括设计思路、总体框图、分块设计)------------------------------------------3设计思路:-------------------------------------------------------------------------------3总体框图:-------------------------------------------------------------------------------4分块设计:------------------------------------------------------------------------------41:分频器------------------------------------------------------------------42:防抖模块---------------------------------------------------------------53:模式调节模块---------------------------------------------------------54:手动定时&默认定时模块------------------------------------------75:倒计时模块------------------------------------------------------------86:火力调节模块---------------------------------------------------------87:数码管驱动模块------------------------------------------------------98:led显示模块----------------------------------------------------------109:关机模块---------------------------------------------------------------1110:蜂鸣器模块----------------------------------------------------------1111:点阵显示模块-------------------------------------------------------11三:仿真波形及波形分析--------------------------------------------------------------------------------121:分频器-----------------------------------------------------------------122:模式选择模块--------------------------------------------------------133:定时模块--------------------------------------------------------------134:倒计时模块-----------------------------------------------------------145:火力调节模块--------------------------------------------------------146:led显示模块---------------------------------------------------------157:蜂鸣器模块-----------------------------------------------------------15四:源程序--------------------------------------------------------------------------------------------------16总程序结构和原理图------------------------------------------------------------------16各部分程序结构原理图---------------------------------------------------------------181:分频器-----------------------------------------------------------------182:防抖模块--------------------------------------------------------------203:模式控制模块--------------------------------------------------------204:定时&倒计时模块---------------------------------------------------235:火力调节模块--------------------------------------------------------286:数码管显示模块-----------------------------------------------------307:led显示模块---------------------------------------------------------328:关机模块-------------------------------------------------------------339:蜂鸣器模块-----------------------------------------------------------3410:点阵显示模块------------------------------------------------------34五:功能说明-----------------------------------------------------------------------------------------------38六:元件清单和利用情况--------------------------------------------------------------------------------38七:故障和问题分析--------------------------------------------------------------------------------------39八:总结和结论--------------------------------------------------------------------------------------------40一:设计课题的任务要求设计制作一个简易电磁炉控制器。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

数字电路综合实验报告简易智能密码锁一、实验课题及任务要求设计并实现一个数字密码锁,密码锁有四位数字密码和一个确认开锁按键,密码输入正确,密码锁打开,密码输入错误进行警示。

基本要求: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行为低电平,再读入列值,如果其中有哪一位为低电平,那么肯定对应的那一列有按键按下。

由此可确定按键位置。

2.数码管模块本实验采用六位七段共阴极数码管,通过选通6个位选管脚,向相应的IO口送低电平来点亮其中任何一位数码管,因为现在采用四位密码锁,所以只是用了其中四个,最高位两位数码管位选全部置1.如下附上7段共阴极数码管真值表3.点阵模块点阵模块,共由8*8*2个发光二极管组成,行低电平有效,列高电平有效。

要求在开锁模式和闭锁模式显示不同的图案,则先将要显示的每幅图像画8*8个小方格的矩形框中,再在有图案下落处的小方格里填上“1”,无图案处填上“0”,这样就形成了与图案所对应的二进制数据在该矩形框上的分布。

当闭锁时以红色点阵显示,此时绿色点阵全部置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 isport (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 issignal setm: std_logic;signal lockm: std_logic;signal lkwei: integer range 0 to 4;signal lm1,lm2,lm3,lm4:integer range 0 to 9;signal clk_1: std_logic; --1MHzsignal clk_2: std_logic; --200Hzsignal clk_3: std_logic; --1000Hzsignal clk_4: std_logic; --500Hzcomponent 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;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;begina1: fenpinport map(clk=>clk,clk_out1=>clk_1,clk_out2=>clk_2, clk_out3=>clk_3,clk_out4=>clk_4);u1: kbport 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 :smgport map(clk => clk_4,setmode=>setm,lockmode=>lockm,kwei=>lkwei,m1=>lm1,m2=>lm2,m3=>lm3,m4=>lm4,smgzf=>smgzf,smgcatout=>smgcatout);u3 :dzport map(clk=>clk_3, lockmode=>lockm ,dzrow=>dzrow, dzcolr=>dzcolg, dzcolg=>dzcolr );u4 :alarmport 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 isport (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 issignal 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; --1MHzsignal clk_2: std_logic; --200Hzcomponent scan isport(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 isport(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 isport(clk, x: in std_logic;y: out std_logic);end component;beginsetmod<=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)beginif(clk'event and clk='1')thenif (tmp4=2499999) thentmp4<=0;clkfd<=not clkfd;elsetmp4<=tmp4+1;end if;end if;end process;process(clk_1,en,jpout)beginif(clk_1'event and clk_1='1') thenif(lockmode='1')then ----------闭锁状态下输入密码并读入按键值后存入mmwei<=0;if(jpout/=10)thenif(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;end if;else kwei<=0;---------------开锁状态下if(lock='1')then --------------上锁lockmode<='1';elseif(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')thenif(jpout/=10)then ----------------修改密码状态下读入按键值存入m并移位if(wei=0)thenm1<=m2;m2<=m3;m3<=m4;m4<=jpout;wei<=wei+1;elsif(wei=1)thenm1<=m2;m2<=m3;m3<=m4;m4<=jpout;wei<=wei+1;elsif(wei=2)thenm1<=m2;m2<=m3;m3<=m4;m4<=jpout;wei<=wei+1;elsif(wei=3)thenm1<=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) --------修改密码键beginif(clkfd'event and clkfd='1')thenif(set='1')thenset1<='1';end if;if(sure='1')thenset1<='0';end if;end if;end process;process(btn1) -----------清零键 beginif(btn1='1')thenclear<='1';else clear<='0';end if;end process;process(btn2) ----------确认键beginif(btn2='1')thensure<='1';else sure<='0';end if;end process;process(btnloc) -----闭锁键beginif(btnloc='1')thenlock<='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 isport(clk_1: in std_logic; --高频(for scan) 1Mhz clkout1clk_2: in std_logic; --低频(for debounce) 200hz clkout2row: 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 issignal en: std_logic;component debounce isport(clk, x: in std_logic;y: out std_logic);end component;beginu1: debounce port map(clk=>clk_2, x=>en, y=>en_up);process(clk_1)beginif(clk_1'event and clk_1='1') then ---------列扫描if(en='1') thencol<="1000";elsecase col iswhen "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)beginif(clk_1'event and clk_1='1') thencase col iswhen "1000" =>if((row(3) and row(2) and row(1) and row(0))='1') thenen<='0';end if;when "1110" =>case row is--when "1110" => y<="1111";when "1101" =>y<=1; en<='1'; --1when "1011" =>y<=4; en<='1'; --4when "0111" =>y<=7; en<='1'; --7when others => y<=10;end case;when "1101" =>case row iswhen "1110" =>y<=0; en<='1'; --0when "1101" =>y<=2; en<='1'; --2when "1011" =>y<=5; en<='1'; --5when "0111" =>y<=8; en<='1' ; --8when others =>y<=10;end case;when "1011" =>case row is--when "1110" => y<="1111";when "1101" =>y<=3; en<='1'; --3when "1011" =>y<=6; en<='1'; --6when "0111" =>y<=9; en<='1'; --9when 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 isport(clk, x: in std_logic; ------------- 200hz低频时钟y: out std_logic);end debounce;architecture a of debounce istype state is(s0,s1,s2,s3,s4); ------------5个状态signal pre_s, next_s: state;beginprocess(clk)beginif(clk'event and clk='1') thenpre_s<=next_s;end if;end process;process(pre_s, x) -------输入为连续3个或以上的高电平时,输出一个高电平begincase pre_s iswhen s0 => -----------初始状态s0if(x='1') thennext_s<=s1;elsenext_s<=s0;end if;y<='0';when s1 =>if(x='1') thennext_s<=s2;elsenext_s<=s0;end if;y<='0';when s2 =>if(x='1') thennext_s<=s3;elsenext_s<=s0;end if;y<='0';when s3 => ------------连续3个高电平,输出一个高电平y<='1';next_s<=s4;when s4 => ----------3个以上高电平,不再继续输出高电平y<='0';if(x='1') thennext_s<=s4;elsenext_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 isport(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 isconstant 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;beginprocess(clk)beginif(clk'event and clk='1') thenif(c1=div1) thentemp1<=not temp1;c1<=0;elsec1<=c1+1;end if;if(c2=div2) thentemp2<=not temp2;c2<=0;elsec2<=c2+1;end if;if(c3=div3) thentemp3<=not temp3;c3<=0;elsec3<=c3+1;end if;if(c4=div4) thentemp4<=not temp4;c4<=0;elsec4<=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 isport (clk : in std_logic; --500hz clkout4setmode: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 issignal smgcat:integer range 0 to 5;signal m1y,m2y,m3y,m4y:std_logic_vector(6 downto 0);beginprocess(clk) -----------位选码beginif(clk'event and clk='1')thenif (smgcat=5)thensmgcat<=0;elsesmgcat<=smgcat+1;end if;end if;end process;process(setmode,lockmode,smgcat)beginif(lockmode='0')thencase 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;elsesmgzf<="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) --------------七段数码管真值表begincase m1 iswhen 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)begincase m2 iswhen 0=>m2y<="1111110";when 1=>m2y<="0110000";when 2=>m2y<="1101101";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)begincase m3 iswhen 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 others=>m3y<="0000000";end case;end process;process(m4)begincase m4 iswhen 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 isport (clk : in std_logic; --1000hz clkout3lockmode:in std_logic;dzrow,dzcolr,dzcolg: out std_logic_vector(7 downto 0));end dz;architecture behave of dz issignal dzcat:integer range 0 to 7;beginprocess(clk) ----------------------------计数器输出dzcat用于行扫描beginif(clk'event and clk='1')thenif (dzcat=7)thendzcat<=0;dzcat<=dzcat+1;end if;end if;end process;process(lockmode,clk)beginif(lockmode='1')then ----------点阵显示闭锁图形case dzcat iswhen0=>dzrow<="01111111";dzcolr<="00000000";dzcolg<="000110 00";when1=>dzrow<="10111111";dzcolr<="00000000";dzcolg<="001001 00";when2=>dzrow<="11011111";dzcolr<="00000000";dzcolg<="001001 00";when3=>dzrow<="11101111";dzcolr<="00000000";dzcolg<="011111 10";4=>dzrow<="11110111";dzcolr<="00000000";dzcolg<="011111 10";when5=>dzrow<="11111011";dzcolr<="00000000";dzcolg<="011111 10";when6=>dzrow<="11111101";dzcolr<="00000000";dzcolg<="011111 10";when7=>dzrow<="11111110";dzcolr<="00000000";dzcolg<="000000 00";end case;else -----------------点阵显示开锁图形case dzcat iswhen0=>dzrow<="01111111";dzcolr<="00000110";dzcolg<="000000 00";when1=>dzrow<="10111111";dzcolr<="00001001";dzcolg<="000000 00";when2=>dzrow<="11011111";dzcolr<="00001001";dzcolg<="000000 00";when3=>dzrow<="11101111";dzcolr<="11111100";dzcolg<="000000 00";when4=>dzrow<="11110111";dzcolr<="11111100";dzcolg<="000000 00";when5=>dzrow<="11111011";dzcolr<="11111100";dzcolg<="000000 00";when6=>dzrow<="11111101";dzcolr<="11111100";dzcolg<="000000 00";when7=>dzrow<="11111110";dzcolr<="00000000";dzcolg<="000000 00";end case;end if;end process;end;----------------------------蜂鸣报警-------------------------library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity alarm isport (clk : in std_logic; ---------高频时钟信号 bj:in std_logic; -----------报警使能信号fmq: out std_logic ----------蜂鸣器输出);end alarm;architecture behave of alarm issignal beep_1500,beep_750,clktmp,tmp:std_logic; signal count:std_logic_vector(23 downto 0);signal beep:std_logic;beginprocess(clk)beginif clk'event and clk='1' thencount<=count+'1';end if;clktmp<=count(23);beep_1500<=count(14); ----------分频得到1500hz和750hz的频率用于报警beep_750<=count(15);end process;process(clktmp)beginif clktmp'event and clktmp='1' thentmp <= NOT tmp;end if;end process;process(bj)beginif(bj='1')then --------开始报警if tmp='0' thenbeep <= beep_1500;else beep <= beep_750;end if;else beep<='0';end if;end process;process(beep) -------蜂鸣器发声beginfmq<=beep;end process;end behave;五、功能说明及资源利用5.1功能说明lockmode对应的led灯亮时表示闭锁状态,此时点阵显示落锁图形,按任何键都不会显示密码,清零或者开锁,在此时输入密码kwei 从0开始不断加1,输入的密码在数码管上显示为“-”且依次左移,按下确认键btn2后,当输入密码m与寄存器中预设密码mm不同时,蜂鸣器开始报警,当输入密码m与寄存器中预设密码mm相同时,切换为开锁状态,lockmode对应的led灯灭,此时按下btn1表示清零,恢复为初始密码0000;按set键重新设置密码,setmode 对应的led 灯亮起,修改完密码后按下确认键btn2,则setmode 对应的led灯灭,退出修改密码状态;按下btnloc切换为关锁状态。

相关文档
最新文档