数字电路出租车计费器.docx

上传人:b****1 文档编号:1100640 上传时间: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

数字电路出租车计费器

 

一、课题要求

(1)技术要求

1.掌握较复杂逻辑的设计、调试。

2.进一步掌握用VHDL语言设计数字逻辑电路。

3.掌握用quartusII6.0软件进展编程设计。

(2)功能要求

1.能实现计费功能,计费标准为:

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

每公里加收50%的车费,车停顿不计费

2.实现预置功能、每公里收费、车行驶加费里程。

3.实现模拟功能:

能模拟汽车启动、停顿、暂停、车速等状态。

4.设计动态扫描电路

将车费显示出来。

有两位小数。

5.用VHDL语言设计符合上述功能要求的出租车计费器。

并用层次化设计方法设计该电路。

6.各计数器的技术状态用功能的方法验证,并用有关波形确认电路设计是否正确

7.完成电路全部设计后,通过系统试验箱下载验证设计课题的正确性。

二本人工作:

本人主要负责软件和硬件电路方面的设计,并进展引脚设定,以及与软硬件之间的调试运行,及时修改程序,帮助查找和分析问题,确保能够成功完成出租车计费器的设计。

三设计方案:

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<=data+1;

endif;

endif;

clkout<=Q;

endprocess;

endone;

4.2twoMHZ:

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

libraryieee;

useieee.std_logic_1164.all;

entitytwoMHZis

port(daclk:

instd_logic;

clkout:

outstd_logic);

endtwoMHZ;

architectureoneoftwoMHZis

signaldata:

integerrange0to2500;

signalQ:

std_logic;

begin

process(daclk)

begin

ifdaclk'eventanddaclk='1'then

if(data=2500)then

data<=0;

Q<=notQ;

else

data<=data+1;

endif;

endif;

clkout<=Q;

endprocess;

endone;

4.3Charge:

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

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

有两位小数。

libraryieee;

useieee.std_logic_1164.all;

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='1')then

if(tz='0')then

dis1:

=0;mon1:

=0;

elsif(ks='0')then

dis1:

=0;mon1:

=700;

elsif(ks='1'andtz='1'andzt='1')then

dis1:

=dis1+10;

elsif(ks='1'andtz='1'andzt='0')then

dis1:

=dis1;mon1:

=mon1;

endif;

if(dis1<300)thennull;

elsif(dis1<600anddis1>300)then

mon1:

=mon1+22;

elsif(dis1>=600)then

mon1:

=mon1+33;

endif;

mon<=mon1;dis<=dis1;

endif;

endprocess;

endch;

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

libraryieee;

useieee.std_logic_1164.all;

useieee.std_logic_unsigned.all;

entitytransformis

port(daclk:

std_logic;

dis,mon:

integerrange0to9999;

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

outstd_logic_vector(3downto0));

endtransform;

architecturetranoftransformis

begin

process(daclk,dis)

variabled:

integerrange0to9999;

variabled1,d2,d3,d4:

std_logic_vector(3downto0);

begin

if(daclk'eventanddaclk='1')then

if(d

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

d1:

="0000";d2:

="0000";d3:

="0000";

d4:

=d4+1;d:

=d+1;

elsif(d1=9andd2=9)then

d1:

="0000";d2:

="0000";d3:

=d3+1;d:

=d+1;

elsif(d1=9)then

d1:

="0000";d2:

=d2+1;d:

=d+1;

else

d1:

=d1+1;d:

=d+1;

endif;

else

d:

=0;d1:

="0000";d2:

="0000";d3:

="0000";d4:

="0000";

endif;

endif;

dg<=d1;ds<=d2;db<=d3;dq<=d4;

endprocess;

process(daclk,mon)

variablem:

integerrange0to9999;

variablem1,m2,m3,m4:

std_logic_vector(3downto0);

begin

if(daclk'eventanddaclk='1')then

if(m

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

m1:

="0000";m2:

="0000";m3:

="0000";m4:

=m4+1;m:

=m+1;

elsif(m1=9andm2=9)then

m1:

="0000";m2:

="0000";m3:

=m3+1;m:

=m+1;

elsif(m1=9)then

m1:

="0000";m2:

=m2+1;m:

=m+1;

else

m1:

=m1+1;m:

=m+1;

endif;

else

m:

=0;m1:

="0000";m2:

="0000";m3:

="0000";m4:

="0000";

endif;

endif;

mg<=m1;ms<=m2;mb<=m3;mq<=m4;

endprocess;

endtran;

 

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

libraryieee;

useieee.std_logic_1164.all;

useieee.std_logic_unsigned.all;

entityselis

port(c:

instd_logic_vector(2downto0);

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

instd_logic_vector(3downto0);

da:

outstd_logic_vector(3downto0)

);

endsel;

architectureseofselis

begin

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

variableco:

std_logic_vector(2downto0);

begin

co:

=c;

casecois

when"000"=>da<=dg;

when"001"=>da<=ds;

when"010"=>da<=db;

when"011"=>da<=dq;

when"100"=>da<=mg;

when"101"=>da<=ms;

when"110"=>da<=mb;

when"111"=>da<=mq;

whenothers=>null;

endcase;

endprocess;

endse;

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

libr

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

当前位置:首页 > 党团工作 > 入党转正申请

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

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