找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2391|回复: 0
打印 上一主题 下一主题
收起左侧

EDA出租车计价器和时钟设计 Verilog源程序

[复制链接]
跳转到指定楼层
楼主
   设计并制作一台出租车计费器。
1.1.2 性能指标要求  
  ① 用EDA实训仪的I/O设备和PLD芯片实现出租车计费器的设计。
  ② 出租车起步开始计程和计费,计程系统按实际公里数计程,计费系统首 先显示起步价(如7.0),车行驶2km以内,只收起步价7元。
  ③ 出租车行驶超过2km后,按每公里1.6元在7.0元的基础上增加。
  ④ 出租车行驶超过10km后(或超过20元路费),每公里加收50%的车费,即车费变为每公里2.4元。
  ⑤ 出租车达到目的地后,(用一个按钮)计程和计费数据清零,为下一次计费开始。

1.2 设计思路及设计框图
1.2.1设计思路
出租车计费器的整体结构包括:分频模块、计费器模块以及选择模块。
另外我拓展了变速模块、亮灯模块、计时器模块。
通过不同频率的分频模块产生一个脉冲信号模拟汽车的启动与停止,然后通过计数模块,计算出一共所行驶的路程,最后通过记费模块,将所行驶的路程计算出相对应的价钱。计费显示起步价7元,2km之内为起步价,以后每1km在起步价7元的基础上增加1.6元;超过10km以后,每1km增加2.4元。通过自己设定的公式计算出费用,这就是计费模块。结合生活中的出租车计费器,分别有2km以内,10km以内以及超过10Km以后的计费标准。我设计用拨动开关来实现清零与车速的转换,并通过数码管来显示路程与车费。每产生一个脉冲就代表前进了一公里,因此,脉冲频率的快慢就是车速的快慢,脉冲的多少就是路程,这就是车速以及路程的计算;当路程的脉冲只在两个以内,就只有7元起步价。于是便实现了车行驶2km以内,只收起步价7元。行驶超过2km后,按每公里1.6元在7.0元的基础上增加。行驶超过10km后(或超过20元路费),每公里加收50%的车费,即车费变为每公里2.4元。
1.2.2总体设计框图

附录2:程序清单

1秒分频器   
module fpq1(clk,clk_1s);
input clk;

output regclk_1s;

reg[24:0]counter;

always@(posedge clk)

begincounter=counter+'b1;

  if(counter==20000000)counter=0;
  else if(counter<=10000000)clk_1s='b0;
  else clk_1s='b1;
  end
endmodule



    2秒分频器
module fpq1(clk,clk_1s);
input clk;
output reg clk_1s;
reg[24:0] counter;
always @(posedge clk)
begin counter=counter+'b1;
  if(counter==20000000)counter=0;

  elseif(counter<=10000000)clk_1s='b0;

  elseclk_1s='b1;

  end
endmodule


0.5秒分频器
module fpq5(clk,clk_5s);
input clk;
output reg clk_5s;
reg[24:0] counter;
always @(posedge clk)
begin counter=counter+'b1;

if(counter==10000000)counter=0;

  elseif(counter<=5000000)clk_5s='b0;

  elseclk_5s='b1;

  end
endmodule


速度选择
module suduxz(k1,k2,clk1,clk2,clk5,speed);
input clk1,clk2,clk5,k1,k2;
output reg speed;

always@(posedge clk1 or posedge clk2 or posedge clk5)
begin
case({k1,k2})
'b00:speed=0;
'b01:speed=clk2;
'b10:speed=clk1;
'b11:speed=clk5;
endcase
  end
endmodule


记录路程
module jsq99(clr,clk,q,cout,a);
input clk,clr,a;
output reg[7:0]q;
output reg cout;

always @(posedge clk or negedge clr)
begin
if(~clr) q=0;
else begin
if(a==0)
begin
if(q=='h99) q=0;
else q=q+1;
if(q[3:0]=='ha)
begin
q[3:0]=0;
q[7:4]=q[7:4]+1;
end
if(q==0) cout=1;
else cout=0;end
end
end
endmodule




计费器
module jf(clk,clrn,q,k2);
input clk,k2;
input clrn;
output reg[11:0] q;
reg[3:0] c;
always @(posedge clk or negedge clrn)
begin

   if(~clrn)begin c=0;q=0;end

    else begin
     if(k2==0)
     begin
       if(c<14) c=c+1;
       if(c<=2) q[7:4]=7;
       else if(c<=10)
       begin
           q[3:0]=q[3:0]+6;q[7:4]=q[7:4]+1;

           if(q[3:0]>9)beginq[3:0]=q[3:0]-10;q[7:4]=q[7:4]+1;end

           if(q[7:4]>9)beginq[7:4]=q[7:4]-10;q[11:8]=q[11:8]+1; end

       end

   elseif(c>10)

       begin
           q[3:0]=q[3:0]+4;q[7:4]=q[7:4]+2;

           if(q[3:0]>9)beginq[3:0]=q[3:0]-10;q[7:4]=q[7:4]+1;end

           if(q[7:4]>9)beginq[7:4]=q[7:4]-10;q[11:8]=q[11:8]+1;end

            end
   end     if(c>14) c=11;end
   end
endmodule     

60秒计时器
module cnt60(clk,clr,q,cout);
input clk,clr;
output reg cout;
output reg[7:0] q;
reg[7:0] q_temp;
always @(posedge clk,negedge clr)
begin

      if(~clr)q_temp=0;

      elsebegin

        if(q_temp==59)q_temp=0;

         elseq_temp=q_temp+'b1;

         

        if(q_temp==59)cout=1;

         elsecout=0;

             end

              
q[3:0]=q_temp%10;
q[7:4]=q_temp/10;              
end
endmodule



24秒计时器
module cnt24(clk,clr,q,cout);
input clk,clr;
output reg cout;
output reg[7:0] q;
always @(posedge clk,negedge clr)
begin

      if(~clr)q=0;

      elsebegin

                if(q=='h23)   q=0;

                else q=q+'b1;

                if(q[3:0]=='ha) begin  q[3:0]='b0;

                                       q[7:4]=q[7:4]+'b1;

                                 end

                if(q=='h23)   cout=1;

                else    cout=0;

             end

end
endmodule



选择器
     module xzq(k,qm,qf,qs,q,ql,sum);
input k;

input[7:0]qm,qf,qs,ql;

input[11:0]sum;

outputreg[23:0] q;


always
begin  
if(k==0) begin

   q[7:0]=ql;q[11:8]=0;q[23:12]=sum; end

    elseq[23:0]={qs,qf,qm};

    end
    Endmodule



注:全文设置为固定值20

51hei.png (14.11 KB, 下载次数: 64)

51hei.png

eda出租车计价器和时钟.rar

985.2 KB, 下载次数: 35, 下载积分: 黑币 -5

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表