EDA出租车计价器的设计说明
- 格式:doc
- 大小:615.50 KB
- 文档页数:17
6.7出租车自动计费器设计6.7.1 设计要求设计一个出租车自动计费器,计费包括起步价、行车里程计费、等待时间计费三部分,用三位数码管显示金额,最大值为999.9元,最小计价单元为0.1元,行程3公里内,且等待累计时间3分钟内,起步费为8元,超过3公里,以每公里1.6元计费,等待时间单价为每分钟1元。
用两位数码管显示总里程。
最大为99公里,用两位数码管显示等待时间,最大值为59。
6.7.2原理描述根据层次化设计理论,该设计问题自顶向下可分为分频模块,控制模块计量模块、译码和动态扫描显示模块,其系统框图如图6-63所示,各模块功能如下:图6-63出租车自动计费器系统框图1分频模块分频模块对频率为240的输入脉冲进行分频,得到的频率为16,10和1的三种频率。
该模块产生频率信号用于计费,每个1脉冲为0.1元计费控制,10信号为1元的计费控制,16信号为1.6元计费控制。
2 计量控制模块计量控制模块是出租车自动计费器系统的主体部分,该模块主要完成等待计时功能、计价功能、计程功能,同时产生3分种的等待计时使能控制信号1, 行程 3公里外的使能控制信号0。
其中计价功能主要完成的任务是:行程 3公里内,且等待累计时间3分钟内,起步费为8元;3公里外以每公里1.6元计费,等待累计时间3分钟外以每分钟1元计费;计时功能主要完成的任务是:计算乘客的等待累计时间,计时器的量程为59分,满量程自动归零;计程功能主要完成的任务是:计算乘客所行驶的公里数。
计程器的量程为99公里,满量程自动归零。
3 译码显示模块该模块经过8选1选择器将计费数据(4位码)、计时数据(2位码)、计程数据(2位码)动态选择输出。
其中计费数据4~ 1~送入显示译码模块进行译码,最后送至百元、十元、元、角为单位对应的数码管上显示,最大显示为999.9元;计时数据送入显示译码模块进行译码,最后送至分为单位对应的数码管上显示,最大显示为59秒;计程数据送入显示译码模块进行译码,最后送至以公里为单位的数码管上显示,最大显示为99公里。
EDA课程设计报告--出租车计价器课程设计课程设计名称:出租车计价器专业班级学生姓名:学号:指导教师:课程设计时间:1 设计任务及要求出租车计价器根据乘客乘坐汽车行驶距离和等候时间的多少进行计价,并在行程中同步显示车费值。
从起步开始,行程3公里内,且等待累计时间2分钟内,起步费10元;3公里以外以每公里1.6元计费,等待累计时间2分钟外以每分钟1.5元计费。
并能显示行驶公里数、等待累计时间、总费用。
设计的主要技术指标:(1)计价范围:0—999.9元计价分辨率:0.1元(2)计程范围:0—99公里计程分辨率:1公里(3)计时范围:0—59分计时分辨率:1分本次设计中假设出租车的速度传感器具有出租车每行驶1Km提供1000个脉冲信号的特性。
当行驶速度小于等于6KM/h时为等待。
本设计的最终任务是显示出租车的等待时间和行驶里程,并计算出所需费用。
根据要求需要进行如下分工,首先要有一个分频模块(FPQ)产生系统工作用的基准信号1HZ,供系统中的有关模块计时用。
其次要有一个判断等待与否的模块(DDPB),再者就是要有计时和计程模块(DDSJ和LCJS),最后要有计费模块和显示译码模块(JFZ和YIMA)。
2设计原理及总体框图(1)设计总体框图图1总设计框图(2)设计总原理图图2设计总原理图设计总原理:测控FPGA芯片通过采集速度传感器脉冲信号WCLK进行行驶里程计算,利用外部脉冲信号CLK1产生标准时钟信号,用来计算等待时间,最后根据行驶里程、等待时间来计算计价值。
并用译码电路显示行驶里程、等待时间和计价值。
3 程序设计1.VHDL语言简单介绍VHDL语言(VHSIC Hardware Description Language,甚高速集成电路硬件描述语言)是一种设计、仿真、综合的标准硬件描述语言,是对可编程逻辑器件进行开发与设计的重要工具,其优点是:支持自上而下和基于库的设计,支持范围广,具有多层次描述系统硬件功能的能力。
eda课程设计出租车计费器计程车计费器近年来,随着出行需求的增加,计程车成为现代都市生活中不可或缺的交通工具。
然而,随之而来的问题是如何准确计算乘客的乘车费用,以避免价格争议和不公平的情况发生。
因此,设计一个高效准确的出租车计费器成为了必备的需求。
本文将介绍一个EDA课程设计的出租车计费器,并详细阐述其功能和设计理念。
首先,出租车计费器需要具备自动计算乘车时间和里程的功能。
乘客上车后,计费起始点记录下当前的时间和里程数,当乘客下车时,计费器会根据乘车时间和里程数自动计算出乘车费用。
这样的设计方案使得计费过程更加便捷,无需司机或乘客自行计算费用,提升了计费的准确性和公正性。
其次,出租车计费器还需要考虑不同的计费规则和策略。
在不同地区和国家,计费规则可能会有所不同。
例如,在某些地方,计费可能以里程为主,而在另一些地方,计费可能以时间为主。
因此,计费器需要能够灵活调整计费策略,以适应不同的地区和客户需求。
除了基本的计费功能,出租车计费器还可以增加一些附加功能,以提升用户体验。
例如,可以添加语音导航功能,为乘客提供实时导航路线,让乘客更加便捷地到达目的地。
同时,也可以添加多种支付方式,如现金、刷卡、移动支付等,以满足不同乘客的支付需求。
这些附加功能的添加可以为乘客提供更加便利的乘车体验,提升出租车的竞争力。
此外,出租车计费器还需要注重安全性和可靠性。
计费器需要具备防伪造和防篡改功能,以防止不法分子通过篡改计费器数据来进行欺诈行为。
同时,计费器需要保证数据的准确性和可靠性,以便相关部门对出租车运营情况进行监管和统计。
这些安全性和可靠性的保障是出租车计费器设计的重要组成部分。
总之,EDA课程设计的出租车计费器是一个非常重要的工具,它能够准确计算乘车费用,提升用户体验,保证计费的公正性和准确性。
设计一个高效准确的出租车计费器是一个复杂的过程,需要考虑到不同地区和国家的计费规则,同时也需要注重安全性和可靠性。
希望通过持续的研发和创新,能够设计出更加先进的出租车计费器,为乘客提供更好的出行体验。
1.出租车计费器的总体设计1.1 出租车计费设计该出租车计费器按下开关S1后开始计费和计里程数,分为白天和夜晚。
当拨动开关K2为0时,系统使用程序设置的起步价,白天起步价是3元,准行2公里,以后2元/公里;夜晚起步价是9元,准行2公里,以后3元/公里。
当拨动开关K2为1时,可由矩阵键盘输入起步价0~9元。
当路程大于200公里时,价格会在原来的基础上加50元。
1.2 基本设计思想时钟输入为一个1KHz的系统时钟,直流电机模块每转一圈输出一个脉冲信号给CPU,另外用按键模块的S1 来作为整个系统的复位按钮,每复位一次,计费器从头开始计费。
直流电机模块用来模拟出租车的车轮子,每转动一圈认为是行走1 米,所以每旋转1000 圈,认为车子前进1 公里。
系统设计是需要检测电机的转动情况,每转1000圈,分频模块输出一个下降沿信号。
车费和里程数在一个8位7段数码管上显示,前4位显示里程,后4位显示费用。
路程的单价由16*16点阵显示,拨动开关K1为0时,2元/公里,点阵显示2;拨动开关K2为1时,3元/公里,点阵显示3。
2.出租车计费器的总体实现2.1 系统总体框图该出租车计费器由一个VHDL程序构成,不同功能的实现分别是多个进程控制,主要进程有:分频模块进程:将每1000个电机脉冲转化为1个输出脉冲;计程模块进程:记录已行里程;计费模块进程:计算应付车费;4*4矩阵键盘进程:设置起步价;数码管显示进程:将已行里程和应付车费显示在数码管上; 16*16点阵显示进程:显示当前状态的每公里单价。
图2-1 系统框图2.2 程序流程图(2)计程模块图2-3 计程模块(3) 计费模块图2-4 计费模块2.3 出租车计费器各功能的实现(1)分频模块:直流电机motor每输出1000个脉冲,分频器glclk输出一个下降沿脉冲,表示电机已走1公里,meter1加1.if rst='0' thencount<=0;temp<='0';elsif (motor'event and motor='1') thenif count>499 thencount<=0;temp<=not temp;elsecount<=count+1;end if;end if;glclk<=temp;(2)计程模块:glclk的下降沿来临时,路程的个位加1,满9往高位进一,同时低位归0。
eda课程设计出租车计费器一、引言随着城市化进程的加速,出租车已成为人们出行的重要交通工具之一。
出租车计费器作为出租车运营的核心设备,其设计的合理性和精确性直接关系到乘客和司机的利益。
因此,设计一款高效、准确的出租车计费器具有重要的实际意义。
本次EDA课程设计,我们以出租车计费器为研究对象,对其进行模拟设计。
二、计费器功能需求分析出租车计费器应具备以下基本功能:1.起步价计费:按照规定的起步价格进行计费。
2.里程计费:根据行驶里程计算费用,一般按每公里单价进行累加。
3.等待时间计费:在等待或红绿灯等情况下,应按设定的单价计算费用。
4.计费显示:将乘客应支付的总费用实时显示在计费器上。
5.声音提示:在计费过程中,应有声音提示,如“谢谢”等。
6.夜间服务费:在夜间或特殊时间段,可设定额外服务费用。
7.故障保护:当计费器出现故障时,应能够自动进入保护模式,停止计费。
三、计费器系统设计基于上述功能需求,我们设计了以下出租车计费器系统:1.主控模块:采用微控制器作为核心控制单元,负责接收传感器信号、计算费用、控制显示和声音输出等功能。
2.里程传感器:用于检测出租车的行驶里程,一般通过轮速传感器实现。
里程数据被传送到主控模块进行计算。
3.时间传感器:用于检测出租车的运行时间,可选用霍尔传感器等实现。
时间数据也需传送到主控模块进行处理。
4.显示模块:选用液晶显示屏(LCD),用于显示总费用、行驶里程、时间等信息。
通过主控模块驱动LCD显示。
5.声音提示模块:选用蜂鸣器作为声音输出设备,由主控模块控制发出提示音。
6.夜间服务费模块:通过软件编程实现夜间服务费的设定和计算。
主控模块根据时间传感器信号判断是否进入夜间模式。
7.故障保护模块:在系统检测到故障时,如计费器出现异常过热或长时间无里程/时间信号,主控模块将自动进入保护模式,停止计费并发出报警信号。
四、计费算法设计根据上述功能需求和系统设计,我们采用以下计费算法:1.起步价费用 = 起步价 * 计费时间(3分钟)2.里程费用 = 每公里单价 * 行驶里程3.等待时间费用 = 单价 * 等待时间(秒)4.总费用 = 起步价费用 + 里程费用 + 等待时间费用 + 夜间服务费(如有)5.每公里单价、起步价、等待时间单价、夜间服务费等参数均可根据实际需求进行设定。
姓名满眼皆是繁华指导教师:2013 年 7 月 8 日实训题目:出租车计费器的设计1 系统设计1.1 设计要求1.1.1 设计任务设计并制作一台出租车计费器。
1.1.2 性能指标要求①用EDA实训仪的I/O设备和PLD芯片实现出租车计费器的设计。
②出租车起步开始计程和计费,计程系统按实际公里数计程,计费系统首先显示起步价(如7.0),车行驶2km以内,只收起步价7元。
③出租车行驶超过2km后,按增加的每公里1.6元在7.0元的基础上增加。
④出租车行驶超过10km后(或超过20元路费),每公里加收50%的车费,即车费变为每公里2.4元。
⑤出租车达到目的地后,(用一个按钮)计程和计费数据清零,为下一次计费开始。
1.2 设计思路及设计框图出租车计费器的整体结构包括:分频模块,计数模块,计费模块。
另外我还加了扩展功能:选择模块,计时模块。
不计价时,可以切换到显示时分秒。
这个功能需要选择模块和计时模块共同来实现。
通过分频模块产生一个脉冲信号模拟汽车的启动与停止,然后通过计数模块,计算出一共所行驶的路程,最后通过记价模块,将所行驶的路程计算出相对应的价钱。
计费显示起步价7元,2km之内为起步价,以后每1km在起步价7元的基础上增加1.6元;超过10km以后,每1km增加2.4元。
通过数学公式计算出费用,这就是费用计算模块。
结合生活中的出租车计费器,分别有3km以内,10km以内以及超过10Km 以后的计费标准。
我设计用拨码开关来实现清零与车速的转换,并通过数码管来显示路程与车费。
车轮每转一圈就是一个脉冲,因此,脉冲频率的快慢就是车速的快慢,这就是车速的计算;把车轮每转一圈 4米的话,每来一个脉冲路程就加4米,这就是路程的计算;当路程的百位向千位进位时就产生一个脉冲也就是路程又走了1公里。
于是便实现了车行驶3km以内,只收起步价7元。
行驶超过3km后,按每公里1.6元在7.0元的基础上增加。
行驶超过10km后(或超过20元路费),每公里加收50%的车费,即车费变为每公里2.4元。
eda出租车计费器设计总结EDA出租车计费器设计总结引言在现代都市生活中,出租车已经成为人们出行的重要交通工具之一。
为了保证乘客和司机的权益,出租车计费器的设计显得尤为重要。
本文将对EDA出租车计费器的设计进行总结和说明。
一、计费模式的选择EDA出租车计费器采用了基于距离和时间的复合计费模式。
这种模式能够更准确地反映出乘客乘坐出租车的实际消费情况,同时也能够保证司机的收入。
二、计费规则的制定1. 距离计费规则:EDA出租车计费器根据乘客的行程距离进行计费。
起步价为10元,包含了2公里的距离。
超过2公里后,每增加1公里加收2元。
这样的计费规则既能够保证司机的基本收入,又能够避免乘客因短途行程而支付过高的费用。
2. 时间计费规则:在乘客在行程过程中遇到交通拥堵等情况时,EDA出租车计费器会根据乘客在车上的时间进行计费。
每分钟加收0.5元,以此来弥补司机因交通拥堵而浪费的时间和精力。
三、计费器的显示和操作1. 显示屏:EDA出租车计费器配备了大尺寸的液晶显示屏,能够清晰地显示乘客的行程信息和当前的计费金额。
显示屏还会提示乘客是否需要打印行程发票。
2. 操作按钮:计费器上设有简洁明了的操作按钮,乘客可以根据需要选择打印发票、查询行程历史等功能。
四、人性化设计1. 声音提示:EDA出租车计费器设置了人性化的声音提示功能,例如乘客上车后会有欢迎提示音,乘客下车后会有计费金额的语音播报等,这样能够提升乘客的使用体验。
2. 灵敏度调节:计费器的控制面板上还设置了灵敏度调节按钮,乘客可以根据自己的需求,自行调节按键的灵敏度,以便更好地操作计费器。
五、结算方式EDA出租车计费器支持多种支付方式,包括现金支付、刷卡支付、二维码支付等。
这样的设计能够方便乘客进行结算,提高支付的便捷性。
六、结论通过以上的总结和说明,可以看出EDA出租车计费器的设计考虑了乘客和司机的实际需求,既能够保证司机的收入,又能够提供方便快捷的支付方式给乘客。
燕山大学EDA课程设计报告书题目:出租车计价器姓名:班级: 12级通信工程1班学号:成绩:一、设计题目及要求要求:1.2 Km起计价,起始价5元,每公里1.2元;2.传感器输出脉冲为0.5m/个(用适当频率的时钟信号代替即可);3.每0.5km改变一次显示,且钱数提前显示(例如运行到2Km时,应显示5.6元);4. 分别用三位数码管显示公里数和钱数,另可设置其他必要的按钮。
二、设计过程及内容1.题目分析该题模拟出租车计价器,显示路程及对应价格,要求每经0.5km更新显示,传感器输出脉冲为0.5m/个,即每经过1000个脉冲,路程增加了0.5km,价格增加0.6元。
其中,价格起始价5元,即需要价格在路程2km 之前显示固定值5元。
二者分别用三位数码管显示,分析可知,路程的小数位显示0或5,在5→0时,向个位进位;价格的小数位依次显示6、2、4、8、0,在6→2,8→4,4→0的转变中,产生进位,价格的个位从起始价5开始计数。
2.设计总述依据设计要求出租车计价器型可分为四个模块:分频模块,路程计数模块,价格计数模块和二者的显示模块。
①分频模块分频模块功能是每经过1000个脉冲,即0.5km,输出一个脉冲信号,并且产生一控制输出,该控制信号在2km前,输出为0,而在2km处及2km之后输出1,该控制信号控制价格计数器从2km处开始累加钱数。
②路程计数模块路程计数模块的功能是显示路程,路程包含了十位,个位和小数位,其中,小数位显示0或5,并在固定位置5→0处向个位进位,十位个位为常规0~99计数器。
③价格计数模块价格计数模块的功能是显示与路程对应的价格,且价格提前显示。
价格同样包含十位,个位和小数位,其中小数位依次显示6、2、8、4、0,并在6→2,8→4,4→0时,向个位产生进位,价格的个位为从5开始计数的10进制计数器,在9→0时产生向十位的进位,十位是常规的0~9计数器。
④路程、价格显示模块路程、价格显示模块的功能是使用试验箱中的6个数码管(编号为1~6的数码管)显示路程和价格,使用编号为3、2、1的数码管显示路程,使用编号为6、5、4的数码管显示价格。
目录1引言 (1)2 EDA技术简介 (2)3 VHDL语言简介 (3)4 设计要求及其背景 (5)5 系统设计 (6)5.1分频模块 (6)5.2 控制模块 (6)5.3 计量模块 (6)5.4 译码显示模块 (6)6 软件调试及硬件仿真 (8)6.1 软件调试 (8)6.2 硬件连接及调试 (10)7 结束语 (11)参考文献 (12)附录 (13)1引言出租车是现代人类的重要交通工具,而出租车的计费系统的安全性和先进性是人们普遍关心的问题,要求计费器性能稳定,计费准确,以及预防司机作弊行为等等都关系到乘客的切身利益。
因此,设计出符合人们普遍要求及放心的产品具有重要的意义。
本设计采用Altera公司的QuartusⅡ软件作为开发平台,以VHDL作为程序设计设计的语言,设计了出租车计费器系统的程序,并进行了程序仿真。
使其实现了计费、计时和记录行车里程的功能,并利用动态扫描显示车费总额。
计费系统在各大、中城市出租车中使用越来越广泛。
针对现有计费系统通用性差的缺陷,采用VHDL语言可以开发出租车计费系统,该计费系统的可靠性高,成本低,通用性强。
该系统在不改变硬件电路的前提下,具有可以重建系统的功能,采用完全相同电路结构,只要根据各地区的需求在VHDL程序中设置个别参数,就可以适应各地区出租车不同计费标准的需要,还可根据各地区需求增加其他功能。
2 EDA技术简介EDA是电子设计自动化(Electronic Design Automation)的缩写,在20世纪90年代初从计算机辅助设计(CAD)、计算机辅助制造(CAM)、计算机辅助测试(CAT)和计算机辅助工程(CAE)的概念发展而来的。
EDA技术就是以计算机为工具,设计者在EDA软件平台上,用硬件描述语言HDL完成设计文件,然后由计算机自动地完成逻辑编译、化简、分割、综合、优化、布局、布线和仿真,直至对于特定目标芯片的适配编译、逻辑映射和编程下载等工作。
EDA技术课程设计任务书1 概述 (1)2 总体设计 (2)2.1 设计要求 (2)2.2 设计思路 (2)2.3 设计流程图 (2)2.4 总体设计封装图 (4)2.5 各信号说明 (4)3 模块设计 (5)3.1秒分频模块 (5)3.2控制模块 (5)3.3计量模块 (5)3.3.1计价部分 (5)3.3.2计时部分 (5)3.3.3计程部分 (5)3.4译码显示模块 (5)4程序调试运行 (6)5硬件验证 (8)5.1引脚锁定 (8)5.2硬件验证情况 (8)6 总结及体会 (9)参考文献 (10)附录(程序源代码) (11)随着我国国民经济生产总值的增加以及人民生活水平的提高,各大中小城市的出租车营运事业发展迅速,出租车已经成为人们日常出行选择较为普通的交通工具。
出租车计价器是出租车营运收费的专用智能化仪表,是使出租车市场规化、标准化的重要设备。
一种功能完备,简单易用,计量准确的出租车计价器是加强出租车行业管理,提高服务质量的必需品。
本设计采用VHDL硬件描述语言作为设计手段,采用自顶向下的设计思路,得到一种出租车计价系统的软件结构,通过QuartusⅡ软件下进行仿真,证明所设计的电路系统完成了出租车计价的功能,各项指标符合设计要求。
该设计虽然功能简单,智能化水平比较低,但仍具有一定的实用性。
该设计是在VHDL的基础上对出租车计价器进行设计来实现其基本功能的,与以往的基于单片机的数模混合电路相比,FPGA具有稳定性好、抗干扰能力强、电路实现简单、程序简单等优点,且非常适合做为出租车计价器的控制核心,所以选择用VHDL来对计价器进行设计来实现其功能。
出租车计价器的实现将大大改善人们出行时因为讨价还价而带来的烦恼,从而使人们的心情比较愉悦。
本设计是对出租车计价器的四个模块进行分析的,综述如下:分频模块:分频模块是其它模块的基础,输入时钟选为32Hz,分频后的时钟频率为1Hz,为后续模块提供基本时钟。
等待时间模块:该模块针对乘客确认下车前的等待而言,比如堵车、中途下车的情况,通过1Hz脉冲计数,每一分钟计时加一,最大计时时间显示为99分钟。
路程模块:该模块是对车辆行驶路程进行计数,以1Hz时钟为基础,检测行程脉冲,路程模块中有部变量来判断路程,当大于3公里、20公里时,分别有相应的使能信号对此作出记录,最大路程显示为99公里。
计费模块:该模块是基于等待时间模块和路程模块对费用进行控制的。
通过部使能信号分别计算3公里以、3-20公里以及20公里以后的费用。
本设计是基于VHDL进行编程,然后在Qu artusⅡ进行波形仿真,实现出租车计价器的基本功能。
2 总体设计2.1 设计要求(1)起步价为8.00元,起步公里为3公里;(2)超过3公里,每公里按1元收费;(3)单程行驶里程超过20公里,每公里租价加收50%;(4)等候时间超过1分钟,每分钟按这公里的租价计算。
要求显示里程、计费及等候时间。
乘客上车后,按下启动键,开始计费,除非同一乘客往返用那个车,否则按下单程键,这样行驶里程超过20公里时,每公里加收50%,既每公里租费1.5元;计费显示为3位整数、1位小数。
2.2 设计思路输入2个时钟信号,分别模拟时间和路程。
对等待时间、路程计数,进而统计费用。
系统结构框图如图2-1。
图2-1自动计价器的系统方框图 上图中,计数器1对分频后的1Hz 脉冲计数,计数60次,计数器加1,对应等待时间,计数器2对车速脉冲计数,其上升沿到来计数加1,对应里程。
2.3 设计流程图设计流程图如图2-2所示。
控制器图2-2系统设计流程图乘客上车后,按下启动按钮,计价器开始工作,首先进入初始化状态,即计程从0开始,计费从8开始。
再根据单程信号判断是否为单程,进而确定计费方式。
单程:里程计数器开始计数,当路程超过3公里时,计费开始累加,按1元每公里计算,路程超过20公里时每公里1.5元。
当路程超过3公里有等待时,按下等待信号,每等待1分钟费用与当前计费方式相同。
往返:每公里1元,等待计费为每分钟1元。
乘客下车后,按下复位键,则所有计数器进入初始状态。
2.4 总体设计封装图总体设计封装图如图2-3所示。
图2-3 系统封装图2.5 各信号说明输入信号: clk:系统时钟信号;mile:车速时钟;start::启动信号,当start=1时,出租车启动,计数器开始计数;否则计数器停止计数;single:单程信号,单程时由司机输入;stop:等待信号,处于等待状态时由司机输入;输出信号:km1,km2:里程,单位为公里;min1,min2:等待时间,单位为分钟;price1,price2,price3,price4:费用,单位为元,其中price1表示小数位。
3 模块设计3.1秒分频模块秒分频模块对频率为240Hz的输入脉冲进行分频,得到的频率为16Hz,15Hz 和1Hz的三种频率。
该模块产生频率信号用于计费,每个1HZ脉冲为0.1元计费控制,15HZ信号为1.5元的计费控制,16Hz信号为1.6元计费控制。
3.2控制模块控制模块是系统的核心部分,对计价器的状态进行控制。
3.3计量模块计量模块完成计价、计时、计程功能。
3.3.1计价部分行程3公里,起步费为8元;3公里外以每公里1元计费,等待累计时间1分钟外以每分钟1元计费。
20公里外以每公里1.5元计费,等待累计时间1分钟外以每分钟1.5元计费。
计费数据送入显示译码模块进行译码,最后送至以百元、十元、元、角为单位对应的数码管上显示。
3.3.2计时部分计时部分用于计算乘客的等待累计时间。
计时器的量程为59分,满量程自动归零。
即时数据送入显示译码模块进行译码,最后送至以分为单位对应的数据管上显示。
3.3.3计程部分计程部分用于计算乘客所行使的公里数。
计程器的量程为99公里,满量程自动归零。
计程数据送入显示译码模块进行译码,最后送至以公里为单位对应的数据管上显示。
3.4译码显示模块译码显示模块完成计价、计时、计程数据显示。
该模块经过8选1选择器将计费数据(4位BCD码)、计时数据(2位BCD码)、计程数据(2位BCD码)动态选择输出。
其中计费数据送入显示译码模块进行译码,最后送至百元、十元、元、角为单位对应的数码管上显示,最大显示为999.9元;计时数据送入显示译码模块进行译码,最后送至分为单位对应的数码管上显示,最大显示为99分钟;计程数据送入显示译码模块进行译码,最后送至以公里为单位的数码管上显示,最大显示为99公里。
4程序调试运行图4-1 单程行驶示意图启动键、单程键有效,由图4-1可知,3公里之计费显示为8元;3-20公里之间每公里1元累计;超过20公里每公里1.5元累计。
图4-2 单程行驶中途等待示意图启动键、单程键有效,行驶一段时间等待信号有效,等待后继续行驶。
由图4-2可知,3公里之计费显示8元,3-20公里之间每公里1元累加,中间等待信号有效,每等待一分钟按此时每公里的费用计算,里程计数器停止计数,等待时间到,里程计数器继续计数。
图4-3 单程行驶到达目的地示意图启动键、单程键有效,乘客到达目的地下车。
如图4-3所示。
图4-4 双程行驶示意图启动键有效,乘客乘车完成双程行驶。
由图4-4可知,3公里之计费显示为8元;3-20公里之间每公里1元累计;超过20公里每公里1元累计。
5硬件验证5.1引脚锁定做硬件验证之前需要清楚实验板上各键与各信号的情况,参照资料得出本设计中各引脚的对应情况如下,本设计下载时选择模式5。
引脚锁定如图5-1。
图5-1 引脚锁定图5.2硬件验证情况做好引脚锁定后,打开硬件箱的电源,数码管有正确的数字显示,硬件箱与计算机开始验证。
操作运行实验结果完全符合要求。
通过仿真验证表明,本文所设计的出租车计价器能够正常地显示行驶的里程数和乘客应付的费用,符合预定的计费标准和功能要求。
6 总结及体会通过为期一周的课程设计,出租车计价器系统的设计已基本完成,能按预期的效果模拟汽车启动、等待、停止、复位等功能,并显示车费数目等待时间及行驶路程。
出租车计费系统的设计中体现了VHDL覆盖面广,描述能力强,是一个多层次的硬件描述语言及CPLD器件速度快,使用方便,便于修改等特点,本设计在实用方面具有一定的价值。
在本次设计中还存在很多不足,可以改进的地方目前有以下几点:一、该设计虽然实现了基本的计费和计程,但是很多问题并没有解决,如本设计只实现了一种车速的计费。
若要实现出租车的不同档位下的计程计费,还需要进一步讨论。
二、该设计智能化水平较低,启动、等待、复位等信号需要人为输入,若在实际中出现操作偏差,会导致计费不准确。
通过此次课程设计,我们更进一步的深入了解了VHDL设计语言,并在使用过程中对它有了更深的体会。
对编程过程中可能遇到的问题有了一定的了解和解决方法,在理论学习和编程练习以及硬件测试方面都获得了较大的收获,对于今后进行程序设计有很大的帮助。
期间要感我的老师的悉心指导以及同学们的大力帮助。
在此次设计过程中确实遇到了很多困难,但是再大的困难只要有勇气去征服它,那就不是什么困难了。
此外,通过本次课程设计,我还有了一定的对学习上的体会,知识的真实魅力其实是在于它因为应用于实践中而产生的实际的生产价值,或者说是给人们带来的巨大的方便,因为它有用了所以我们学起来会更有动力,更能往深里去研究。
参考文献[1] Volei A. Pedroni. 《VHDL数字电路设计教程》.电子工业,2010.[2] 松,黄继业.《EDA技术实用教程》.科学,2010.6.[3] 江海.《EDA技术课程设计》.华中科技大学,2009.5.[3] 鲍可进,念强,不贿等.《数字逻辑电路设计》.清华大学,2004.[4] 王道宪,贺名臣,伟.《VHDL电路设计技术》.国防工业,2004.[5] 黄仁欣.《EDA技术实用教程》.清华大学,2006.[6] 徐向民.《数字系统设计及VHDL实践》.机械工业,2007.附录(程序源代码)出租车计价器源程序library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity hu isport(clk:in std_logic;start,single:in std_logic;stop,mile:in std_logic;min1,min2:out std_logic_vector(3 downto 0);km1,km2:out std_logic_vector(3 downto 0);price1,price2,price3,price4:out std_logic_vector(3 downto 0)); end;architecture bhv of hu issignal start_r:std_logic;signal clk1hz:std_logic;signal q:integer range 0 to 299;signal second:integer range 0 to 59;signal p1,p2,p3,p4:std_logic_vector(3 downto 0);signal k1,k2:std_logic_vector(3 downto 0);signal m1,m2:std_logic_vector(3 downto 0);signal en0,en1,f_wait,f:std_logic;beginmin1<=m1; min2<=m2;km1<=k1; km2<=k2;price1<=p1; price2<=p2;price3<=p3; price4<=p4;U1:process(clk)beginif(clk'event and clk='1')thenif q=255 thenq<=0;clk1hz<='1';elseq<=q+1;clk1hz<='0';end if;end if;end process;U2:process(clk1hz)beginif start='0' thenf_wait<='0';m1<="0000";m2<="0000";elsif(clk1hz'event and clk1hz='1')then if stop='1' thenif second=6 thensecond<=0;f_wait<='1';if m1="1001" thenm1<="0000";if m2="0101" thenm2<="0000";elsem2<=m2+'1';end if;elsem1<=m1+'1';end if;elsef_wait<='0';second<=second+1;end if;elsef_wait<='0';end if;end if;end process;U3:process(clk1hz)beginif(clk1hz'event and clk1hz='1')thenstart_r<=start;end if;end process;f<=f_wait when stop='1' elsemile when en0='1' else'0';U4:process(start,mile)beginif start='0' thenk1<="0000"; k2<="0000";en0<='0'; en1<='0';elsif(mile'event and mile='1')thenif stop='0' thenif k1="1001" thenk1<="0000";if k2="1001" thenk2<="0000";elsek2<=k2+'1';end if;elsek1<=k1+'1';end if;if k1="0011" thenen0<='1';end if;if k2="0001" and k1="1001" and single='1' then en1<='1';end if;elsek1<=k1;k2<=k2;end if;end if;end process;U5:process(start,f)beginif start='0' thenp1<="0000";p2<="0000";p3<="0000";p4<="0000";elsif start='1' and start_r='0' then p1<="0000";p2<="1000";p3<="0000";p4<="0000";elsif(f'event and f='1')thenif en1='0' thenif p2="1001" thenp2<="0000";if p3="1001" thenp3<="0000";if p4="1001" thenp4<="0000";elsep4<=p4+'1';end if;elsep3<=p3+'1';end if;elsep2<=p2+'1';end if;elseif(p1="0101" and p2="1000") or p2="1001" then if(p2="1001" and p1="0101")thenp1<="0000";p2<="0001";elsif(p2="1001" and p1="0000") thenp1<="0101";p2<="0000";elsif(p2="1000" and p1="0101")thenp1<="0000";p2<="0000";end if;if p3="1001" thenp3<="0000";if p4="1001" thenp4<="0000";elsep4<=p4+'1';end if;elsep3<=p3+'1';end if;elsif p1="0000" thenp1<="0101";p2<=p2+'1';elsep1<="0000";p2<=p2+"0010";end if;end if;end if;end process;end bhv;。