数字电路出租车计费器文档格式.docx

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

数字电路出租车计费器文档格式.docx

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

数字电路出租车计费器文档格式.docx

3.1主要中心组成

3.2FPGA芯片部主要程序:

3.3工作原理:

基于CPLD/FPGA的出租车计费器的组成如图1所示。

各局部主要功能如下:

(1)A计数器对车轮传感器送来的脉冲信号进展计数(每转一圈送一个脉冲)。

不同车型的车轮直径可能不一样,通过“设置1〞对车型做出选择,以实现对不同车轮直径的车进展调整。

(2)B计数器对百米脉冲进展累加,并输出实际公里数的BCD码给译码动态扫描模块。

每计满500送出一个脉冲给C计数器。

“设置2〞实现起步公里数预制。

(3)C计数器实现步长可变(即单价可调)的累加计数,每500米计费一次。

“设置3〞用来完成超价加费、起步价预制等。

(4)译码/动态扫描将路程与费用的数值译码后用动态扫描的方式驱动数码管。

(5)数码管显示将公里数和计费金额均用四位LED数码管显示(2位整数,2位小数)。

3.4功能模块设计

出租车计费器由车型调整模块、计程模块、计费模块、译码动态及扫描等模块组成,整个系统采用模块化设计,首先用VHDL编写功能模块,然后用顶层原理图将各功能模块连接起来。

四单元模块设计:

首先出租车计费器的设计需要分频,所以需要设计了两个频率:

4.1oneMHZ:

由于给定的50MHZ太大,这个程序完成5000分频,实现第一次分频,确保实现动态计数,并且保证频率在驱动围之。

libraryieee;

useieee.std_logic_1164.all;

entityoneMHZis

port(daclk:

instd_logic;

clkout:

outstd_logic);

endoneMHZ;

architectureoneofoneMHZis

signaldata:

integerrange0to5000;

signalQ:

std_logic;

begin

process(daclk)

begin

ifdaclk'

eventanddaclk='

1'

then

if(data=5000)then

data<

=0;

Q<

=notQ;

else

=data+1;

endif;

clkout<

=Q;

endprocess;

endone;

4.2twoMHZ:

这个程序完成2500分频,实现第二次分频,确保最后数码管显示频率在适宜围

entitytwoMHZis

endtwoMHZ;

architectureoneoftwoMHZis

integerrange0to2500;

if(data=2500)then

4.3Charge:

实现计费功能,按行驶里程收费,起步费为7.00元,并在车行3公里后再按2.2元/公里,当计费器到达或超过一定收费〔如20元〕。

每公里加收50%的车费,车停顿不计费,实现预置功能、每公里收费、车行驶加费里程,实现模拟功能,能模拟汽车启动、停顿、暂停、车速等状态,将车费显示出来。

useieee.std_logic_unsigned.all;

entitychargeis

port(cp,ks,tz,zt:

instd_logic;

dis,mon:

outintegerrange0to9999);

endcharge;

architecturechofchargeis

begin

process(cp,ks,tz,zt)

variabledis1,mon1:

integerrange0to9999;

begin

if(cp'

eventandcp='

)then

if(tz='

0'

)then

dis1:

mon1:

elsif(ks='

)then

=700;

andtz='

andzt='

=dis1+10;

=dis1;

=mon1;

if(dis1<

300)thennull;

elsif(dis1<

600anddis1>

300)then

mon1:

=mon1+22;

elsif(dis1>

=600)then

=mon1+33;

mon<

dis<

endprocess;

endch;

4.4Transform实现将电路计数分上下位显示,将二进制转化为数码管可识别的十进制

entitytransformis

port(daclk:

std_logic;

dg,ds,db,dq,mg,ms,mb,mq:

outstd_logic_vector(3downto0));

endtransform;

architecturetranoftransformis

process(daclk,dis)

variabled:

variabled1,d2,d3,d4:

std_logic_vector(3downto0);

if(daclk'

if(d<

dis)then

if(d1=9andd2=9andd3=9)then

d1:

="

0000"

;

d2:

d3:

d4:

=d4+1;

d:

=d+1;

elsif(d1=9andd2=9)then

=d3+1;

elsif(d1=9)then

=d2+1;

=d1+1;

d:

d1:

d4:

endif;

dg<

=d1;

ds<

=d2;

db<

=d3;

dq<

=d4;

process(daclk,mon)

variablem:

variablem1,m2,m3,m4:

if(m<

mon)then

if(m1=9andm2=9andm3=9)then

m1:

m2:

m3:

m4:

=m4+1;

m:

=m+1;

elsif(m1=9andm2=9)then

=m3+1;

elsif(m1=9)then

=m2+1;

=m1+1;

m:

m1:

mg<

=m1;

ms<

=m2;

mb<

=m3;

mq<

=m4;

endtran;

4.5Sel通过选择器将路程和车费每位分别输出,送到数码管

entityselis

port(c:

instd_logic_vector(2downto0);

instd_logic_vector(3downto0);

da:

outstd_logic_vector(3downto0)

);

endsel;

architectureseofselis

process(c,dg,ds,db,dq,mg,ms,mb,mq)

variableco:

std_logic_vector(2downto0);

co:

=c;

casecois

when"

000"

=>

da<

=dg;

001"

=ds;

010"

=db;

011"

=dq;

100"

=mg;

101"

=ms;

110"

=mb;

111"

=mq;

whenothers=>

null;

endcase;

endse;

4.6W用第一次分频过的脉冲实现八进制计数,为下面实现动态扫描做准备

libr

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

当前位置:首页 > 外语学习 > 韩语学习

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

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