整理出租车计费系统的设计好.docx
- 文档编号:350893
- 上传时间:2022-10-09
- 格式:DOCX
- 页数:16
- 大小:293.41KB
整理出租车计费系统的设计好.docx
《整理出租车计费系统的设计好.docx》由会员分享,可在线阅读,更多相关《整理出租车计费系统的设计好.docx(16页珍藏版)》请在冰豆网上搜索。
整理出租车计费系统的设计好
1.所选题目:
出租车计费器
2.设计要求:
设计一个出租车计费器,能按路程计费,具体要求如下:
(1)实现计费功能,计费标准为:
按行驶里程计费,起步价为7.00元,并在汽车行驶2km后按1.2元/km计费,当里程数达到15km后,没千米加收50%的空驶费,车辆停止和暂停时不计费。
(2)现场模拟汽车的启动、停止、暂停和换挡等状态。
(3)设计数码管显示电路,将车费和路程显示出来,各有1位小数。
3.设计原理:
设计该出租车有启动键、停止键、暂停键和档位键。
启动键为脉冲触发信号,当其为一个脉冲时,表示汽车已启动,并根据车速的选择和基本车速发出相应频率的脉冲(计费脉冲)以此来实现车费和路程的计数,同时车费显示起步价;当停止键为高电平时,表示汽车熄火,同时停止发出脉冲,此时车费和路程计数清零;当暂停键为高电平时,表示汽车暂停并停止发出脉冲,此时车费和路程计数暂停;档位键用于改变车速,不同的档位对应着不同的车速,同时路程计数的速度也不同。
4.模块设计:
出租车计费器可分为两大模块,即控制模块和译码显示模块。
系统框图如下:
5.电路符号:
出租车计费器的输入信号有:
计费时钟脉冲clk;汽车启动键start;汽车停止键stop;档位speedup。
输出信号:
7段显示控制信号seg7;小数点dp。
6.具体设计流程:
(1)根据出租车计费原理,将出租车计费部分由5个计数器来完成分别为counterA,counterB,counterC,counterD,counterE。
①计数器A完成车费百位。
②计数器B完成车费十位和个位。
③计数器C完成车费角和分(显示时只显示角)。
④计数器D完成计数到20(完成车费的起步价)。
⑤计数器E完成模拟实现车行驶100m的功能。
(2)当超出起步价时就自动在起步价的基础上每增加一个100m脉冲就增加相应的费用,而当总里程达到或超过一定的数值时,能按新的收费标准进行收费。
(3)译码/动态扫描电路模块将路程与费用的数值译码后用动态扫描的方式驱动6只数码管,即所连接的数码管共用一个数据端,由片选信号依次选择输出,轮流显示。
(4)数码管显示将千米数和计费金额均用3位LED数码管显示(2位整数,1位小数)。
7.具体模块设计:
7.1车速控制模块
当启停键为启动状态(高电平时),模块根据车速选择和基本车速发出响应频率的脉冲驱动计费器和里程显示模块进行计数;当处于暂停状态,暂停发出脉冲,此时里程计数模块和计费模块相应地停止计数。
当处于停止状态时,停止发出脉冲,此时计费器和里程显示模块数清零。
如图所示。
程序代码:
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYSPEEDIS
PORT(
CLK,RESET,START,STOP:
INSTD_LOGIC;
SPEEDUP:
INSTD_LOGIC_VECTOR(4DOWNTO0);
CLKOUT:
OUTSTD_LOGIC
);
ENDSPEED;
ARCHITECTUREAOFSPEEDIS
SIGNALCOUNT1:
STD_LOGIC_VECTOR(1DOWNTO0);
SIGNALTEMPCLK,CLKS:
STD_LOGIC;
SIGNALKINSIDE:
STD_LOGIC_VECTOR(4DOWNTO0);
BEGIN
KINSIDE<="00000"-SPEEDUP;
CLKS_LABEL:
PROCESS(RESET,CLK)
VARIABLECOUNT2:
STD_LOGIC_VECTOR(4DOWNTO0);
BEGIN
IFSTOP='1'THENTEMPCLK<='0';
ELSIFRESET='1'andstop='0'THEN
COUNT2:
="00000";
ELSIFCLK'EVENTANDCLK='1'ANDSTOP='0'THEN
IFSTART='1'THEN
IFCOUNT2=KINSIDETHENCOUNT2:
="00000";
ENDIF;
IFNOT(SPEEDUP="00000")THENCOUNT2:
=COUNT2+1;
ENDIF;
IFCOUNT2="00001"THENTEMPCLK<=NOTTEMPCLK;
ENDIF;
ENDIF;
ENDIF;
ENDPROCESSCLKS_LABEL;
CLKOUT<=TEMPCLK;
ENDA;
仿真结果:
启动后(包括暂停)
复位后
停止后
7.2里程计数模块
由车速控制模块发出的脉冲作为计数脉冲,行驶里程大于3KM时,本模块中信号变为1,并将计数动态显示出来,每来一个脉冲,里程值加0.1(每收到一个脉冲代表运行了0.1公里)。
程序中要将计数值从十六进制转换成十进制,即在十六进制的数上加7或6,同时产生了相应的进位信号。
如图所示。
程序代码:
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_ARITH.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYjichengIS
PORT(CLK,RESET,STOP:
INSTD_LOGIC;
COUNT1:
OUTSTD_LOGIC_VECTOR(3DOWNTO0);
COUNT2:
OUTSTD_LOGIC_VECTOR(3DOWNTO0);
COUNT3:
OUTSTD_LOGIC_VECTOR(3DOWNTO0));
ENDjicheng;
ARCHITECTUREAAOFjichengIS
BEGIN
PROCESS(CLK,RESET,STOP)
VARIABLEMM:
STD_LOGIC_VECTOR(11DOWNTO0);
BEGIN
IFRESET='1'THEN
MM:
="000000000000";
ELSIFCLK='0'ANDSTOP='1'THENMM:
="000000000000";
ELSIFCLK'EVENTANDCLK='1'ANDSTOP='0'THEN
IFMM(3DOWNTO0)="1001"THEN
MM:
=MM+7;ELSEMM:
=MM+1;ENDIF;
IFMM(7DOWNTO4)="1010"THEN
MM:
=MM+"01100000";ENDIF;
ENDIF;
COUNT1<=MM(3DOWNTO0);
COUNT2<=MM(7DOWNTO4);
COUNT3<=MM(11DOWNTO8);
ENDPROCESS;
ENDAA;
仿真结果:
开始计程
个位开始计数
十位开始计数
停止后
7.3计费模块
计费模块启动reset信号,根据输入的clk信号变化,调节费用的计数,用c1、c2、c3显示费用。
其初值为6,当里程数超过2km后,才接受计数车速控制模块发出的脉冲的驱动,并且将计数显示动态显示出来,每一个脉冲其数值加0.12,当里程超过15km时数值加0.18。
当启动键为启动状态(高电平时),模块根据车速选择和基本车速发出响应频率的脉冲驱动计费器和里程显示模块进行计数;当处于停止状态时,暂停发出脉冲,此时计费器和里程显示模块相应的停止计数,全部归零。
如图所示。
程序代码:
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_ARITH.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYjifeiIS
PORT(CLK,RESET,stop:
INSTD_LOGIC;
JUDGE2:
INSTD_LOGIC_VECTOR(3DOWNTO0);
JUDGE3:
INSTD_LOGIC_VECTOR(3DOWNTO0);
COUNT1:
OUTSTD_LOGIC_VECTOR(3DOWNTO0);
COUNT2:
OUTSTD_LOGIC_VECTOR(3DOWNTO0);
COUNT3:
OUTSTD_LOGIC_VECTOR(3DOWNTO0);
COUNT4:
OUTSTD_LOGIC_VECTOR(3DOWNTO0));
ENDjifei;
ARCHITECTUREAAOFjifeiIS
SIGNALEN:
STD_LOGIC;
SIGNALMONEY:
STD_LOGIC_VECTOR(7DOWNTO0);
SIGNALMCOUNT:
STD_LOGIC_VECTOR(15DOWNTO0);
BEGIN
MONEY<="00011000"WHEN((MCOUNT(15)='1')OR(MCOUNT(14)='1')OR(MCOUNT(13)='1'))ELSE"00010010";
EN<='0'WHENJUDGE3="0000"ANDJUDGE2(3DOWNTO1)="000"ELSE'1';
PROCESS(clk,reset)
VARIABLEmm:
std_logic_vector(15downto0);
BEGIN
ifstop='1'andclk='0'THENmm:
="0000000000000000";
elsIFreset='1'andstop='0'THEN
mm:
="0000011000000000";--复位,计费显示为起步费6.00
ELSIFclk'eventandclk='1'andstop='0'THEN
IFen='1'THENmm:
=mm+money;--里程超过2公里
IF(mm
(1)='1'or(mm(3downto1)="000")or(mm(3downto2)="11"))THEN
mm:
=mm+6;ENDIF;--十六进制转换成十进制
IFmm(7)='1'and(not(mm(6downto5)="00"))THEN
mm:
=mm+"01100000";ENDIF;
IFmm(11)='1'and(not(mm(10downto9)="00"))THEN
mm:
=mm+"011000000000";ENDIF;
ENDIF;
ENDIF;
count1<=mm(3downto0);
count2<=mm(7downto4);
count3<=mm(11downto8);
count4<=mm(15downto12);
mcount<=mm;
ENDPROCESS;
ENDaa;
仿真结果:
起步后开始计费
行驶2公里后
行驶15公里后
停止后
7.4动态扫描模块
动态扫描电路将计数器A、B、C的计费状态用数码管显示出来,所连接的数码管共用一个数据端,由片选信号依次选择输出,轮流显示。
该模块经过6选1选择器将计费数据(3位BCD码)、计程数据(3位BCD码)动态选择输出。
其中计费
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 整理 出租车 计费 系统 设计