加入星计划,您可以享受以下权益:

  • 创作内容快速变现
  • 行业影响力扩散
  • 作品版权保护
  • 300W+ 专业用户
  • 1.5W+ 优质创作者
  • 5000+ 长期合作伙伴
立即加入

EDA程序设计-出租车计费器

08/27 13:24
957
服务支持:
技术交流群

完成交易后在“购买成功”页面扫码入群,即可与技术大咖们分享疑惑和经验、收获成长和认同、领取优惠和红包等。

虚拟商品不可退

当前内容为数字版权作品,购买后不支持退换且无法转移使用。

加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论
放大
实物图
相关方案
  • 方案介绍
  • 相关文件
  • 相关推荐
  • 电子产业图谱
申请入驻 产业图谱

1  系统设计

1.1 设计要求

1.1.1 设计任务

设计并制作一台出租车计费器。

1.1.2 性能指标要求

① 用EDA实训仪的I/O设备和FPGA实现出租车计费器的设计。

② 出租车起步开始计程和计费,计程系统按实际公里数计程,计费系统首先显示起步价(如7.0),车行驶2km以内,只收起步价7元。

③ 出租车行驶超过2km后,按每公里1.6元在7.0元的基础上增加。

④ 出租车行驶超过10km后(或超过20元路费),每公里加收50%的车费,即车费变为每公里2.4元。

⑤ 出租车达到目的地后,(用一个按钮)计程和计费数据清零,为下一次计费开始。

1.2 设计思路及设计框图

1.2.1设计思路

计程和计费都是十进制位的输入,通过脉冲实现计数。计程通过分频器的输出作为输入,产生的秒脉冲以实现计数功能。计费在LED数码管上分为个位十位(例如起步价为7元,显示器上显示70,三公里时为86......),计程器和计费器在一个程序内完成,分频器用另一个程序完成,并将程序都生成一个元器件,用图形法级联在一起。上硬件仿真后,打开开关输入脉冲,通过上升沿触发使路程计算加一,并使总路计算模块加一,到达相应的公里数后没每公里收费也随之改变。

1.2.2总体设计框图

2.1 总体电路图

2.2 分频器模块

module  fpq_(clk,KS,clk_1s);

input  clk,KS;

output  reg  clk_1s;

reg[26:0]  qs;

always    @(posedge   clk)

if(KS==1)

begin

if(qs==49999999)      qs=0;

else   qs=qs+1;

if(qs==24999999)   clk_1s=0;

else  clk_1s=1;

end

endmodule

分频器

2.3计程计费器模块

module CZCJFQ(clk,clrn,clk2,L1,L2,L3,L4,L5,L6);

input  clk,clrn,clk2;

output L1,L2,L3,L4,L5,L6;

wire[15:0] Q;

reg[7:0]  km;

reg[11:0]  ZJ;

reg  clk1;

reg [6:0] L1,L2,L3,L4,L5,L6;

initial    clk1=1;

always  @(posedge   clk^clk2   or  negedge   clrn)

begin

if(~clrn)   km[3:0]=0;

else   begin

if(km[3:0]==9)   km[3:0]=0;

else  km[3:0]=km[3:0]+1;

if(km[3:0]==9)  clk1=0;

else   clk1=1;

end

end

always  @(posedge  clk1 or  negedge  clrn)

begin

if(~clrn)     km[7:4]=0;

else  begin

if( km[7:4]==9)   km[7:4]=0;

else  km[7:4]= km[7:4]+1;

end

end

initial   ZJ[11:0]=70;

always   @(posedge  clk^clk2  or  negedge   clrn)

begin

if(~clrn) ZJ[11:0]=70;

else   begin

if(ZJ[11:0]>9999)   ZJ[11:0]=70;

else  if(km[7:0]>'h9)   ZJ[11:0]=ZJ[11:0]+24;

else  if(km[7:0]>'h1)   ZJ[11:0]=ZJ[11:0]+16;

else  ZJ[11:0]=ZJ[11:0];

end

end

assign{Q[3:0]}={ZJ[11:0]}%10;

assign{Q[7:4]}={ZJ[11:0]}/10%10;

assign{Q[11:8]}={ZJ[11:0]}/100%10;

assign{Q[15:12]}={ZJ[11:0]}/1000;

路程计费器模块

2.4 组合逻辑模块(部分)

always@ (Q[0],Q[1],Q[2],Q[3])

begin

case ({Q[3],Q[2],Q[1],Q[0]})

4'B0000:L1=7'B1000000;

4'B0001:L1=7'B1111001;

4'B0010:L1=7'B0100100;

4'B0011:L1=7'B0110000;

4'B0100:L1=7'B0011001;

4'B0101:L1=7'B0010010;

4'B0110:L1=7'B0000010;

4'B0111:L1=7'B1111000;

4'B1000:L1=7'B0000000;

4'B1001:L1=7'B0010000;

4'B1010:L1=7'B0001000;

4'B1011:L1=7'B0000011;

4'B1100:L1=7'B1000110;

4'B1101:L1=7'B0100001;

4'B1110:L1=7'B0000110;

4'B1111:L1=7'B0001110;

endcase

end

always@ (Q[4],Q[5],Q[6],Q[7])

begin

case ({Q[7],Q[6],Q[5],Q[4]})

4'B0000:L2=7'B1000000;

4'B0001:L2=7'B1111001;

4'B0010:L2=7'B0100100;

4'B0011:L2=7'B0110000;

4'B0100:L2=7'B0011001;

4'B0101:L2=7'B0010010;

4'B0110:L2=7'B0000010;

4'B0111:L2=7'B1111000;

4'B1000:L2=7'B0000000;

4'B1001:L2=7'B0010000;

4'B1010:L2=7'B0001000;

4'B1011:L2=7'B0000011;

4'B1100:L2=7'B1000110;

4'B1101:L2=7'B0100001;

4'B1110:L2=7'B0000110;

4'B1111:L2=7'B0001110;

endcase

end

.......

3  调试过程

在编程代码和编译过程经常出现问题,尤其是always@(*)语句上经常出错,以及在下载到硬件仿真的时候LED数码管没有反应,在向老师求助答疑后加入了些组合逻辑模块,修改过后的程序能正常编译,之后将程序下载到硬件中,打开开关检查路程计算能正常运行,路程计费计算功能正常,可以达到验收标准。

4  功能测试

4.1 测试仪器与设备

计算机一台

EDA实训仪

4.2 性能指标测试

打开开关后输入脉冲可产生路程计算,随着路程的递增费用也按要求递增,按下按键后数据可清零,也可以通过按下按键自行增加路程。

仿真波形图(部分模块)

需要全部资料可在我的资源里下载,包括程序文档、源程序。

需要完整的资料可在我的资源里下载,也可以加入我的纷传圈子,里面有资源压缩包的百度网盘下载地址及提取码。

纷传 点击用微信打开即可,过程有点繁琐请见谅

  • 有需要资料的可了解一下.docx

相关推荐

电子产业图谱