出租车计费器课程设计报告.docx
- 文档编号:6856377
- 上传时间:2023-01-11
- 格式:DOCX
- 页数:23
- 大小:982.08KB
出租车计费器课程设计报告.docx
《出租车计费器课程设计报告.docx》由会员分享,可在线阅读,更多相关《出租车计费器课程设计报告.docx(23页珍藏版)》请在冰豆网上搜索。
出租车计费器课程设计报告
电子技术课程设计
——出租车计费器
一、设计任务与要求………………………………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硬件描述语言打破了硬件和软件设计人员之间互不干涉的界限,可以使用语言的形式来进行数字系统的硬件结构、行为的描述、直接设计数字电路硬件系统。 通过编程,下载后,该芯片已经具备了原来需要使用复杂的数字电路实现的功能。 更加了解和加深了对编程和调试程序的技巧,进一步提高了上机动手能力,培养了使用设计综合电路的能力,养成了提供文档资料的习惯和规范编程的思想。 在设计程序时,不能妄想一次就将整个程序设计好,反复修改、不断改进是程序设计的必经之路,在设计课程过程中遇到问题是很正常的,但应该将每次遇到的问题记录下来,并分析清楚,以免下次再碰到同样的问题。 课程设计结束了,但是从中学到的知识会让我受益终身。 最后,我衷心地感谢课设期间指导我的老师。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 出租车 计费 课程设计 报告