出租车计费器课程设计报告.docx

上传人:b****6 文档编号:6856377 上传时间:2023-01-11 格式:DOCX 页数:23 大小:982.08KB
下载 相关 举报
出租车计费器课程设计报告.docx_第1页
第1页 / 共23页
出租车计费器课程设计报告.docx_第2页
第2页 / 共23页
出租车计费器课程设计报告.docx_第3页
第3页 / 共23页
出租车计费器课程设计报告.docx_第4页
第4页 / 共23页
出租车计费器课程设计报告.docx_第5页
第5页 / 共23页
点击查看更多>>
下载资源
资源描述

出租车计费器课程设计报告.docx

《出租车计费器课程设计报告.docx》由会员分享,可在线阅读,更多相关《出租车计费器课程设计报告.docx(23页珍藏版)》请在冰豆网上搜索。

出租车计费器课程设计报告.docx

出租车计费器课程设计报告

 

电子技术课程设计

——出租车计费器

 

一、设计任务与要求………………………………3

二、总框体图   ………………………………3

三、选择器件    ………………………………5

四、功能模块   ………………………………6

1、模块se……………………………6

2、模块di ……………………………7

3、模块jifei ……………………………8

4、模块zh…………………………11

5、模块xxx1…………………………15

6、模块div_clk……………………………17

7、模块docode3_8……………………………18

五、总体设计电路图 …………………………19

1、总体电路原理图…………………………19

2、管脚分配图…………………………20

3、电路仿真结果…………………………21

4、硬件验证……………………………21

六、设计心得  ……………………………23

出租车计费器

一、设计任务与要求

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

按行驶里程收费,起步费为7.00元,并在3km后按2.20元/km计费,当计费器计费达到或超过20元时,每公里加收50%的车费,车停止不计费。

2、现场模拟功能:

能模拟汽车启动、停止及暂停以及加速状态。

3、设计动态扫描电路:

将车费和里程显示出来,各有两位小数。

二、总体框图

decode3_8

se

div_clk

图1.1

di

xxx1

zh

jifei

 

1、设计思路:

(1)根据出租车计费原理,将出租车计费部分由5个计数器来完成分别为counterA,counterB,counterC,counterD,counterE。

①计数器A完成车费百位。

②计数器B完成车费十位和个位。

③计数器C完成车费角和分。

④计数器D完成计数到30(完成车费的起步价)。

⑤计数器E完成模拟实现车行驶100m的功能。

(2)行驶过程中车费附加50%的功能:

由比较器实现。

(3)车费的显示:

由动态扫描电路来完成。

用专用模块来实现,完成数据的输入即动

2、设计方案比较:

方案一:

采用数字电路控制。

其原理方框图如图1.21.2所示。

采用传感器件,输出脉冲信号,经过放大整形作为移位寄存器的脉冲,实现计价,但是考虑到这种电路过于简单,性能不够稳定,而且不能调节单价,也不能根据天气调节计费标准,电路不够实用,所以我们不予采用。

图1.2

方案二:

采用单片机控制。

利用单片机丰富的IO端口,及其控制的灵活性,实现基本的里程计价功能和价格调节、时钟显示功能。

其原理如图1.3所示。

单片机方案有较大的活动空间,不但能实现所要求的功能而且能在很大的程度上扩展功能,而且还可以方便的对系统进行升级。

缺点在于实现起来相对比较复杂,因此暂不考虑这种方法。

图1.3

方案三:

采用VHDL语言

VHDL具有功能强大的语言结构,可以用简洁明确的源代码来描述复杂的逻辑控制。

它具有多层次的设计描述功能,层层细化,最后可直接生成电路级描述。

而且它还支持各种设计方法,既支持自底向上的设计,又支持自顶向下的设计;既支持模块化设计,又支持层次化设计。

VHDL采用基于库(Library)的设计方法,可以建立各种可再次利用的模块。

这些模块可以预先设计或使用以前设计中的存档模块,将这些模块存放到库中,就可以在以后的设计中进行复用,可以使设计成果在设计人员之间进行交流和共享,减少硬件电路设计。

除此之外,采用VHDL耗费资源比较小,速度比较快,效率比较高,且易于共享和复用。

故综合以上几点我们选择VHDL语言来设计出租车计费器。

三、选择器件

模块se,模块di,模块jifei,模块zh,模块xxx1,模块div_clk

模块decode3_8

四、功能模块

1、模块se

说明:

模块如图1.4所示,为八进制选择模块实现,该模块主要负责对不同时刻的车费路程的数值显示进行选择。

 

图1.4

以下为该模块的程序:

libraryieee;

useieee.std_logic_1164.all;

useieee.std_logic_unsigned.all;

entityseis

port(clk:

instd_logic;

a:

outstd_logic_vector(2downto0));

endse;

architecturert1ofseis

begin

process(clk)

variableb:

std_logic_vector(2downto0);

begin

if(clk'eventandclk='1')then

if(b="111")then

b:

="000";

else

b:

=b+1;

endif;

endif;

a<=b;

endprocess;

endrt1;

仿真图

图1.5

仿真结果分析:

输入端为:

clk,输出端为:

a,如图1.5所示,在clk的上升沿a开始发生变化,并开始进行计数,当进行到“111”时在下一个上升沿复位为“000”,此模块与“车费路程显示模块”相连接,负责选择显示车费路程。

2、模块di

说明:

模块如图1.6,显示译码模块实现

 

图1.6

以下为该模块的程序:

libraryieee;

useieee.std_logic_1164.all;

entitydiis

port(d:

instd_logic_vector(3downto0);

q:

outstd_logic_vector(6downto0));

enddi;

architecturert1ofdiis

begin

process(d)

begin

casedis

when"0000"=>q<="0111111";

when"0001"=>q<="0000110";

when"0010"=>q<="1011011";

when"0011"=>q<="1001111";

when"0100"=>q<="1100110";

when"0101"=>q<="1101101";

when"0110"=>q<="1111101";

when"0111"=>q<="0100111";

when"1000"=>q<="1111111";

whenothers=>q<="1101111";

endcase;

endprocess;

endrt1;

仿真图

图1.7

仿真结果分析:

输入端为:

d,输出端为:

q,

如图1.7,经过本模块以后,输入端输入的2进制数被7段显示译码器翻译成为相对应的数字显示出来。

3、模块jifei

说明:

计费模块如图1.8所示,输入端口START、STOP、PAUSE、JS分别为汽车起动、停止、暂停、加速按键。

LUC、CHEFEI分别表示汽车行驶的路程及相应的车费。

 

图1.8

以下为该模块的程序:

libraryieee;

useieee.std_logic_1164.all;

useieee.std_logic_unsigned.all;

entityjifeiis

port(clk,start,stop,pause,js:

instd_logic;

chefei,luc:

outintegerrange0to8000);

endjifei;

architecturert1ofjifeiis

begin

process(clk,start,stop,pause,js)

variablea,b:

std_logic;

variableaa:

integerrange0to100;

variablechf,lc:

integerrange0to8000;

variablenum:

integerrange0to9;

begin

if(clk'eventandclk='1')then

if(stop='0')then

chf:

=0;

num:

=0;

b:

='1';

aa:

=0;

lc:

=0;

elsif(start='0')then

b:

='0';

chf:

=700;

lc:

=0;

elsif(start='1'andjs='1'andpause='1')then

if(b='0')then

num:

=num+1;

endif;

if(num=9)then

lc:

=lc+5;

num:

=0;

aa:

=aa+5;

endif;

elsif(start='1'andjs='0'andpause='1')then

lc:

=lc+1;

aa:

=aa+1;

endif;

if(aa>=100)then

a:

='1';

aa:

=0;

else

a:

='0';

endif;

if(lc<300)then

null;

elsif(chf<2000anda='1')then

chf:

=chf+220;

elsif(chf>=2000anda='1')then

chf:

=chf+330;

endif;

endif;

chefei<=chf;

luc<=lc;

endprocess;

endrt1;

仿真图

图1.9

仿真结果分析:

该模块是模拟汽车的启动、停止、暂停、加速按键,输入端口为:

stop,start,pause,js,clk,输出端口为:

b,如图1.9所示,在clk的上升沿,js变为1的时候,计费系统开始计费。

4、模块zh

说明:

如图2.0所示,为十进制转换模块的实现,该模块把车费和路程转化为4位十进制数,daclk的频率要比clk快得多。

 

图2.0

以下为该模块的程序:

libraryieee;

useieee.std_logic_1164.all;

useieee.std_logic_unsigned.all;

entityzhis

port(daclk:

instd_logic;

ascore,bscore:

inintegerrange0to8000;

age,ashi,abai,aqian,bge,bshi,bbai,bqian:

outstd_logic_vector(3downto0));

endzh;

architecturert1ofzhis

begin

process(daclk,ascore)

variablecomb1:

integerrange0to8000;

variablecomb1a,comb1b,comb1c,comb1d:

std_logic_vector(3downto0);

begin

if(daclk'eventanddaclk='1')then

if(comb1

if(comb1a=9andcomb1b=9andcomb1c=9)then

comb1a:

="0000";

comb1b:

="0000";

comb1c:

="0000";

comb1d:

=comb1d+1;

comb1:

=comb1+1;

elsif(comb1a=9andcomb1b=9)then

comb1a:

="0000";

comb1b:

="0000";

comb1:

=comb1+1;

comb1c:

=comb1c+1;

elsif(comb1a=9)then

comb1a:

="0000";

comb1b:

=comb1b+1;

comb1:

=comb1+1;

else

comb1a:

=comb1a+1;

comb1:

=comb1+1;

endif;

else

ashi<=comb1b;

age<=comb1a;

abai<=comb1c;

aqian<=comb1d;

comb1:

=0;

comb1a:

="0000";

comb1b:

="0000";

comb1c:

="0000";

comb1d:

="0000";

endif;

endif;

endprocess;

process(daclk,bscore)

variablecomb2:

integerrange0to8000;

variablecomb2a,comb2b,comb2c,comb2d:

std_logic_vector(3downto0);

begin

if(daclk'eventanddaclk='1')then

if(comb2

if(comb2a=9andcomb2b=9andcomb2c=9)then

comb2a:

="0000";

comb2b:

="0000";

comb2c:

="0000";

comb2d:

=comb2d+1;

comb2:

=comb2+1;

elsif(comb2a=9andcomb2b=9)then

comb2a:

="0000";

comb2b:

="0000";

comb2:

=comb2+1;

comb2c:

=comb2c+1;

elsif(comb2a=9)then

comb2a:

="0000";

comb2b:

=comb2b+1;

comb2:

=comb2+1;

else

comb2a:

=comb2a+1;

comb2:

=comb2+1;

endif;

else

bshi<=comb2b;

bge<=comb2a;

bbai<=comb2c;

bqian<=comb2d;

comb2:

=0;

comb2a:

="0000";

comb2b:

="0000";

comb2c:

="0000";

comb2d:

="0000";

endif;

endif;

endprocess;

endrt1;

 

仿真图

图2.1

仿真结果分析:

输入端为:

Daclk,ascore,bscore,输出端为:

age,ashi,abai,aqian,bge,bshi,bbai,bqian,将车费和路程转换成4位的十进制,如图2.1所示,age,ashi,abai,aqian,分别表示车费的个位,十位,百位和千位的计数显示,在daclk的上升沿发生变化。

bge,bshi,bbai,bqian;分别表示路程的个位,十位,百位和千位的显示,在daclk的下降沿开始发生变化

5、模块xxx1

说明:

如图2.2所示,为车费路程显示模块的实现,通过该八进制模块,车费和路程将被显示出来。

 

图2.2

以下为该模块的程序:

libraryieee;

useieee.std_logic_1164.all;

useieee.std_logic_unsigned.all;

entityxxx1is

port(c:

instd_logic_vector(2downto0);

dp:

outstd_logic;

a1,a2,a3,a4,b1,b2,b3,b4:

instd_logic_vector(3downto0);

d:

outstd_logic_vector(3downto0));

endxxx1;

architecturert1ofxxx1is

begin

process(c,a1,a2,a3,a4,b1,b2,b3,b4)

variablecomb:

std_logic_vector(2downto0);

begin

comb:

=c;

casecombis

when"000"=>d<=a1;dp<='0';

when"001"=>d<=a2;dp<='0';

when"010"=>d<=a3;dp<='1';

when"011"=>d<=a4;dp<='0';

when"100"=>d<=b1;dp<='0';

when"101"=>d<=b2;dp<='0';

when"110"=>d<=b3;dp<='1';

when"111"=>d<=b4;dp<='0';

whenothers=>null;

endcase;

endprocess;

endrt1;

仿真图:

图2.3

仿真结果分析:

输入端为:

c,a1,a2,a3,a4,b1,b2,b3,b4,输出端为:

dp,d,该模块是将车费和路程显示出来,每来一个选通地址c,模块就把选到的那一位十进制输入值向后输出,同时在路程的百位和费用的十位显示小数点。

6、模块div_clk

 

图2.4

以下为该模块的程序:

LIBRARYieee;

useieee.std_logic_1164.all;

useieee.std_logic_unsigned.all;

ENTITYdiv_clkIS

PORT(clk_in:

INstd_logic;

div_out:

OUTstd_logic);

ENDdiv_clk;

ARCHITECTUREaOFdiv_clkIS

SIGNALfre_N:

integerrange0to100000;

SIGNALclk_tmp:

std_logic;

BEGIN

div_out<=clk_tmp;

process(clk_in)

begin

iffalling_edge(clk_in)then

iffre_N>=99999then

fre_N<=0;

clk_tmp<=notclk_tmp;

else

fre_N<=fre_N+1;

endif;

endif;

endprocess;

ENDa;

7、模块decode3_8

说明:

模块decode3_8驱动数码管的显示。

图2.5

以下为该模块的程序:

LIBRARYieee;

useieee.std_logic_1164.all;

useieee.std_logic_unsigned.all;

ENTITYdecode3_8IS

PORT(SEL:

INstd_logic_vector(2downto0);

Q:

OUTstd_logic_vector(7downto0)

);

ENDdecode3_8;

ARCHITECTUREaOFdecode3_8IS

BEGIN

Q<="11111110"whensel=0else

"11111101"whensel=1else

"11111011"whensel=2else

"11110111"whensel=3else

"11101111"whensel=4else

"11011111"whensel=5else

"10111111"whensel=6else

"01111111"whensel=7else

"11111111";

ENDa;

五、总体设计电路图

1、总体电路原理图

W

图2.6

2、管脚分配图

图2.7

3、电路仿真结果

图2.8

4、硬件验证

左边为路程,右边为车费。

 

图2.9

 

 

图3.0

 

 

图3.1

图3.2

六、设计心得

短短两周的课程设计已经完成了,从挑选课设题目,查阅资料,到研究出

总体设计,详细设计,再到最后的编程上机调试,修改程序,完善程序,收获颇多。

出租车计费器系统的设计已全部完成,能按预期的效果进行模拟汽车启动、停止、暂停等功能,并设计动态扫描电路显示车费数目,由动态扫描电路来完成。

车暂时停止不计费,车费保持不变。

若停止则车费清零,等待下一次计费的开始。

出租车计费器系统的设计已全部完成,能按预期的效果进行模拟汽车启动、停止、暂停等功能,并设计动态扫描电路显示车费数目,由动态扫描电路来完成。

车暂时停止不计费,车费保持不变。

若停止则车费清零,等待下一次计费的开始。

在出租车计费系统的7个模块中,重点在于jifei模块,zh模块、xxx1模块。

jifei模块主要有汽车的启动、停止、暂停、加速按键;zh模块主要是把车费和路程转化为4位十进制;zh模块是将车费和路程显示出来。

各模块完成后,在将它们组合成完整的出租车系统,在设计过程中还需要改进的是控制系统的纠错功能。

出租车计费系统的设计中体现了VHDL覆盖面广,描述能力强,是一个多层次的硬件描述语言及PLD器件速度快,使用方便,便于修改等特点,本设计在实用方面具有一定的价值。

在这两周里我们再次熟悉和增强了对vhdl语言的基本知识,熟悉利用vhdl语言对常用的组合逻辑电路和时序逻辑电路编程,把编程和实际结合起来。

Vhdl硬件描述语言打破了硬件和软件设计人员之间互不干涉的界限,可以使用语言的形式来进行数字系统的硬件结构、行为的描述、直接设计数字电路硬件系统。

通过编程,下载后,该芯片已经具备了原来需要使用复杂的数字电路实现的功能。

更加了解和加深了对编程和调试程序的技巧,进一步提高了上机动手能力,培养了使用设计综合电路的能力,养成了提供文档资料的习惯和规范编程的思想。

在设计程序时,不能妄想一次就将整个程序设计好,反复修改、不断改进是程序设计的必经之路,在设计课程过程中遇到问题是很正常的,但应该将每次遇到的问题记录下来,并分析清楚,以免下次再碰到同样的问题。

课程设计结束了,但是从中学到的知识会让我受益终身。

最后,我衷心地感谢课设期间指导我的老师。

 

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

当前位置:首页 > 总结汇报

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

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