数字电路出租车计费器.docx
- 文档编号:1100640
- 上传时间:2022-10-17
- 格式:DOCX
- 页数:17
- 大小:294.52KB
数字电路出租车计费器.docx
《数字电路出租车计费器.docx》由会员分享,可在线阅读,更多相关《数字电路出租车计费器.docx(17页珍藏版)》请在冰豆网上搜索。
数字电路出租车计费器
一、课题要求
(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
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数字电路 出租车 计费