基于FPGA的出租车计费器课程设计程序

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

设计题目:出租车计费器一、设计实验条件QuartusII7.2二、设计目标1.实现计费功能。按行驶里程计费,起步价为6.00元,并在车行驶3km后按1.2元/km计费,当计费器达到或超过20元时,每千米加收50%的车费,车停止和暂停时不计费;2.现场模拟汽车的起动、停止、暂停和换挡等状态;3.设计数码管动态扫描电路,将车费和路程显示出来,各有两位小数。三、设计报告的内容1.前言伴随中国经济的腾飞,城市化的进程也随之加快。虽然人们出行的选择趋于多样化,但是出租车作为一种重要的交通工具,也为很多人作为出行的选择。大城市里出租车已经相当普及,但是在中小城市出租车依然处于快速发展的阶段。出租车的计费方式也在发生变化,由只能显示里程的方式变为现在的自主计费和打印发票及语音提示的智能化方式;根据出租车行业的发展需求,国内许多生产厂商也制造出不同类型的计价器,传统的出租车计费器经过十几年的使用,在稳定性,成本等方面都具有一定的优势。利用FPGA设计出满足出租车不同计费需求的计费器,去满足当地出租车的计费需求。这个课题在实现计费功能的同时,也解决了传统出租车计费器系统的不足。出租车的需求不断的增大,因此,出租车计费器的需求也将不断增大,计程车的服务也显得越来越重要,因此出租车计费器也就应运而生了。2.设计主体(1)设计原理:假设出租车有启动键、停止键、暂停键和档位键。启动键为脉冲触发信号,当它为一个脉冲是,表示汽车已启动,并根据车速的选择和基本车速发出相应频率的脉冲(计费脉冲)实现车费和路程的计数,同时车费显示起步价;当停止键为高电平时,表示汽车熄火,同时停止发出脉冲,此时车费和路程计数清零;当暂停键为高电平时,表示汽车暂停并停止发出脉冲,此时车费和路程计数暂停;档位键用来改变车速,不同档位对应着不同的车速,同时路程计数的速度也不同。出租车计费器可分为两大模块,即控制模块和译码显示模块,系统框图如图1所示,控制模块实现了计费和路程的技术,并且通过不同的档位控制车速。译码显示模块实现了十进制到4位十进制的转换,以及车费和路程的显示。计费时钟档位起动暂停停止图1出租车计费器系统框图(2)步骤:①首先设计taxi计费模块,实现计费功能。起步价为6.00元,并在车行驶3km后按1.2元/km计费,当计费器达到或超过20元时,每千米加收50%的车费,车停止和暂停时不计费。taxi模块程序如下:libraryieee;useieee.std_logic_1164.all;useieee.std_logic_unsigned.all;entitytaxiisport(clk:instd_logic;----计费时钟控制模块显示模块start:instd_logic;----汽车起动stop:instd_logic;----汽车停止pause:instd_logic;----汽车暂停speedup:instd_logic_vector(1downto0);----档位(4个档位)money:outintegerrange0to8000;----车费distance:outintegerrange0to8000);----路程end;architectureoneoftaxiisbeginprocess(clk,start,stop,pause,speedup)variablemoney_reg,distance_reg:integerrange0to8000;----车费和路程的寄存器variablenum:integerrange0to9;----控制车速的计数器variabledis:integerrange0to100;----千米计数器variabled:std_logic;----千米标志位beginifstop='1'then-----汽车停止,计费和路程清零money_reg:=0;distance_reg:=0;dis:=0;num:=0;elsifstart='1'then-----汽车起动后,起步价为6元money_reg:=600;distance_reg:=0;dis:=0;num:=0;elsifclk'eventandclk='1'thenifstart='0'andspeedup=00andpause='0'andstop='0'then---1档ifnum=9thennum:=0;distance_reg:=distance_reg+1;dis:=dis+1;elsenum:=num+1;endif;elsifstart='0'andspeedup=01andpause='0'andstop='0'then---2档ifnum=9thennum:=0;distance_reg:=distance_reg+2;dis:=dis+2;elsenum:=num+1;endif;elsifstart='0'andspeedup=10andpause='0'andstop='0'then---3档ifnum=9thennum:=0;distance_reg:=distance_reg+5;dis:=dis+5;elsenum:=num+1;endif;elsifstart='0'andspeedup=11andpause='0'andstop='0'then---4档distance_reg:=distance_reg+1;dis:=dis+1;endif;ifdis=100thend:='1';dis:=0;elsed:='0';endif;ifdistance_reg=300then-------如果超过3km按1.2元/千米计算ifmoney_reg2000andd='1'thenmoney_reg:=money_reg+120;elsifmoney_reg=2000andd='1'thenmoney_reg:=money_reg+180;-------当计费器达到20元,每千米加收50%的车费endif;endif;endif;money=money_reg;distance=distance_reg;endprocess;end;①将输出的费用和路程作为输入,给decoder模块,完成数码管显示功能,并且对小数点等做出明确定义。decoder程序如下:libraryieee;useieee.std_logic_1164.all;useieee.std_logic_unsigned.all;entitydecoderisport(clk20mhz:instd_logic;-----系统时钟20MHZmoney_in:inintegerrange0to8000;-----车费distance_in:inintegerrange0to8000;-----路程scan:outstd_logic_vector(7downto0);-----数码管地址选择信号seg7:outstd_logic_vector(6downto0);-----7段显示控制信号(abcdefg)dp:outstd_logic);---------小数点end;architectureoneofdecoderissignalclk1khz:std_logic;----1KHZ的分频时钟,用于扫描数码管地址signaldata:std_logic_vector(3downto0);signalm_one,m_ten,m_hun,m_tho:std_logic_vector(3downto0);-----钱数的4位十进制表示signald_one,d_ten,d_hun,d_tho:std_logic_vector(3downto0);-----路程的4位十进制表示begin-------------1KHZ分频,用于扫描数码管地址---process(clk20mhz)variablecount:integerrange0to9999;beginifclk20mhz'eventandclk20mhz='1'thenifcount=9999thenclk1khz=notclk1khz;count:=0;elsecount:=count+1;endif;endif;endprocess;------将车费的十进制数转化为4位十进制数---process(clk20mhz,money_in)variablecomb1:integerrange0to8000;variablecomb1_a,comb1_b,comb1_c,comb1_d:std_logic_vector(3downto0);beginifclk20mhz'eventandclk20mhz='1'thenifcomb1money_inthenifcomb1_a=9andcomb1_b=9andcomb1_c=9thencomb1_a:=0000;comb1_b:=0000;comb1_c:=0000;comb1_d:=comb1_d+1;comb1:=comb1+1;elsifcomb1_a=9andcomb1_b=9thencomb1_a:=0000;comb1_b:=0000;comb1_c:=comb1_c+1;comb1:=comb1+1;elsifcomb1_a=9thencomb1_a:=0000;comb1_b:=comb1_b+1;comb1:=comb1+1;elsecomb1_a:=comb1_a+1;comb1:=comb1+1;endif;elsifcomb1=money_inthenm_one=comb1_a;m_ten=comb1_b;m_hun=comb1_c;m_tho=comb1_d;elsifcomb1money_inthencomb1_a:=0000;comb1_b:=0000;comb1_c:=0000;comb1_d:=0000;comb1:=0;endif;endif;endprocess;---------将路程的十进制转化为4位十进制数---process(clk20mhz,distance_in)variablecomb2:integerrange0to8000;variablecomb2_a,comb2_b,comb2_c,comb2_d:std_logic_vector(3downto0);beginifclk20mhz'eventandclk20mhz='1'thenifcomb2distance_inthenifcomb2_a=9andcomb2_b=9andcomb2_c=9thencomb2_a:=0000;comb2_b:=0000;comb2_c:=0000;comb2_d:=comb2_d+1;comb2:=comb2+1;elsifcomb2_a=9andcomb2_b=9thencomb2_a:=0000;comb2_b:=0000;comb2_c:=comb2_c+1;comb2:=comb2+1;elsifcomb2_a=9thencomb2_a:=0000;comb2_b:=comb2_b+1;comb2:=comb2+1;elsecomb2_a:=comb2_a+1;comb2:=comb2+1;endif;elsifcomb2=distance_inthend_one=comb2_a;d_ten=comb2_b;d_hun=comb2_c;d_tho=comb2_d;elsifcomb2distance_inthencomb2_a:=0000;comb2_b:=0000;comb2_c:=0000;comb2_d:=0000;comb2:=0;endif;endif;endprocess;---------数码管动态扫描process(clk1khz,m_one,m_ten,m_hun,m_tho,d_one,d_ten,d_hun,d_tho)variablecnt:s

1 / 12
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功