出租车计费器Word格式文档下载.docx

上传人:b****4 文档编号:17341594 上传时间:2022-12-01 格式:DOCX 页数:18 大小:75.72KB
下载 相关 举报
出租车计费器Word格式文档下载.docx_第1页
第1页 / 共18页
出租车计费器Word格式文档下载.docx_第2页
第2页 / 共18页
出租车计费器Word格式文档下载.docx_第3页
第3页 / 共18页
出租车计费器Word格式文档下载.docx_第4页
第4页 / 共18页
出租车计费器Word格式文档下载.docx_第5页
第5页 / 共18页
点击查看更多>>
下载资源
资源描述

出租车计费器Word格式文档下载.docx

《出租车计费器Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《出租车计费器Word格式文档下载.docx(18页珍藏版)》请在冰豆网上搜索。

出租车计费器Word格式文档下载.docx

AF21

WCLK

AA10

DATAOUT[6]

U18

DATAOUT[19]

AB18

DATAOUT[5]

U17

DATAOUT[18]

V17

DATAOUT[4]

W19

DATAOUT[17]

W17

DATAOUT[3]

V18

DATAOUT[16]

AA18

DATAOUT[2]

AE22

DATAOUT[15]

AA17

DATAOUT[1]

AF22

DATAOUT[14]

AC19

DATAOUT[0]

AD21

DATAOUT[13]

AD19

波形仿真

1等待判别模块

Start=0时,随着时钟CLK1HZ的变化,每60个周期T60S出现一个跳变,这期间wclk小于20时,等待标志位DDBZ为高电平。

正确。

2等待计时模块的仿真

在start=1时,所有数据清零。

Start=0时,随着时钟CLK1HZ的变化,等待时间ddsj的数据相应依次增加(秒个位0000-0001-0010-0011)。

3总模块

Start=0时,随着时钟CLK1HZ的变化,CLK1HZ60个周期内,wclk大于20则等待时间ddsj为0,等待费用DDFY为0,

行驶里程逐步变化,里程费用LCFY刚开始保持不变,因为小于起步里程,费用为起步价。

行驶里程逐步变化到大于起步里程,里程费用LCFY开始增加。

CLK1HZ60个周期内,wclk小于20则等待时间ddsj的数据相应依次增加,等待费用DDFY开始计费。

当start=1时,所有数据重新清零。

下图为方便观察,其中变化明显部分给出特写,不再赘述。

 

VHDL源程序代码

---clkgen.vhd

libraryIEEE;

--1HZ

useIEEE.std_logic_1164.all;

useieee.std_logic_unsigned.all;

entityclkgenis

port(

CLK:

instd_logic;

CLK1HZ:

outstd_logic

);

endentity;

architectureclk_archofclkgenis

signalCOUNT:

integerrange0to50000000;

--50MHZ-->

1hz

begin--50M/1=50000000

PROCESS(CLK)

BEGIN

ifclk'

eventandclk='

1'

then

IFCOUNT=50000000then

COUNT<

=0;

ELSECOUNT<

=COUNT+1;

ENDIF;

ENDPROCESS;

PROCESS(COUNT)

BEGIN

IFCOUNT=5000000THEN--1HZ

CLK1HZ<

='

;

ELSECLK1HZ<

0'

endarchitecture;

--等待判别

--DDPB.VHD

Libraryieee;

useieee.std_logic_1164.all;

USEIEEE.STD_LOGIC_ARITH.ALL;

entityDDPBis

port(

WCLK,START:

instd_logic;

INSTD_LOGIC;

DDBZ:

OUTSTD_LOGIC:

end;

architecturebehvofDDPBis

SIGNALT60S:

STD_LOGIC;

SIGNALwclkc:

STD_LOGIC_VECTOR(7DOWNTO0);

--脉冲计数信号,记录车轮传感器传来的数字,在60秒内

--产生60s周期性调变信号

PROCESS(CLK1HZ,START)

VARIABLECNT60:

STD_LOGIC_VECTOR(7DOWNTO0);

ifstart='

CNT60:

="

00000000"

t60s<

ELSIFclk1hz'

eventandclk1hz='

IFCNT60="

00111100"

then--60

T60S<

ELSE

=CNT60+'

T60S<

--每分钟行驶距离计算进程

PROCESS(WCLK,START,T60S)

WCLKc<

ELSIFWCLK'

eventandWCLK='

IFT60S='

then--60s?

=WCLKc+'

------计算距离,单位为10m

---等待标志判别进程

IFt60s'

eventandt60s='

IFWCLKc<

00010100"

then------WCLKc<

=20十米,12km/h,比这个速度小

DDBZ<

ENDBEHV;

--实验十四出租车计费器

--里程计算模块

--LCJS.VHD

useieee.std_logic_arith.all;

entityLCJSis

GENERIC(--0:

INTEGER:

=160;

--06:

00-22:

00单价

--1:

=180;

--其它时间

qibu:

=60--起步公里数,6公里内为固定价格

--jg:

=1000--起步价格,6公里内为10元

);

port(START,DDBZ,WCLK:

XSLC:

outstd_logic_vector(15downto0);

LCBZ,jfbz:

architecturearchofLCJSis

signalbms:

std_logic_vector(15downto0);

--百米数

signalbms1:

integerrange0to99999;

signaljfbz1:

std_logic;

begin

PROCESS(start,wclk)

variablesms:

std_logic_vector(7downto0);

--十米数

then--newcycle,notwait,running

sms:

bms<

0000000000000000"

--百米数

lcbz<

elsifwclk'

eventandwclk='

then

ifddbz='

then--行驶中

ifsms="

00001010"

then--10次计数,100m

=bms+1;

---new100m

ifbms>

=qibuthen--->

6km大于起步里程,6000m

endif;

else

=sms+1;

endif;

endprocess;

---里程计算结果输出

xslc<

=bms;

---里程计算结果转换

BMS1<

=CONV_INTEGER(BMS);

---generate计费信号

process(bms1)

begin

casebms1is

when10|20|30|40|50|60|70|80|90|100=>

jfbz1<

---

when110|120|130|140|150|160|170|180|190|200=>

when210|220|230|240|250|260|270|280|290|300=>

when310|320|330|340|350|360|370|380|390|400=>

when410|420|430|440|450|460|470|480|490|500=>

when510|520|530|540|550|560|570|580|590|600=>

when610|620|630|640|650|660|670|680|690|700=>

when710|720|730|740|750|760|770|780|790|800=>

when810|820|830|840|850|860|870|880|890|900=>

when910|920|930|940|950|960|970|980|990|1000=>

when1010|1020|1030|1040|1050|1060|1070|1080|1090|1100=>

when1110|1120|1130|1140|1150|1160|1170|1180|1190|1200=>

when1210|1220|1230|1240|1250|1260|1270|1280|1290|1300=>

when1310|13130|1330|1340|1350|1360|1370|1380|1390|1400=>

when1410|1420|1430|14140|1450|1460|1470|1480|1490|1500=>

when1510|1520|1530|1540|15150|1560|1570|1580|1590|1600=>

when1610|1620|1630|1640|1650|16160|1670|1680|1690|1700=>

when1710|1720|1730|1740|1750|1760|1770|1780|1790|1800=>

when1810|1820|1830|1840|1850|1860|1870|18180|1890|1900=>

when1910|1920|1930|1940|1950|1960|1970|1980|1990|2000=>

when2010|2020|2030|2040|2050|2060|2070|2080|2090|2100=>

when2110|2120|2130|2140|2150|2160|2170|2180|2190|2200=>

when2210|22220|2230|2240|2250|2260|2270|2280|2290|2300=>

when2310|2320|2330|2340|2350|2360|2370|2380|2390|2400=>

when2410|2420|2430|24240|2450|2460|2470|2480|2490|2500=>

when2510|2520|2530|2540|25250|2560|2570|2580|2590|2600=>

when2610|2620|2630|2640|2650|26260|2670|2680|2690|2700=>

when2710|2720|2730|2740|2750|2760|2770|2780|2790|2800=>

when2810|2820|2830|2840|2850|2860|2870|28280|2890|2900=>

when2910|2920|2930|2940|2950|2960|2970|2980|2990|3000=>

whenothers=>

endcase;

--计费标志去毛刺

process(wclk,jfbz1)

begin

ifwclk'

jfbz<

=jfbz1;

endif;

endarch;

--里程计费模块

--LCJF.VHD

entityLCJFis

GENERIC(SD0:

=160;

00单价,1.6元

SD1:

--其它时间1.8元

=60;

--起步公里数,6公里内为固定价格

qbjg:

port(START,DDBZ:

---开始,等待标志

LCBZ,jfbz,SDBZ:

--里程,计费,时段标志

LCFY:

outstd_logic_vector(15downto0)---行驶产生的费用

architecturearchofLCJFis

signalLCFY1:

--里程费用缓存

PROCESS(start,LCBZ,jfbz,SDBZ)

LCFY1<

---CLEAROLDVALUES

elsifJFBZ'

eventandJFBZ='

then--计费了

then--运行中

ifLCBZ='

then--6KM以内,起步以内

elsifLCBZ='

then--6KM以上,超过起步

ifSDBZ='

then--时段0

=LCFY1+SD0;

--相应费用

elsifSDBZ='

then--时段1

=LCFY1+SD1;

endif;

lcfy<

=lcfy1+qbjg;

---此处费用为:

没有超过6千米时为10元,超过了为(10+超过的里程×

时段单价

endarch;

--等待计时模块

--DDJS.VHD

entityddjsis

DDBZ,START:

--等待标志,开始

--时钟

DDSJ:

OUTSTD_LOGIC_VECTOR(15DOWNTO0);

--等待时间

XDBZ:

OUTSTD_LOGIC--标志

architecturebehvofddjsis

SIGNALXIDENG:

SIGNALMS,MG,FS,FG:

STD_LOGIC_VECTOR(3DOWNTO0);

PROCESS(CLK1HZ,START,DDBZ)

MS<

0000"

MG<

FS<

FG<

IFDDBZ='

then--等待中

IFMG=9thenMG<

--十进制计数秒数十位计算

IFMS=5thenMS<

--6进制计数秒数十位计算

--十进制计数分数个位计算

--6进制计数分数十位计算

XIDENG<

FS<

--等待够一个小时标志

=FS+'

---分数十位计算

=FG+'

---分数个位计算

=MS+'

---秒数十位计算

=MG+'

XDBZ<

=XIDENG;

DDSJ(15downto12)<

=fs;

DDSJ(11downto8)<

=fg;

DDSJ(7downto4)<

=ms;

DDSJ(3downto0)<

=mg;

endbehv;

--等待计费模块

entityDDJFis

---每分钟等待费用定义,单位为分

GENERIC(DD0:

=20;

--一小时以内20分每分钟,5分钟一元

DD1:

=33--一小时以上33分每分钟,每小时20元

--qibu:

--起步公里数,8公里内为固定价格

--qbjg:

=1000--起步价格,8公里内为10元

port(START,DDBZ,XDBZ,CLK1HZ:

DDFY:

outstd_logic_vector(15downto0)--等待费用

architecturearchofDDJFis

signalDDFY1:

SIGNALT60S:

SIGNALCNT60:

PROCESS(CLK1HZ)

IFclk1hz'

IFCNT60=60then

CNT60<

=CNT60+1;

---等待费用计算进程

PROCESS(DDBZ,XDBZ,T60S,START)

DDFY1<

elsifT60S'

eventandT60S='

then--够60秒

then--等待

ifxdbz='

then--1小时以内

=DDFY1+DD0;

elsifXDBZ='

then--1小时以内以上

DDFY1

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > PPT模板 > 图表模板

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1