北邮数字电路实验报告_简易出租车计价器
- 格式:docx
- 大小:209.12 KB
- 文档页数:17
数字电子技术基础实验报告——出租车计价器的设计指导老师:卜灵组员:王文博 1004112226孔德强 1004112230日期:2014年1月1日目录一、实验要求......................................................................................................... - 1 -1.基础功能部分 ........................................................................................... - 1 - 2.进阶功能部分 ........................................................................................... - 1 - 3.发散功能部分 ........................................................................................... - 1 - 二、实验分析......................................................................................................... - 2 -1.电路实现要求分析 ................................................................................... - 2 - 2.仿真说明 ................................................................................................... - 4 -1) 开关功能介绍 ....................................................................................... - 4 -2) 程序启动介绍 ....................................................................................... - 5 -3) 程序显示介绍 ....................................................................................... - 5 -三、电路设计和分析............................................................................................. - 7 -1.行驶时间模块设计 ................................................................................... - 7 - 2.行驶里程模块设计 ................................................................................... - 7 - 3.低速行驶费模块 ....................................................................................... - 8 -1) 控制部分 ............................................................................................... - 8 -2) 计数部分 ............................................................................................... - 8 -3) 十进制加法器 ....................................................................................... - 9 -4.普通行驶费用模块 ................................................................................. - 10 -1) 3公里以内控制模块 ........................................................................... - 10 -2) 起步价控制模块 ................................................................................. - 11 -5.总行驶费用模块 ..................................................................................... - 12 -四、实验总结....................................................................................................... - 14 -五、附录............................................................................................................... - 16 -1.元器件数目 ............................................................................................. - 16 - 2.程序图 ..................................................................................................... - 16 -一、实验要求1.基础功能部分1)该实验的行车部分要求实现显示时间、里程数、价格三方面。
课程设计任务书学生姓名:专业班级:指导教师:许建霞工作单位:信息工程学院题目: 出租车计价器的设计与实现初始条件:本设计既可以使用集成译码器、计数器、定时器、脉冲发生器和必要的门电路等,也可以使用单片机系统构建多功能数字钟。
用数码管显示行驶里程、停车时间和计费值。
要求完成的主要任务: (包括课程设计工作量及技术要求,以及说明书撰写等具体要求)1、课程设计工作量:1周。
2、技术要求:1)设计一个出租车计价器。
要求用4位数码管显示行驶里程、停车时间和计费值,采用按键切换显示物理量。
2)出租车的起步价为3元,当里程行驶到1km后,费用为4元;当里程行驶到1.5km后,费用为5元;,当里程行驶到2km后,费用为6元;当里程行驶到2.5km后,费用为7元;当里程行驶到3km 后,费用为8元;此后每公里计费为0.7元/0.5km。
停车每达3分钟,增加0.7元。
3)具有秒、分为60进制计数功能,能显示分、秒停车状态的计时结果,格式为:00:00min。
按照轮胎转动1圈为1m计算,计算并显示行驶的里程结果,格式为:000.0km。
能显示乘车费用,格式为:000.0元。
4)确定设计方案,按功能模块的划分选择元、器件和中小规模集成电路,设计分电路,画出总体电路原理图,阐述基本原理。
3、查阅至少5篇参考文献。
按《武汉理工大学课程设计工作规范》要求撰写设计报告书。
全文用A4纸打印,图纸应符合绘图规范。
时间安排:1、2013年5 月17日,布置课设具体实施计划与课程设计报告格式的要求说明。
2、年月日至年月日,方案选择和电路设计。
3、年月日至年月日,电路调试和设计说明书撰写。
4、2013年7月5日,上交课程设计成果及报告,同时进行答辩。
指导教师签名:年月日系主任(或责任教师)签名:年月日目录1. 1 原理图的设计 (4)1.1方案的选择、比较 (4)1.1.1 方案一 (4)1.1.2 方案二 (5)1.1.3 方案比较选择 (6)1.2 方案二的说明及电路 (6)1.2.1 AT89S52单片机及最小系统 (6)1.2.2 振荡电路 (7)1.2.3 按键单元 (7)1.2.4 显示单元 (8)1.2.5 存储单元 (9)1.3 系统总程序..........................................................................................10 1.3.1系统总程序 (10)1.3.2 行驶路程子程序 (11)1.3.3 等待时间子程序 (12)1.4主要电路图及工作原理 (14)2 仿真结果分析 (15)3 分析测试数据 (16)4收获、体会、建议 (17)5元器件清单 (18)5.1单片机主板BOM清单 (18)5.2 显示部分器件 (19)6 主要参考文献资料 (20)附录一 (22)附录二 (23)摘要随着生活水平的提高,人们已不再满足于衣食住的享受,出行的舒适已受到越来越多人的关注。
时序逻辑电路课程设计引言:我们组选择了题目一,设计出租车计价器,经过对书本、资料查阅,再经过构思,设计,搭建电路,仿真,得出了结果,即使不够完美,不过也掌握了部分知识,增加了对多种原件印象。
下文将具体给出设计。
一、资料查阅经过参考数字电路书本,和数字电路试验书,再经过网络查阅,也参考了网上有类似设计,想出了电路基础思绪。
二、对于要求实现要求1:依据出租车上速度传感器传来脉冲个数和设置里程单价来计算对应总价格,并将总价格经过LED实时显示。
对于此要求实现,经过查阅,我们发觉了74LS160十位计数器,有预制和清零功效,能进行0-9反复计数。
功效表以下要求2:起步价能够设置:。
因为74LS160有置数功效,所以能够置数,能够要求其从一个确定数开始计数,所以能够设置起步价。
对于从要过了起步价里程才开始计数,因为每一个单位里程是一次脉冲,而芯片又是每一次脉冲才记一次数,所以应用触发器存放功效来使前几次脉冲无法传至芯片。
要求3:里程单价能够设置。
利用百分比乘法器,能够实现脉冲改变。
比如用CC4527百分比乘法器,输入一个BCD数,其输出脉冲为输入脉冲BCD十分之一倍。
比如速度传感器每个脉冲为1km,单价为2元,那么就输入20BCD数,那么百分比乘法器就会输出一个2倍速度传感器脉冲脉冲信号,以此脉冲作为后面电路时钟信号,能够实现单价2元。
其它单价以这类推,不过因为仿真软件中没有找到百分比乘法器,所以仿真中没有单价设置这一项。
要求4:能够对总价格进行复位,从而为下次计费做好准备。
利用74LS160置数功效,重新对其进行置数即可实现下次重新开始计费。
三、具体电路时序逻辑:左下角U1为里程脉冲发生器,经过N个D锁存器延时,才能够传至上面74LS160芯片,芯片开始计数,显示在右上方两位显示器上,即计程车价钱。
电路中有两个单刀单置开关,上面S1和下面S2。
S1作用为每次重新搭载乘客后清零和重新显示起步价,S2功效为开启里程传感器,为计程车进行计价。
数字电路模拟电路课程设计--出租车计价器数电课程设计题目:出租车计价器学生姓名:赵婷学号: 210112030110院(系):理学院专业:信息与计算科学指导教师:陈敏歌2011 年 6 月 7 日目录一、设计目的及要求二、使用元件三、计价指示四、总体设计方案1、里程计数及显示2、计价电路3、秒信号发生器及等候计时电路4、里程计数显示单元5、清零复位6、时间等候计数7、复位、秒信号、侯时信号五、计价电路部分六、总体电路设计七、设计心得八、参考文献一设计目的及要求这个系统的主要功能是:1.汽车随着行驶里程的增加,计价器里程数字显示的读数从零逐渐增大,而当行驶到3公里时计费数字显示开始从起步价5元增加。
到达目底地,便可按显示的数字收费。
2.计时功能,当计程车到达某地需要在那里等候时,只要按一下“计时”键,每等候一定时间,计费显示就增加一个该收的等候费用。
当汽车继续行驶时,停止计算等候费,继续增加里程计费。
二使用元件1.NET系列数字电子技术实验系统2.直流稳压电源3.集成电路:74LS74、74LS83、74LS244、74LS290、4060、4518 及门电路4.显示:CL0025.数据开关、按钮、阻容元件若干三计价指标1.按启动键后开始计费。
2.起步价为6元,起步价内行驶里程为3公里。
3.起步价3公里之后,正常行驶速度下每公里2元,小于0.1元不计费。
4.起步价3公里之后,当行驶速度等于或者小于120米/分钟时,不再按距离计费改为按时间计费,每10秒0.1元,小于10秒不计费。
5.起步价(3公里)内只按距离计费,不按时间计费。
6.按下客键后,计价器计费停止,显示总计的车费。
7.关闭启动键后,计价器清零,显示全零。
大于基本下图为计程车计价器控制电路整体框图。
计程车计价器控制电路框图:y 清零Y里程计数器计程车传感信号 候时起动图1计程车计价器控制电路框图如图2所示为出租车计价器控制电路框图译码显示显示 译码显示译码加法器 里程单价候时>=1起步价等候计价器控制电路等候时间信号行驶里程信号等候时间单价(BCD比例乘法器)里程单价(BCD比例乘法器)或门计数,寄存,译码图2 出租车计价器控制电路框图四总体设计方案1里程计数及显示在计程车转轴上加装传感器,以便获得“行驶里程信号”。
西北工业大学课程设计报告题目:简易出租车计价器学院: 电子信息学院班级: 08031001 学生(学号): 窦洋龙(2010301917)学生(学号): 王俊人(2010301907)日期: 2013 年 1 月摘要随着科技的不断发展,有越来越多的科学技术应用到了人们的日常生活中,也给人们的生活带来了很多方便,大家都见过出租车前面都放着一个待显示的计价器,那么它是怎么起到计价功能的呢,其实很简单,只要用现在所学的专业知识就可以自己动手做一个简易的出租车计价器,这里我们还特意加入了等车计价的功能。
在数字电路基础课中学到了好几种计数器芯片,利用这些计数芯片和相关的译码器就可以实现我们的简易计价器的制作。
用同步4位二进制计数器74LS161,四位数值比较器74LS85,二-五-十进制异步计数器74LS90等成该数字系统的设计思想和实现过程。
论述计程模块、计费模块等的设计方法与技巧。
通过该课程设计主要解决与我们平常生活关系密切的出租车计费的问题,且制作该设计所需要元器件的成本较低,适合学生对数字电路的实践所。
关键词:出租车计价器,二进制计数电路,异步计数器,逻辑门电路目录一、课程设计目的 (4)二、设计任务与要求 (4)三、方案设计与论证 (5)四、单元电路设计与参数计算 (7)五、电路的安装与调试 (7)六、遇到问题的解决方法 (8)七、结论与心得 (9)八、参考文献 (10)简易出租车计价器一、课程设计目的1.巩固和加深所学模拟电路基础和脉冲与数字电路基础等课程的基本知识,提高综合运用所学知识的能力;2.培养根据课题需要选用参考书、查阅手册、图表和文献资料的能力,提高独立解决工程实际问题的能力,提高将所学知识真正用于实践的能力,并在实践过程中对知识网络查漏补缺、检验、质疑、创新以加深认识、获得新知;3.通过设计方案的分析比较、设计计算、元件选择及电路安装调试等环节,初步掌握简单实用电路的工程设计方法;4.提高动手能力,掌握常用仪器设备的正确使用方法,学会对简单实用电路的实验调试和对整机指标的测试方法;5.了解与课题有关的电路以及元器件的工程技术规范,能按课程设计任务书的要求编写设计说明书,能正确反映设计和实验成果,能正确绘制电路固等。
数字电路课程设计---出租车里程计价器
作为一门数字电路课程设计,出租车里程计价器是一个重要的练习工程。
出租车里程
计价器是一个可以测量出租车行驶里程的电子装置,可以根据乘客的行驶里程数以及出租
车的费率计算出乘客的费用。
本课程设计将建立一个完整的出租车里程计价器系统,主要
功能是通过按键来记录出租车行驶的里程数,以及能够根据费率计算乘客应付费用。
整个出租车里程计价器系统可以由以下部分构成:键盘和电子计算器、单片机和集成
电路、液晶显示器、晶体管和三极管,以及连接各部分的电路。
针对上述的部件,本课程设计的基本步骤是:首先,在键盘和电子计算器之间建立一
个“实时”的系统,用来记录出租车行驶里程数;其次,建立一个单片机程序,将出租车
行驶里程数和出租车的费率进行比较,并计算出乘客的费用;最后,在晶体管和三极管的
帮助下设计一个显示乘客应付费用的液晶显示器,完成整个出租车里程计价器系统的设计。
总的来说,本课程设计是为了帮助学习者了解和熟悉各种电路,从而让学习者掌握出
租车里程计价器的设计和实现方法。
该课程设计中将用到信号传递、数据存储和运算、信
号采集等多项电路技术,最后将 LPC 1688 单片机实现上述功能,完成一套实用的出租车
里程计价器系统的搭建。
本科课程设计课程名称:数字电路逻辑设计实验项目:出租车自动计费器实验地点:专业班级:学号:学生姓名:指导教师:2012年12 月24日一.设计要求出租车自动计费器是根据客户用车的实际情况而自动显示用车费用的数字仪表。
仪表根据用车起价和行车里程计费2项求得客户用车的总费用,通过数码管子自动显示。
1.设计制作一个自动计费器,具有起价、行车里程计费部分。
用4位数码管显示总的金额,最大值为99.99元。
2.行车里程单价(*.**元/km)、起价(*.**元)均能通过BCD码盘输入。
3.初始值显示“00.00”,通过按键启动/停止、清零显示内容,有等候时间,暂停后可继续计价。
4.起价、起价里程和每公里价格可通过功能键设置,起步价为8元。
二.设计方案出租车计价器分别由里程计数单元,起步价、单价预置开关,加法器,显示及控制触发器等部分组成。
1.行车里程计费起价公里以内,按起步价算;若超过起步价公里,则每走一公里,计价器则加上每公里的单价款。
出租车计价时,开关K合上。
行车里程的计费电路将汽车行驶的里程数转换成与之成正比的脉冲个数,然后又计数译码电路转换成收费金额。
里程传感器可用霍尔传感器在汽车每前进10m闭合一次,即输出一个脉冲信号,实验用一个脉冲源模拟。
若每前进1km,则输出100个脉冲,将其设为P2,然后选用BCD码比例乘法器(如J690)将里程脉冲数乘以一个表示每km单价的比例系数,比例系数可通过BCD码拨盘预置,例如单价是0.5元/km,则预置的两位BCD码为B2=5、B1=0,则计费电路奖励成计费变换为脉冲个数。
P1 =P2(0.1B2+0.01B1),由于P2为100,经比例乘法器运算后是P1为50 给脉冲,及脉冲当量为0.01元/脉冲。
2.起价计费按照同样的当量将起价输入到电路中,其方法可以通过家属器的预置端直接进行数据预置也可以按当量将起价转换成脉冲数,向计数器输入脉冲。
假如设起价是8元,则对应的脉冲数P0=8/0.01=800最后,得到总的行车费用P=P0+P1,经计数译码及显示电路显示结果。
五邑大学数字电路课程设计报告题目:出租车计价器院系信息工程学院专业通信工程学号学生姓名指导教师报告题目:出租车计价器一、题目的要求和意义题目要求:租车计价器使用中小型集成电路和门电路设计出租车计价器要求完成以下功能●使用555定时器产生一个20ms的周期信号作为时钟信号。
●每1s的时间代表行驶1公里,每公里的收费为2元。
●有开始计价的按键和停止计价的按键。
●使用两位数码管动态显示所需收的费用,单位为元。
出租车计价器的设计任务分解成时钟模块、计时显示模块这样两个部分组成,如图1-1所示。
图1-1 出租车计价器框图我负责的是第二部分的即使显示模块。
系统总功能为:第一部分分别产生1s的计数信号和20ms扫频信号。
第二部分接收计数信号,数码管从0开始计数,每秒2的累加。
系统有暂停和复位功能。
意义:随着社会的进步以及人们生活水平的日益提高都促使交通工具的不断变化,无论是在大城市或是中小城市越来越多的出租车公司不断的出现。
出租车的出现方便了人们的生活,对于现在快节奏生活方式的人们来说出租车无疑是最好的交通工具。
那么其收费的方式自然而然就被给予关注,比如收费标准以及行驶里程等。
这时出租车计价器就在乘客和司机之间充当一个重要的角色了。
出租车计价器是乘客与司机双方的交易准则,它是出租车行业发展的重要标志,是租车中最重要的工具。
它关系着交易双方的利益。
具有良好性能的计价器无论是对广大出租车司机朋友还是乘客来说都是很必要的。
因此,汽车计价器的研究也是十分有一个应用价值的。
现在我们就利用中小型集成电路和门电路来设计一个性能可靠、精准度高的出租车计价器。
1.培养学生根据需要选学参考书,查阅手册,图表和文献资料的自学能力,通过独立思考﹑深入钻研有关问题,学会自己分析解决问题的方法。
2.利用所学过的知识,通过设计计算﹑元件选取﹑电路板制作调试等环节,初步掌握工程设计的技能。
3.掌握常用仪表的正确使用方法,学会简单电路的实验调试和整机指标测试方法,使学生巩固和加深对数字逻辑电路的理论知识,锻炼学生的动手能力。
出租车计费器一、实验目的1.了解各元件的基本原理。
2.数字电子技术知识综合运用。
3.学习电路调试的基本结论,巩固扩大所学的知识。
4.熟悉Multisim10基本运用。
二、组要实验器材三、设计任务出租车自动计费器是根据客户用车的实际情况而自动计算、显示车费的数字表。
数字表根据用车起步价、行车里程计费及等候时间计费三项显示客户用车总费用,打印单据,还可设置起步、停车的音乐提示或语言提示。
1.自动计费器具有行车里程计费、等候时间计费和起步费三部分,三项计费统一用4位数码管显示,最大金额为99.99元。
2.行车里程单价设为1.80元/km,等候时间计费设为1.5元/10分钟,起步费设为8.00元。
要求行车时,计费值每公里刷新一次;等候时每10分钟刷新一次;行车不到1km或等候不足10分钟则忽略计费。
3.在启动和停车时给出声音提示。
四、设计方案因为出租车计费器的设计方案不止一种,我们就就涉及数电知识采用计数器电路为主实现自动计费。
分别将行车里程、等候时间都按相同的比价转换成脉冲信号,然后对这些脉冲进行计数,而起价可以通过预置送入计数器作为初值,如图1的原理框图所示。
行车里程计数电路每行车1km输出一个脉冲信号,启动行车单价计数器输出与单价对应的脉冲数,例如单价是1.80元/km,则设计一个一百八十进制计数器,每公里输出180个脉冲到总费计数器,即每个脉冲为0.01元。
等候时间计数器将来自时钟电路的秒脉冲作六百进制计数,得到10分钟信号,用10分钟信号控制一个一百五十进制计数器(等候10分钟单价计数器)向总费计数器输入150个脉冲。
这样,总费计数器根据起步价所置的初值,加上里程脉冲、等候时间脉冲即可得到总的用车费用。
图1 出租车计费器原理框图一上述方案中,如果将里程单价计数器和10分钟等候单价计数器用比例乘法器完成,则可以得到较简练的电路。
它将里程脉冲乘以单价比例系数得到代表里程费用的脉冲信号,等候时间脉冲乘以单位时间的比例系数得到代表等候时间的时间费用脉冲,然后将这两部分脉冲求和。
数字电路实验报告简易出租车计价器班级:学号:姓名:一、设计课题的任务要求设计一台出租车计价器,不同情况具有不同的收费标准基本内容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.设计思路首先考虑得到需要一个分频装置,分别输出频率到计数器与控制器,另有计算单元用来计算里程、时间与费用。
Clk为系统时针,rst、start、waiting分别为重置、开始、等待信号,由按键输入系统流程图三、仿真波形及波形分析四、功能说明及资源利用情况开始行车1、功能说明本次试验成果的主要功能为:开始点阵显示“无人状态”。
按下按键“btn1”(start),计价器开始正常工作,六个数码管每两个分别显示“总费用”“行进里程”“等待时间”,同时点阵显示“载客状态”。
行进里程开始累计,里程数在5公里内总价不变,在超过5公里后,每公里增加两元。
在行进中按下按键“btn2”(waiting),等待时间开始累计,等待时间未超过5s时,等待费用为零,所以总价并不累计。
在等待时间超过5s后,每三秒钟总价加一元。
再次按下按键“btn2”(waiting),停止等待状态,继续行进,状态与上述一样。
再次按下按键“btn1”(start),表示客人到达目的地,数码管显示总价,里程以及总等待时间,即开始结算。
按下按键“btn0”(rst),所以状态清零。
点阵回到无人状态,数码管显示全部清零。
2、资源利用情况五、故障及问题分析本次试验,在实验过程中,发现了众多不同的问题。
其中最恶心的一次就是代码调试的时候,没有任何的语法错误,但是它表示编译不通过,说是逻辑单元有1307个,但是设备只能提供1270个,所以无法通过。
对于这个问题,我实在不知道该怎么解决,最后只有重新写代码,换了一两个结构后发现问题神奇般的解决了。
但我始终不知道原因。
其他的问题都只是代码的语法错误之类的,无需赘言。
六、总结和结论有过上个学期的一些基础知识后,这次的实验并没有太过于手足无措,总的来说还是比较容易上手。
所选的课题逻辑也并不复杂,所以不算太难。
还是比较快的实现了所要求的功能。
虽然最后发现与老师的要求有一些出入,但总体来说,自己还是比较满意的。
因为本次试验所有代码都是自己一个字母一个字母敲出来的,通过与同学们的交流也学到了很多东西,可能也就是因为没有和别的班级同学交流,所以没有达到老师的期望吧!七、源代码(含注释)1、仿真版library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity taxi isport(clk:in std_logic;start:in std_logic;waiting:in std_logic;rst:in std_logic;T0,T1,T2,T3,T4,T5:out std_logic_vector(3 downto 0));end;architecture bhv of taxi issignal count:integer range 0 to 499999999;signal km_clk,sec_clk,en:std_logic;signal c1,c2,tt:integer range 0 to 99;signal await,mile,cost:integer range 0 to 99;signal await_s,await_g,mile_s,mile_g,cost_s,cost_g:integer range 0 to 9;signal rst_clk,start_clk,waiting_clk:std_logic:='0';signal waiting_time:integer range 0 to 99;beginU1:process(rst,start,waiting)--实现按键beginif start 'event and start='1' thenif start_clk='1' thenstart_clk<='0';else start_clk<='1';end if;end if;if waiting'event and waiting='1' thenif waiting_clk='1'thenwaiting_clk<='0';else waiting_clk<='1';end if;end if;end process;u2:process(rst,clk)beginif clk'event and clk='1' thenif rst='0' thenif count=9 then --两秒钟一公里count<=0;km_clk<='1';sec_clk<='1';elsif count=4 then --一秒钟count<=count+1;km_clk<='0';sec_clk<='1';elsecount<=count+1;km_clk<='0';sec_clk<='0';end if;end if;end if;end process;U3:process(rst,start_clk,waiting_clk,km_clk) --里程计数beginif rst='1' thenmile<=0; --按下“rst”后数字清零elsif start_clk='0' thenmile<=mile; --按下“start/stop”后显示总里程elsif waiting_clk='1' thenmile<=mile;elsif km_clk'event and km_clk='1' thenif mile=99 thenmile<=0;elsemile<=mile+1;end if;end if;end process;U4:process(rst,start_clk,waiting_clk,sec_clk) --等待时间计数beginif rst='1' thenawait<=0;waiting_time<=0; --按下“rst”后数字清零elsif start_clk='0' thenawait<=await;elsif waiting_clk='0' thenawait<=0;en<='1';elsif sec_clk ' event and sec_clk='1' thenif await=99 thenawait<=0;elseawait<=await+1;waiting_time<=waiting_time+1;end if;en<='0'; --等待状态end if;end process;U5:process(rst,start_clk,waiting_clk,en) --费用计算beginif rst='1' thencost<=0;c1<=0;c2<=0;tt<=0; --按下“rst”后数字清零elsif start_clk='0' thencost<=cost;c1<=c1;c2<=c2;tt<=tt;elseif waiting_clk='1' then --等待费用if await>=5 then --等待时间超过5s每三秒加收一元c1<=(await-5)/3;elsec1<=0;end if;elseif en'event and en='1' then --运行状态tt<=tt+c1;c1<=0;end if;if mile>=5 thenc2<=13+2*(mile-5); --超过5 公里部分,以每公里2 元收费elsec2<=13;end if;end if;cost<=c1+c2+1+tt; --再加收一元燃油费end if;end process;u6:process(clk)beginawait_s <= await/10;await_g <= await MOD 10;mile_s <= mile/10;mile_g <= mile MOD 10;cost_s <= cost/10;cost_g <= cost MOD 10;case cost_s iswhen 0 =>T0<="0000";when 1 =>T0<="0001";when 2 =>T0<="0010";when 3 =>T0<="0011";when 4 =>T0<="0100";when 5 =>T0<="0101";when 6 =>T0<="0110";when 7 =>T0<="0111";when 8 =>T0<="1000";when 9 =>T0<="1001";end case;case cost_g iswhen 0 =>T1<="0000";when 1 =>T1<="0001";when 2 =>T1<="0010";when 3 =>T1<="0011";when 4 =>T1<="0100";when 5 =>T1<="0101";when 6 =>T1<="0110";when 7 =>T1<="0111";when 8 =>T1<="1000";when 9 =>T1<="1001";end case;case mile_s iswhen 0 =>T2<="0000";when 1 =>T2<="0001";when 2 =>T2<="0010";when 3 =>T2<="0011";when 4 =>T2<="0100";when 5 =>T2<="0101";when 6 =>T2<="0110";when 7 =>T2<="0111";when 8 =>T2<="1000";when 9 =>T2<="1001";end case;case mile_g iswhen 0 =>T3<="0000";when 1 =>T3<="0001";when 2 =>T3<="0010";when 3 =>T3<="0011";when 4 =>T3<="0100";when 5 =>T3<="0101";when 6 =>T3<="0110";when 7 =>T3<="0111";when 8 =>T3<="1000";when 9 =>T3<="1001";end case;case await_s iswhen 0 =>T4<="0000";when 1 =>T4<="0001";when 2 =>T4<="0010";when 3 =>T4<="0011";when 4 =>T4<="0100";when 5 =>T4<="0101";when 6 =>T4<="0110";when 7 =>T4<="0111";when 8 =>T4<="1000";when 9 =>T4<="1001";end case;case await_g iswhen 0 =>T5<="0000";when 1 =>T5<="0001";when 2 =>T5<="0010";when 3 =>T5<="0011";when 4 =>T5<="0100";when 5 =>T5<="0101";when 6 =>T5<="0110";when 7 =>T5<="0111";when 8 =>T5<="1000";when 9 =>T5<="1001";end case;end process;end;2、正式版library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity taxi isport(clk:in std_logic;start:in std_logic;waiting:in std_logic;rst:in std_logic;T:out std_logic_vector(5 downto 0);Y:out std_logic_vector(6 downto 0);col,row:out std_logic_vector(7 downto 0);led0,led1,led2:out std_logic:='0');end;architecture bhv of taxi issignal count:integer range 0 to 499999999;signal km_clk,sec_clk,en:std_logic;signal c1,c2,tt:integer range 0 to 99;signal await,mile,cost:integer range 0 to 99;signal await_s,await_g,mile_s,mile_g,cost_s,cost_g:integer range 0 to 9; signal q:integer range 0 to 9;signal c:std_logic_vector(2 downto 0);signal clk25000:std_logic;signal temp:integer range 0 to 24999;signal rst_clk,start_clk,waiting_clk:std_logic:='0';signal rst1,start1,waiting1:std_logic:='0';signal fd_delay:integer range 0 to 250000;signal waiting_time:integer range 0 to 99;beginu0:process(clk,rst,start,waiting)--防抖动beginif(clk'event and clk='1') thenif rst='1' thenfd_delay<=fd_delay+1;if fd_delay=125000 thenrst1<='1';led0<='1';fd_delay<=fd_delay;else rst1<='0';led0<='0';end if;elsif start='1' thenfd_delay<=fd_delay+1;if fd_delay=125000 thenstart1<='1';fd_delay<=fd_delay;else start1<='0';end if;elsif waiting='1' thenfd_delay<=fd_delay+1;if fd_delay=125000 thenwaiting1<='1';fd_delay<=fd_delay;else waiting1<='0';end if;else fd_delay<=0;end if;end if;end process;U1:process(rst1,start1,waiting1)--实现按键beginif start1 'event and start1='1' thenif start_clk='1' thenstart_clk<='0';led1<='0';else start_clk<='1';led1<='1';end if;end if;if waiting1'event and waiting1='1' thenif waiting_clk='1'thenwaiting_clk<='0';led2<='0';else waiting_clk<='1';led2<='1';end if;end if;end process;u2:process(rst1,clk)beginif clk'event and clk='1' thenif rst1='0' thenif count=49999999 then --两秒钟一公里count<=0;km_clk<='1';sec_clk<='1';elsif count=24999999 then --一秒钟count<=count+1;km_clk<='0';sec_clk<='1';elsecount<=count+1;km_clk<='0';sec_clk<='0';end if;end if;end if;end process;U3:process(rst1,start_clk,waiting_clk,km_clk) --里程计数beginif rst1='1' thenmile<=0; --按下“rst”后数字清零elsif start_clk='0' thenmile<=mile; --按下“start/stop”后显示总里程elsif waiting_clk='1' thenmile<=mile;elsif km_clk'event and km_clk='1' thenif mile=99 thenmile<=0;elsemile<=mile+1;end if;end if;end process;U4:process(rst1,start_clk,waiting_clk,sec_clk) --等待时间计数beginif rst1='1' thenawait<=0;waiting_time<=0; --按下“rst”后数字清零elsif start_clk='0' thenawait<=await;elsif waiting_clk='0' thenawait<=0;en<='1';elsif sec_clk ' event and sec_clk='1' thenif await=99 thenawait<=0;elseawait<=await+1;waiting_time<=waiting_time+1;end if;en<='0'; --等待状态end if;U5:process(rst1,start_clk,waiting_clk,en) --费用计算beginif rst1='1' thencost<=0;c1<=0;c2<=0;tt<=0; --按下“rst”后数字清零elsif start_clk='0' thencost<=cost;c1<=c1;c2<=c2;tt<=tt;elseif waiting_clk='1' then --等待费用if await>=5 then --等待时间超过5s每三秒加收一元c1<=(await-5)/3;elsec1<=0;end if;elseif en'event and en='1' then --运行状态tt<=tt+c1;c1<=0;end if;if mile>=5 thenc2<=13+2*(mile-5); --超过5 公里部分,以每公里2 元收费elsec2<=13;end if;end if;cost<=c1+c2+1+tt; --再加收一元燃油费end if;end process;u6:process(clk)beginawait_s <= await/10;await_g <= await MOD 10;mile_s <= mile/10;mile_g <= mile MOD 10;cost_s <= cost/10;cost_g <= cost MOD 10;if(clk'event and clk='1')thenif(temp=24999)thentemp<=0;clk25000<='1';elsetemp<=temp+1;clk25000<='0';end if;if(clk25000 'event and clk25000 ='1')thenif(c="101")thenc<="000";elsec<=c+"001";end if;if(start_clk='1') thencase c iswhen "101"=>q<=cost_s;when "000"=>q<=cost_g;when "001"=>q<=mile_s;when "010"=>q<=mile_g;when "011"=>q<=await_s;when "100"=>q<=await_g;when others=>null;end case;case c iswhen "000"=>T<="011111";when "001"=>T<="101111";when "010"=>T<="110111";when "011"=>T<="111011";when "100"=>T<="111101";when "101"=>T<="111110";when others=>T<="111111";end case;case q iswhen 0 =>Y<="0111111";when 1 =>Y<="0000110";when 2 =>Y<="1011011";when 3 =>Y<="1001111";when 4 =>Y<="1100110";when 5 =>Y<="1101101";when 6 =>Y<="1111101";when 7 =>Y<="0000111";when 8 =>Y<="1111111";when 9 =>Y<="1101111";when others=>Y<="ZZZZZZZ";end case;case c iswhen"000"=>col<= "11111111";row<="10111111"; when"001"=>col<= "11111111";row<="11011111"; when"010"=>col<= "11000011";row<="11101111"; when"011"=>col<= "11000011";row<="11110111"; when"100"=>col<= "11111111";row<="11111011"; when"101"=>col<= "11111111";row<="11111101"; when others=>col<= "11111111";row<="11111111"; end case;elsecase c iswhen "101"=>q<=cost_s;when "000"=>q<=cost_g;when "001"=>q<=mile_s;when "010"=>q<=mile_g;when "011"=>q<=waiting_time/10;when "100"=>q<=waiting_time MOD 10;when others=>null;end case;case c iswhen "000"=>T<="011111";when "001"=>T<="101111";when "010"=>T<="110111";when "011"=>T<="111011";when "100"=>T<="111101";when "101"=>T<="111110";when others=>T<="111111";end case;case q iswhen 0 =>Y<="0111111";when 1 =>Y<="0000110";when 2 =>Y<="1011011";when 3 =>Y<="1001111";when 4 =>Y<="1100110";when 5 =>Y<="1101101";when 6 =>Y<="1111101";when 7 =>Y<="0000111";when 8 =>Y<="1111111";when 9 =>Y<="1101111";when others=>Y<="ZZZZZZZ";end case;case c iswhen"000"=>col<= "00011000";row<="10111111";when"001"=>col<= "00111100";row<="11011111";when"010"=>col<= "01111110";row<="11101111";when"011"=>col<= "01111110";row<="11110111";when"100"=>col<= "00111100";row<="11111011";when"101"=>col<= "00011000";row<="11111101";when others=>col<= "00011000";row<="11111111";end case;end if;end if;end process;end;。