资源描述
出租车计费系统设计
功能分析
本设计重要简介了出租车计费系统设计思路和过程,并给出了所涉及有关知识详细简介。EDA技术应用,单片机功能及应用,传感器检测技术,VHDL编程语言及汇编语言程序,显示系统设计及按键控制,
当前,普遍出租车计费器仅仅具备时钟,起步价,里程计费,等待计费及显示几种功能。其发展前景是可观,将来产品除具备这些功能外,此外还可增长如下功能:防作弊功能,IC卡付费:顾客能在制定点购买一定额度"顾客IC卡",乘车后可用IC卡付帐,付帐与否成功有相应提示。车主可定期将总营业额写入"车主IC卡"中,并据此IC卡向所属公司领取报酬。车票资料打印:顾客付费后可打印发票,打印内容涉及车主信息和车费信息等。可打印车主总营业额信息。语音播报:当乘客上车时,可自动问候乘客,当到达目地,自动播报乘车费用并礼貌再会,表达但愿下次乘坐意思。增长这些功能将会更好地为乘客服务。
计费及显示
① 里程,即汽车行程里程,用四位数字显示,显示方式为"XXX.X",单位为㎞,精准到0.1㎞。
② 单价,即里程单价,用三位数字显示,显示方式为"X.XX",单价为元/㎞,依照每天不同步间段有两种状况:当时间段为06:00~23:00时单价为1.4元/㎞,其她时间段内单价为1.80元/㎞。
③ 等待时间,用四位数字显示分钟和秒,显示方式为"XX:XX",等待定义是:当汽车行驶速度不大于或等于12㎞/h时为"等待"。在等待时间不不大于1小时状况下,可以不显示等待时间,但必要对等待时间进行记录计算。
④ 等待单价,等待单价有两种状况:在等待时间不大于1小时状况下,等待单价为1元每5分钟;在等待时间不不大于1小时状况下,等待单价为20元每小时。
⑤ 费用计算,出租车起价为5.00元,当里程不大于2㎞时,按起价计算费用;当里程不不大于2㎞时按下式计算费用:费用=里程*里程单价+等待时间*等待单价。
⑥ 费用显示,用五位数字显示,显示方式为"XXX.XX",单价为元。
时钟及显示
当出租车在普通运营状态下,应能显示当前时间,在汽车熄火状况下,时钟必要正常运营,但是可以不显示时钟.
计费开始提示
当出租车载上乘客并起步后,将空车批示牌扳倒时,空车批示牌里批示灯熄灭,并有语音或灯光提示信号。
功能模块设计
依照系统设计规定,将整个测控FPGA系统CZJFXT分为七个模块,它们分别是:分频器模块FPQ,等待鉴别模块DDPB,里程计算模块LCJS,里程计费模块LCJF,等待计时模块DDJS,等待计费模块DDJF,输出数据选取模块SCXZ。
分频器模块FPQ:将外部时钟信号SCLK(设计时假设为1024HZ)通过恰当分频后,产生1HZ系统工作用基准时钟信号CLK1HZ,供应系统中关于模块计时用。
等待鉴别模块DDPB:依照速度传感器脉冲信号WCLK和分频器产生基准时钟信号CLK1HZ,计算单位时间里WCLK脉冲个数(每㎞产生1000个脉冲信号,即每米产生1个脉冲信号),亦即出租车行驶速度,从而鉴别出租车与否处在等待状态,发出等待标志信号DDBZ。当速度不不大于12㎞/H,即速度不不大于200M/MIN时,出租车处在运营状态,这时等待标志DDBZ=0;当速度不大于等于12㏎/H,即速度不大于等于200M/MIN时,出租车处在等待状态,这时等待标志DDBZ=1。该模块VHDL程序设计可分为三个进程:60S周期性跳变信号产生进程,每分钟行驶距离计算进程,等待标志鉴别进程。等待标志鉴别进程就是比较每分钟WCLK脉冲个数与等待状态WCLK脉冲临界个数200大小,从而拟定DDBZ赋值。
里程计算模块LCJS:依照速度传感器脉冲信号WCLK和等待标志DDBZ,对出租车行驶里程数XSLC进行计算,同步发出里程标志信号LCBZ和里程计费标志信号JFBZ。如果LCBZ=1,阐明行驶距离超过2㎞,里程计费启动;如果LCBZ=0,阐明没超过2㎞,按起价计费,每行驶1㏎应计费1次,并且计费启动信号应是某一时刻,因而每行驶1㎞,计费标志信号JFBZ应跳变1次。该模块VHDL程序设计可分为两个进程:里程计算及标志产生进程,产生计费信号进程。产生计费信号进程就是每行驶10百米(即1㎞)JFBZ由低电平0变为1,通过一种系统时钟周期后JFBZ又回答到低电平0,里程计费模块LCJF就是在JFBZ脉冲信号上升沿到来时进行计费加法操作。
里程计费模块LCJF:在计费标志信号JFBZ,等待标志信号DDBZ,里程标志信号LCBZ和时段标志信号SDBZ等信号控制下,计算行驶里程超过2㎞以上里程费用LCFY。该模块VHDL程序是通过由各种条件控制加法进程来完毕里程计费,里程计费条件是在DDBZ=0,并且在JFBZ上升沿依照SDBZ分别进行加法计费操作。当SDBZ=1时,表达在06:00~23:00时段,其单价SD1为1.4元/㎞;当SDBZ=0时,表达其她时段,其单价SD2为1.8元/㎞。如果LCBZ=1,阐明行驶距离超过2㎞,里程计费启动;如果LCBZ=0,阐明没超过2㎞,按起价计费。
等待计时模块DDJS:在等待标志信号DDBZ和基准时钟信号CLK1HZ控制下,进行等待时间DDSJ计算,其中DDSJ低8位表达等待时间秒数,DDSJ高8位表达等待时间分钟数,同步依照等待时间长短发出一种熄灯标志信号XDBZ。当等待时间不大于等于1小时,XDBZ=0,等待时间显示灯亮;当等待时间不不大于1小时,XDBZ=1,等待时间显示不亮。该模块VHDL程序是通过一种多层嵌套加法进程来完毕等待计时。
等待计费模块DDJF:在等待标志信号DDBZ和熄灯标志信号XDBZ控制下,进行等待费用DDFY计费操作。该模块VHDL程序涉及两个进程:60S周期性跳变信号产生进程,等待费用计算进程。等待费用计算条件是在DDBZ=1并且在60S周期性跳变信号T60S上升沿,依照XDBZ分别进行加法计费操作。当DDBZ=1且XDBZ=0时,按1元/5分钟,即20分/分钟计费;当DDBZ=0且XDBZ=1时,按20元/小时,即33分/分钟计费。
输出数据选取模块SCXZ:依照单片机发出数据传播选取控制信号SEL,选取关于计算解决成果传播给单片机。
硬件电路设计
1.1 系统构成
以CPLD/FPGA为主体,设计并制作一台出租车计费系统,系统方框图如图14.1所示。
图1.1 出租车计费系统方框图
1.1.1计费及显示
(1) 里程,即汽车行驶里程,用四位数字显示,显示方式为“XXX.X”,单位为km,精准到0.1 km。
(2) 单价,即里程单价,用三位数字显示,显示方式为“X.XX”,单价为元/km,依照每天不同步间段有两种状况:当时间段为06:00~23:00时单价为1.40元/km,其她时间段内单价为1.80元/km。
(3) 等待时间,用四位数字显示分钟和秒,显示方式为“XX:XX”,等待定义是:当汽车行驶速度不大于或等于12 km/h时为“等待”。
(4) 等待单价,等待单价有两种状况:在等待时间不大于1小时状况下,等待单价为1元每5分钟;在等待时间不不大于1小时状况下,等待单价为20元每小时。
(5) 费用计算,出租车起价为5.00元,当里程不大于2 km时,按起价计算费用;当里程不不大于2 km时按下式计算费用: 费用=里程╳里程单价+等待时间╳等待单价
(6) 费用显示,用五位数字显示,显示方式为“XXX.XX”,单价为元。
1.1.2 时钟及显示
当出租车在常运状态下,应能显示当前时间。在汽车熄火状况下,时钟必要正常运营,但是可以不显示时钟。
1.1.3 计费开始提示
当出租车载上乘客并起步后,将空车批示牌扳倒时,空车批示牌里批示灯熄灭,并有语音或灯光提示信号。
1.2 系统设计方案
1.2.1 系统总体设计方案
本系统拟采用单片机和FPGA结合进行系统主体设计,系统原理框图如图1.2所示。
图1.2 出租车计费系统总体原理框图
1.2.2 测控FPGAVHDL程序设计
依照系统设计规定,咱们可将整个测控FPGA系统CZJFXT分为七个模块,它们分别是:分频器模块FPQ,等待鉴别模块DDPB,里程计算模块LCJS,里程计费模块LCJF,等待计时模块DDJS,等待计费模块DDJF,输出数据选取模块SCXZ。其内部构成原理图如图1.3所示。
分频器模块FPQ:将外部时钟信号SCLK(设计时假设为200 Hz)通过恰当分频后,产生1 Hz系统工作用基准时钟信号CLK1HZ,供系统中关于模块计时用。
等待鉴别模块DDPB:依照速度传感器脉冲信号WCLK和分频器产生基准时钟信号CLK1HZ,计算单位时间里WCLK脉冲个数(每km产生1000个脉冲信号,即每米产生1个脉冲信号),亦即出租车行驶速度,从而鉴别出租车与否处在等待状态,发出等待标志信号DDBZ。
里程计算模块LCJS:依照速度传感器脉冲信号WCLK和等待标志DDBZ,对出租车行驶里程数XSLC进行计算,同步发出里程标志信号LCBZ和里程计费标志信号JFBZ。
里程计费模块LCJF:在计费标志信号JFBZ、等待标志信号DDBZ、里程标志信号LCBZ和时段标志信号XDBZ等信号控制下,计算行驶里程超过2 km以上里程费用LCFY。 等待计时模块DDJS:在等待标志信号DDBZ和基准时钟信号CLK1HZ控制下,进行等待时间DDSJ计算,其中DDSJ低8位表达等待时间秒数,DDSJ高8位表达等待时间分钟数,同步依照等待时间长短发出一种熄灯标志信号XDBZ。
等待计费模块DDJF:在等待标志信号DDBZ和熄灯标志信号XDBZ控制下,进行等待费用DDFY计费操作。
输出数据选取模块SCXZ :依照单片机发出数据传播选取控制信号SEL,选取关于计算解决成果传播给单片机。SEL与被传送数据详细关系如表1.1所示。
表1.1 SEL与被传送数据关系列表
1.2.3 单片机控制程序设计
单片机模块涉及单片机AT89C51及其控制显示和键盘系统,控制口如图1.3(略 )所示。
AT89C51对FPGA数据进行运算,计算出用车总费用并送显示系统显示,同步它接受键盘信息并解决显示切换。系统采用6+1显示,6个数码管作常规显示,一种数码管作状态显示。按键共有5个,分别是功能切换键、拟定键、修改键、启动模仿键和空车牌压下模仿键。
涉及重要流程图如图1.4~1.8所示。
图1.4 主程序流程图
图1.5 键解决流程图
图1.6 典型显示子程序流程图
图1.7 里程显示子程序流程图
图1.8 乘车费用显示子程序流程图
程序清单
1.3 主 要 源 程 序
14.3.1 重要VHDL源程序
1.分频器模块FPQVHDL源程序
--FPQ.VHD
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
USE IEEE.STD_LOGIC_ARITH.ALL;
ENTITY FPQ IS
PORT(SCLK:IN STD_LOGIC;
--SCLK=200 Hz
CLK1HZ:OUT STD_LOGIC);
--CLK1HZ=1 Hz END ENTITY FPQ;
ARCHITECTURE ART OF FPQ IS SIGNAL
CNT100:INTEGER RANGE 0 TO 99;SIGNAL CLK1:STD_LOGIC;
BEGIN PROCESS(SCLK)
BEGIN
IF SCLK'EVENT AND SCLK='1' THEN
IF CNT100=99 THEN
CNT100<=0;
CLK1<=NOT CLK1;
ELSE
CNT100<=CNT100+1;
END IF;
ELSE
CLK1<=CLK1;
END IF;
CLK1HZ<=CLK1;
END PROCESS;
END ARCHITECTURE ART;
2.等待鉴别模块DDPBVHDL源程序
--DDPB.VHD
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
USE IEEE.STD_LOGIC_ARITH.ALL;
ENTITY DDPB IS
PORT(START,WCLK:IN STD_LOGIC;
CLK1HZ:IN STD_LOGIC;
DDBZ:OUT STD_LOGIC);
END ENTITY DDPB;
ARCHITECTURE ART OF DDPB IS
SIGNAL T60S:STD_LOGIC;
SIGNAL WCLKCOU:STD_LOGIC_VECTOR(7 DOWNTO 0);
BEGIN
--产生60 s周期性跳变信号进程
PROCESS(START,CLK1HZ) IS
VARIABLE CNT60:STD_LOGIC_VECTOR(7 DOWNTO 0);
BEGIN
IF START='1' THEN
CNT60:="00000000";T60S<='0';
ELSIF CLK1HZ'EVENT AND CLK1HZ='1' THEN
IF CNT60="00111100" THEN --CNT60=60
T60S<='1';CNT60:="00000000";
ELSE
CNT60:=CNT60+'1';T60S<='0';
END IF;
END IF;
END PROCESS ;
--每分钟行驶距离计算进程
PROCESS(START,WCLK,T60S) IS
BEGIN
IF START='1' THEN
WCLKCOU<="00000000";
ELSIF WCLK'EVENT AND WCLK='1' THEN
IF T60S='1' THEN
WCLKCOU<="00000000";
ELSE
WCLKCOU<=WCLKCOU+'1'; --距离计算,单位为m
END IF;
END IF;
END PROCESS ;
--等待标志鉴别进程
PROCESS(WCLKCOU,T60S) IS
BEGIN
IF T60S'EVENT AND T60S='1' THEN
IF WCLKCOU<="11001000" THEN --WCLKCOU<=200
DDBZ<='1';--等待
ELSE
DDBZ<='0';--行驶
END IF;
END IF;
END PROCESS ;
END ARCHITECTURE ART;
3.里程计算模块LCJSVHDL源程序
--LCJS.VHD LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;ENTITY LCJS IS PORT(START,DDBZ,WCLK:IN STD_LOGIC; XSLC:OUT STD_LOGIC_VECTOR(15 DOWNTO 0);LCBZ,JFBZ:OUT STD_LOGIC);END ENTITY LCJS;ARCHITECTURE ART OF LCJS IS SIGNAL BMS:STD_LOGIC_VECTOR(15 DOWNTO 0);SIGNAL BMS1:INTEGER RANGE 0 TO 99999;SIGNAL JFBZ1:STD_LOGIC;BEGIN --里程计算及标志产生进程
PROCESS(START,WCLK)
运营成果阐明
系统联合调试成功后,可将单片机程序通过编程器固化到单片机中,并插入到EDA实验开发系统中单片机插座上,将VHDL设计通过综适当配后网表对CPLD/FPGA进行编程下载,输入有关信号,并进行关于性能指标测试,直到满足系统设计规定为止。
本系统显示系统共设立了7各数码管,其中6个作为常规显示,另一种是状态显示,显示情形如下:
当状态显示为A时,是当前时间显示,显示方式为“XX.XX.XX”;
当状态显示为D时,是里程单价显示,显示方式为“X.XX”,单位为元、km;
当状态显示为L时,是全程里程显示,显示方式为“XXX.X”,单位为km;
当状态显示为F时,是用车费用显示,显示方式为“XXX.XX”,单位为元;
当状态显示为H时,是等待时间显示,显示方式为“XX.XX”,即分和秒;
总 结
通过这半个学期努力,在教师和同窗协助下做完了毕业设计工作,由于自己知识缺少及能力有限,仍没有可以实现像开题报告中那样带有语音辨认等功能补充与完善。但是通过这次毕业设计,我能运用已学知识解决我在设计中遇到问题,使自己动手能力和思考问题能力得到了很大提高。在做设计过程中我查阅了诸多资料,并认真阅读这些与我设计有关资料,从而我专业涵养得到了提高,知识储备量也有所增长。在做设计时,我复习了诸多专业课知识,这使得我专业知识在离校之前得到了巩固。整个设计通过了软件和硬件上调试、仿真。我想这对于自己后来学习和工作都会有很大协助。在这次设计中遇到了诸多实际性问题,在实际设计中才发现,课本上理论性东西与在实际运用中还是有一定出入,因此有些问题不但要进一步地理解,并且要不断地改正此前错误思维。
但是,通过这次设计我也发现自己诸多局限性之处。在设计过程中我发现自己考虑问题很不全面,自己专业知识掌握很不牢固,所掌握计算机应用软件还不够多,我但愿自己这些局限性之处能在此后工作和学习中得到改进。并且,通过这次设计,我懂得了学习重要性,学会了坚持和努力,这将为后来学习做出了最佳榜样!同步,该设计也有局限性之处,缺少了些许等功能。我将会在后来学习中继续学习。
致 谢
在整个毕业设计中,一方面感谢我指引教师王宁教师,在王宁教师和同窗协助下我完毕了这次毕业设计,同步我也学到了诸多知识,让我实践知识得到了很大提高,这次设计是枯燥而又富有挑战,正式由于她们协助我猜又信心完毕,同步在与同窗交流中受益颇多。正是由于她们勉励支持和协助,我才干完毕这次设计。
时间仓促及自身专业水平局限性,整篇论文必定存在尚未发现缺陷和错误。恳请阅读此篇论文教师、同窗,多予指正,不胜感激!
展开阅读全文