北邮数电综合实验报告

合集下载

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

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

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

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

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

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

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

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

北邮数电综合实验报告

北邮数电综合实验报告

北京邮电大学数字电路与逻辑设计实验学院:信息与通信工程学院班级: 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个输入和输出,通过实验板上的拨码来输入信息分别控制不同的数码管的的开闭状态,但是后来发现这样效率很低而且实验板上的拨码开关数量根本不够。

北邮数电综合实验报告

北邮数电综合实验报告

北邮数电综合实验报告综合实验报告:基于北邮数电实验的电子门禁系统设计与实现摘要:本次实验通过使用北邮数电实验室提供的器件和设备,设计并实现了一个简易的电子门禁系统。

该系统能够通过输入正确的密码或使用合法的身份卡,实现对门禁的控制和管理。

本文将详细介绍系统设计的原理、实验过程和结果,并对实验进行了总结和评价。

一、引言电子门禁系统是当前社会中广泛应用的一种重要安全保障设施。

它通过使用密码、身份卡等识别方式,对人员出入进行控制和管理。

本实验旨在通过北邮数电实验的学习和实践,学习和掌握电子门禁系统的设计与实现。

二、实验器材与原理实验器材: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码的代码转换器,仿真验证其功能,并下载到实验板测试。

北邮数电综合实验报告

北邮数电综合实验报告

点阵赛车游戏学院:信息与通信工程学院专业:通信工程班级:姓名:学号:班内序号:一、设计课题的任务要求用8×8点阵进行5秒倒计时显示,当5秒倒计时结束后,点阵显示赛道和赛车的初始位置,赛车游戏开始,并开始计时,用两个数码管显示时间。

用红色表示赛道,黄色表示赛车的初始位置,箭头表示赛车行进的方向。

用BTN1~BTN3三个按键分别控制赛车的左移、前进、右移,最终使赛车在不碰撞赛道的情况下走完全程,游戏结束,点阵显示“V”图案,数码管显示走完全程所耗费的时间。

当游戏时间超过59秒,或者赛车在行进过程中碰撞赛道,游戏失败,点阵显示“X”图案。

通过按键BTN0进行复位,控制点阵返回到初始状态。

二、系统设计1、设计思路这个过程乍一看蛮复杂的,但是当我经过仔细分析后发现,我的代码可以按照这个游戏的运行过程来写。

这个游戏分为4个状态,即倒计时,运行,成功和失败。

倒计时部分根据不同数字在点阵上的位置很容易设计出来,运行部分便是初始化赛道,赛车的位置,然后用按键来控制赛车运动,在这个过程中要不断判断赛车是否撞墙和到达终点,如果到达终点便进入第三个状态,成功,即显示“V”;若果撞墙便进入第四个状态,失败,即显示“X”。

在游戏运行的同时数码管还要计时。

2、总体框图(1)系统结构图(2)ASM 图译码显示器分频器控制器 计时器赛道及赛车CPRESET BTN1BTN2 BTN3启动NY是否碰到边界是否到达终点显示“V ”显示“×”计时移动是否复位是否复位YNNYNYN(4)功能模块图显示存储器控制器 方向控制模块计时器数码管分频器点阵显示倒计时移动显示“V ”显示“X ”3、模块设计(1)分频模块分频器:因为原有低频时钟为50MHZ,如果直接用这个时钟信号同时实现计时和显示部分,故需两个分频器,分别将时钟频率分为1Hz和1kHz,1Hz用来控制倒计时和游戏运行过程中的计时,1kHz用来控制点阵和数码管的显示。

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

数字电路与逻辑设计实验题目: 简易出租车计价器学号:姓名:班级:学院:时间: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是由计费控制模块给出的空载/载客信号。

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

clk_shu连接1kHz 时钟扫描信号,s0~s6用于接收计费控制模块输出的各个数码管显示的数字。

Weixuan和duanxuan控制数码管的位选和段选信号。

⑤时钟分频模块将50MHz片上时钟分频为1Hz、1kHz、200Hz时钟信号,其中1Hz用于计费和计时。

200Hz用于按键防抖和状态切换。

1kHz用于数码管和点阵的扫描。

三、仿真波形及波形分析①数码管显示模块:下图是固定s0~s6为数字951413后的仿真波形,由于S1位在程序中没有用到,于是将其始终置为高电平(灭),实际输出应为9 1413。

如图所示:weixuan信号每隔6个时钟周期扫描一次,扫描频率为166Hz足以使人眼产生连续显示的感觉。

观察duanxuan信号,在圆圈处应显示数字“1”,duanxuan为0000110正是“1”的段选码。

说明数码管能将s0~s6传输的数字正确的显示。

②按键防抖模块如图,keyin输入一个持续时间约为0.1s的按键信号并用高频时钟模拟抖动,keyout输出一个时钟周期(5ms)的高电平。

③时钟分频模块:由于分频比例太高,仿真到1s需要花费大量时间,故只仿真到20ms,观察1kHz和200Hz信号如下:④点阵显示模块:将en置高电平,输出应为X,如图,显示正确。

⑤计费计时模块:等待模式:如图在2S和3S间分别按start-stop和pause进入s2模式,初始计费为14(起步费+燃油费),2s(即等待3s)后计费变为15。

而在切换至s1后outen信号置高电平使点阵显示“X”。

结束和清零:如图,再次按Start-stop后停止计费,按clear后计时计费清零行驶状态:5s内为14元,之后每2s 加2元,计费正常。

四、源程序计费和控制模块:Mytaxi.vhdlibrary IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;entity mytaxi isport ( signal clk1k,clk1,clk5ms:in std_logic;--频率为1kHz,1Hz,5ms的信号start_stop:in std_logic; --开始-结束信号pause:in std_logic; --等待-重新行驶信号clear:in std_logic; --清零信号t0:out integer range 0 to 13; --与数码管连接t1:out integer range 0 to 13;t2:out integer range 0 to 9;t3:out integer range 0 to 9;t4:out integer range 0 to 9;t5:out integer range 0 to 9;outen:out std_logic);--点阵控制信号end mytaxi;architecture behav of mytaxi issignal sec1:integer range 0 to 5; --秒计数十位signal sec0:integer range 0 to 9; --秒计数个位signal m1:integer range 0 to 5; --分的十位计数器signal m0:integer range 0 to 9; --分的个位计数器signal c2,c1,c0:integer range 0 to 9; --费用计数器signal k2,k1,k0:integer range 0 to 9; --公里计数器signal v:integer range 0 to 5:=1; --车速signal fei:integer range 0 to 999;--费用计数器signal bai,shi,ge:integer range 0 to 9;--费用计数百位,十位,个位type state_type is (s0, s1, s2, s3); --状态列表signal state : state_type;beginprocess(clk5ms,start_stop,pause,clear) --状态切换进程beginif clear= '1' thenstate <= s0;elsif (rising_edge(clk5ms)) thencase state iswhen s0=>if start_stop = '1' thenstate <= s1;elsestate <= s0;end if;when s1=>if start_stop='1' thenstate <= s3;elsif pause = '1' thenstate <= s2;elsestate <= s1;end if;when s2=>if start_stop = '1' thenstate <= s3;elsif pause = '1' thenstate <= s1;elsestate <= s2;end if;when s3=>if clear= '1' thenstate <= s0;elsestate <= s3;end if;end case;end if;end process;jishi:process(clk1) --计时,计费进程variable cntk:integer range 0 to 5;variable cntf1:integer range 0 to 5;variable cntf11:integer range 0 to 5;variable cntf2:integer range 0 to 5;variable cntf22:integer range 0 to 2;variable cntx:integer range 0 to 6:=0;beginif clk1'event and clk1='1' thencase state iswhen s2=> --等待模式outen<='1'; --点阵显示载客if cntf2>4 then --等待超过5s进行计费if cntf22=2 then cntf22:=0; --每3s加1元fei<=fei+1;else cntf22:=cntf22+1;end if;else cntf2 :=cntf2+1;end if;if sec0=9 then sec0<=0; --此语句完成秒计数if sec1=6 then sec1<=0;if m0=9 then m0<=0; --此语句完成分计数if m1<=6 then m1<=0;else m1<=m1+1;end if;else m0<=m0+1;end if;else sec1<=sec1+1;end if;else sec0<=sec0+1;end if;bai<=fei/100; --将费用重新计算成三位便于显示shi<=(fei/10) mod 10;ge<=fei mod 10;when s1=> --行驶模式outen<='1';--点阵显示载客if cntk=v then cntk:=0; --2s一公里if k0=9 then k0<=0;if k1=9 then k1<=0;if k2=9 then k2<=0; --公里计数else k2<=k2+1;end if;else k1<=k1+1;else k0<=k0+1;fei<=fei+2; --每公里2元end if;else cntk:=cntk+1;end if;if cntf1=v then cntf1:=0;if cntf11>4 then fei<=fei+2; --超过5公里开始计费else cntf11:=cntf11+1;end if;else cntf1:=cntf1+1;end if;bai<=fei/100;shi<=(fei/10) mod 10;ge<=fei mod 10;when s0=> --按下clear后各项数字清零outen<='0';cntf1:=0;cntf11:=0;cntf2:=0;cntf22:=0;cntk:=0;fei<=14;bai<=0;shi<=0;ge<=0;sec1<=0;sec0<=0;m1<=0;m0<=0;k1<=0;k0<=0;k2<=0;outen<='0';end case;if cntx=6 then cntx:=0;else cntx:=cntx+1;end if;case cntx is --数码管分时显示when 2=>t0<=10;t1<=0;t2<=0;t3<=bai;t4<=shi;t5<=ge;when 4=>t0<=11;t1<=0;t2<=0;t3<=k2;t4<=k1;t5<=k0;when 6=>t0<=12;t1<=0;t2<=m1;t3<=m0;t4<=sec1;t5<=sec0;when others=>t1<=0;end case;end if;end process jishi;end;数码管:shumaguan.vhdLIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY shumaguan ISPORT(clk_shu:IN STD_LOGIC;--BUTTON:IN STD_LOGIC;s0:in integer range 0 to 13; --各个数码管的数字s1:in integer range 0 to 13;s2:in integer range 0 to 9;s3:in integer range 0 to 9;s4:in integer range 0 to 9;s5:in integer range 0 to 9;weixuan:OUT STD_LOGIC_VECTOR(5 downto 0);--位选duanxuan:OUT STD_LOGIC_VECTOR(6 downto 0)—段选);END shumaguan;ARCHITECTURE ACE OF shumaguan ISSIGNAL CNT6:INTEGER RANGE 0 TO 5;SIGNAL C:integer range 0 to 13;BEGINP1:process(CNT6)BEGINCASE CNT6 IS --位选扫描WHEN 0 => weixuan <= "111110" ;WHEN 1 => weixuan<= "111111" ;WHEN 2 => weixuan<= "111011" ;WHEN 3 => weixuan<= "110111" ;WHEN 4 => weixuan<= "101111" ;WHEN 5 => weixuan<= "011111" ;WHEN OTHERS => NULL;END CASE ;END PROCESS P1;P2:process(clk_shu)BEGINIF clk_shu'EVENT AND clk_shu= '1' THEN--实现模6计数器if CNT6= 5 thenCNT6<= 0;elseCNT6<=CNT6 + 1;end if;END IF;END PROCESS P2;P3:process(CNT6)begincase CNT6 iswhen 0=>C<=s0; --扫描到的数码管赋值when 1=>C<=s1;when 2=>C<=s2;when 3=>C<=s3;when 4=>C<=s4;when 5=>C<=s5;end case;end process P3;P4:process(C)BEGINCASE C IS --段选赋值WHEN 0=> duanxuan<= "1111110";WHEN 1=> duanxuan <= "0110000";WHEN 2=> duanxuan <= "1101101";WHEN 3=> duanxuan <= "1111001";WHEN 4=> duanxuan <= "0110011";WHEN 5=> duanxuan <= "1011011";WHEN 6=> duanxuan <= "1011111";WHEN 7=> duanxuan <= "1110000";WHEN 8=> duanxuan <= "1111111";WHEN 9=> duanxuan <= "1111011";WHEN 10=> duanxuan <= "1110111";WHEN 11=> duanxuan <= "0011111";WHEN 12=> duanxuan <= "0001101";WHEN OTHERS =>NULL ;END CASE ;END PROCESS P4;END ACE;分频:div50m.vhdlibrary ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity div50m isport(clk_in : in std_logic;clk_out_1hz : out std_logic;clk_out_5ms : out std_logic;clk_out_1khz : out std_logic);end;architecture a of div50m issignal cnt : integer range 0 to 24999;signal cnt1: integer range 0 to 999;signal cnt2: integer range 0 to 5;signal clk_tmp1k : std_logic;signal clk_tmp1: std_logic;signal clk_tmp5ms: std_logic;beginprocess(clk_in)beginif (clk_in'event and clk_in='1') then---分频到1kHz if cnt=24999 thencnt<=0;clk_tmp1k<= not clk_tmp1k;elsecnt<=cnt+1;end if;end if;end process;process(clk_tmp1k) --分频到1Hz beginif (clk_tmp1k'event and clk_tmp1k='1') then if cnt1=499 thencnt1<=0;clk_tmp1<= not clk_tmp1;elsecnt1<=cnt1+1;end if;end if;end process;process(clk_tmp1k) --分频到5ms beginif (clk_tmp1k'event and clk_tmp1k='1') then if cnt2=4 thencnt2<=0;clk_tmp5ms<= not clk_tmp5ms;elsecnt2<=cnt2+1;end if;end if;end process;clk_out_1khz<=clk_tmp1k;clk_out_1hz<=clk_tmp1;clk_out_5ms<=clk_tmp5ms; end;防抖模块:fangdou.vhdlibrary ieee;use ieee.std_logic_1164.all; entity fangdou isport(keyin,clk_fd:in std_logic;keyout:out std_logic); end;architecture b of fangdou issignal key_tmp0,key_tmp1,key_tmp2,key_tmp3:std_logic;beginprocess(clk_fd)beginif (clk_fd'event and clk_fd='1') thenkey_tmp0 <= keyin;key_tmp1 <= key_tmp0;end if;end process;--利用信号赋值延时将前后信号相与完成防抖key_tmp2 <= key_tmp0 and key_tmp1;process( clk_fd )beginif (clk_fd'event and clk_fd='1') thenkey_tmp3 <= key_tmp2;keyout <= not( key_tmp2 ) and key_tmp3;end if;end process;end; --时钟上升沿输出一个时钟周期宽度的脉冲点阵模块:peng.vhdlibrary ieee;use ieee.std_logic_1164.all;use ieee.std_logic_Unsigned.all;use ieee.std_logic_ARITH.all;ENTITY peng isport(clkpeng,en:in std_logic;lie:out std_logic_vector(7 downto 0); --列com:out std_logic_vector(7 downto 0));--行End peng;Architecture a of peng issignal st1:std_logic_vector(7 downto 0);signal data:std_logic_vector(7 downto 0);signal d0,d1,d2,d3,d4,d5,d6,d7:std_logic_vector(7 downto 0);signal e0,e1,e2,e3,e4,e5,e6,e7:std_logic_vector(7 downto 0);--signal lie0,lie1,lie2,lie3,lie4,lie5,lie6,lie7:std_logic_vector(7 downto 0); Begincom<=data;lie<=st1;d0<="00110000";---汉字“空”d1<="01011001";d2<="01111001";d3<="11001111";d4<="11001111";d5<="01111001";d6<="01111001";d7<="00110000";e0<="10000001";--符号“X”e1<="01000010";e2<="00100100";e3<="00011000";e4<="00011000";e5<="00100100";e6<="01000010";e7<="10000001";second:process(clkpeng)beginif(clkpeng='1' and clkpeng'event )then—逐行扫描,下同if en='0' thenif st1(7 downto 0)="00000000"or st1(7 downto 0)="01111111"thenst1(7 downto 0)<="11111110";data<=d0;elsif st1(7 downto 0)="11111110"thenst1(7 downto 0)<="11111101";data<=d1;elsif st1(7 downto 0)="11111101"thenst1(7 downto 0)<="11111011";data<=d2;elsif st1(7 downto 0)="11111011"thenst1(7 downto 0)<="11110111";data<=d3;elsif st1(7 downto 0)="11110111"thenst1(7 downto 0)<="11101111";data<=d4;elsif st1(7 downto 0)="11101111"thenst1(7 downto 0)<="11011111";data<=d5;elsif st1(7 downto 0)="11011111"thenst1(7 downto 0)<="10111111";data<=d6;elsif st1(7 downto 0)="10111111"thenst1(7 downto 0)<="01111111";data<=d7;end if;elseif st1(7 downto 0)="00000000"or st1(7 downto 0)="01111111"thenst1(7 downto 0)<="11111110";data<=e0;elsif st1(7 downto 0)="11111110"thenst1(7 downto 0)<="11111101";data<=e1;elsif st1(7 downto 0)="11111101"thenst1(7 downto 0)<="11111011";data<=e2;elsif st1(7 downto 0)="11111011"thenst1(7 downto 0)<="11110111";data<=e3;elsif st1(7 downto 0)="11110111"thenst1(7 downto 0)<="11101111";data<=e4;elsif st1(7 downto 0)="11101111"thenst1(7 downto 0)<="11011111";data<=e5;elsif st1(7 downto 0)="11011111"thenst1(7 downto 0)<="10111111";data<=e6;elsif st1(7 downto 0)="10111111"thenst1(7 downto 0)<="01111111";data<=e7;end if;end if;end if;end process second;end a;五、功能说明及资源利用情况实际电路框图:功能说明:按下start-stop键后开始计时,随即进入s1行驶状态,行驶状态初始费用为起步价+燃油费=14元,之后超过5公里后每公里2元。

相关文档
最新文档