设计流程图

/*信号说明:
clk:系统时钟
rst_n:复位(开始)信号;
finish:结束信号
mile_int:里程整数部分,最大为2047,单位km
mile_dec:里程小数部分,逢九进一
tmp_100price:路费的100倍
sel_seg:数码管位选
seg_led:数码管段选
flag_dec:进位信号
div_cnt:分频计数器
dri_clk:分频后的驱动时钟
display_num:显示数字
data 10-6表示里程(1位小数),5-0表示费用(2位小数)
2km内为起步价7元,超过2km收1.8元/km
*/
module taxi(
input clk,
input rst_n,
input finish,
output reg [10:0]mile_int,//计数行驶路程极限为2^11-1+1=2048km
output reg [3:0]mile_dec,
output reg[17:0]tmp_100price,
output reg [10:0]sel_seg,//数码管位选,前5位是路程,后6位是价格,精确到2位小数
output reg [7:0]seg_led//数码管段选
);
parameter MAX_NUM=2'd2;
parameter CLK_DIV=4'd2;
//车速为36km/h
//为使计费精确到两位小数,1个脉冲10s计数100m
//假设系统时钟5MHz
reg [23:0]sec_cnt;//10秒计数,dri_clk下sec_cnt计满5M次为10s
reg flag_dec;
//分频模块
reg [3:0]div_cnt;//分频计数
reg dri_clk;
wire [3:0]data10;//路程千位
wire [3:0]data9;//路程百位
wire [3:0]data8;//路程十位
wire [3:0]data7;//路程个位
wire [3:0]data6;//路程后1位小数wire [3:0]data5;//价格千元
wire [3:0]data4;//价格百元
wire [3:0]data3;//价格十元
wire [3:0]data2;//价格元
wire [3:0]data1;//价格角
wire [3:0]data0;//价格分
assign data10=mile_int/10'd1000%4'd10;
assign data9=mile_int/10'd100%4'd10;
assign data8=mile_int/4'd10%4'd10;
assign data7=mile_int%4'd10;
assign data6=mile_dec;assign data5=tmp_100price/17'd100000%4'd10;
assign data4=tmp_100price/15'd10000%4'd10;
assign data3=tmp_100price/10'd1000%4'd10;
assign data2=tmp_100price/10'd100%4'd10;
assign data1=tmp_100price/4'd10%4'd10;
assign data0=tmp_100price%4'd10;always@(posedge clk or negedge rst_n)beginif(!rst_n)begindiv_cnt<=1'b0;dri_clk<=1'b0;endelse if(div_cnt==CLK_DIV/2-1)begindri_clk<=~dri_clk;div_cnt<=4'd0;endelse begindiv_cnt<=div_cnt+1'b1;dri_clk<=dri_clk;end
end//里程小数部分模块,mile_dec计一次为0.1km,满10进1
always @(posedge dri_clk or negedge rst_n or posedge finish)beginif(!rst_n)beginsec_cnt<=1'b0;//10s钟计数mile_dec<=4'd0;flag_dec<=1'b0;endelse if(finish==0)beginif(sec_cnt==24'd500)beginif(mile_dec==4'd9)beginsec_cnt<=24'd0;mile_dec<=4'd0;flag_dec<=1'b1;              endelse beginflag_dec<=1'b0;sec_cnt<=24'd0;mile_dec<=mile_dec+1'b1;     endendelse beginflag_dec<=1'b0;mile_dec<=mile_dec;sec_cnt<=sec_cnt+1'b1;endendelse beginsec_cnt<=sec_cnt;
end end
//里程整数部分模块
always @(posedge dri_clk or negedge rst_n)beginif(!rst_n)beginmile_int<=8'd0;endelse if(flag_dec)beginmile_int<=mile_int+1'b1;endelse mile_int<=mile_int;
end
parameter sprice=2'd2;//起步价
//计费模块
//reg[17:0]tmp_price;
always@(posedge dri_clk or negedge rst_n or posedge finish)beginif(!rst_n)begintmp_100price<=6'd0;endelse if(finish==0)if(mile_int<10'd2)begintmp_100price<=18'd700;endelse tmp_100price<=(mile_int*4'd10-5'd20+mile_dec)*5'd18+18'd700;  else tmp_100price<=tmp_100price;
end//数码管显示模块
//reg [10:0]sel,//数码管位选,前5位是路程,后6位是价格,精确到2位小数
//reg [7:0]seg_led//数码管段选
reg flag;
reg [3:0]cnt0;//位选计数
reg [13:0]cnt1;
reg [3:0]display_num;
always @(posedge dri_clk or negedge rst_n)begin//控制刷新速度if(!rst_n)begincnt1<=14'd0;flag<=1'b0;endelse if(cnt1==MAX_NUM-1)begincnt1<=14'd0;flag<=1'b1;    endelse beginflag<=1'b0;cnt1<=cnt1+1'b1;end
endalways @(posedge dri_clk or negedge rst_n)begin//控制位选if(!rst_n)begincnt0<=4'd0;endelse if(flag)beginif(cnt0==4'd10)cnt0<=4'd0;else cnt0<=cnt0+1'b1;endelse cnt0<=cnt0;
endalways @(posedge clk or negedge rst_n)begin//低电平数码管选通if(!rst_n)beginsel_seg<=11'b11111111111;display_num<=4'd0;endelse begincase(cnt0)4'd0:beginsel_seg<=11'b11111111110;display_num<=data0;end4'd1:beginsel_seg<=11'b11111111101;display_num<=data1;end4'd2:beginsel_seg<=11'b11111111011;display_num<=data2;end4'd3:beginsel_seg<=11'b11111110111;display_num<=data3; end   4'd4:beginsel_seg<=11'b11111101111;display_num<=data4;end4'd5:beginsel_seg<=11'b11111011111;display_num<=data5;end4'd6:beginsel_seg<=11'b11110111111;display_num<=data6;end4'd7:beginsel_seg<=11'b11101111111;display_num<=data7;end4'd8:beginsel_seg<=11'b11011111111;display_num<=data8;end4'd9:beginsel_seg<=11'b10111111111;display_num<=data9;end4'd10:beginsel_seg<=11'b01111111111;display_num<=data10;enddefault:beginsel_seg<=11'b11111111111;display_num<=4'd0;endendcaseend
end//数码管显示
always@(posedge dri_clk or negedge rst_n)beginif(!rst_n)seg_led<=8'd11111111;//数码管段选低电平有效else begincase(display_num)4'd0:beginif(cnt0==4'd3||cnt0==4'd8)seg_led<=8'b01000000;else seg_led<=8'b11000000;end4'd1:begin           if(cnt0==4'd3||cnt0==4'd8) seg_led<=8'b01111001;else  seg_led<=8'b11111001;end4'd2:beginif(cnt0==4'd3||cnt0==4'd8)seg_led<=8'b00100100;else seg_led<=8'b10100100;end4'd3:beginif(cnt0==4'd3||cnt0==4'd8)seg_led<=8'b00110000;else seg_led<=8'b10110000;end   4'd4:beginif(cnt0==4'd3||cnt0==4'd8)seg_led<=8'b00011001;else  seg_led<=8'b10011001;end4'd5:beginif(cnt0==4'd3||cnt0==4'd8)seg_led<=8'b00010010;   elseseg_led<=8'b10010010; end4'd6:beginif(cnt0==4'd3||cnt0==4'd8)seg_led<=8'b00000010;else  seg_led<=8'b10000010;end4'd7:beginif(cnt0==4'd3||cnt0==4'd8)seg_led<=8'b01111000;else  seg_led<=8'b11111000;end4'd8:beginif(cnt0==4'd3||cnt0==4'd8)seg_led<=8'b00000000;else  seg_led<=8'b10000000;end4'd9:beginif(cnt0==4'd3||cnt0==4'd8)seg_led<=8'b00010000;else  seg_led<=8'b10010000;enddefault:seg_led<=8'b1111111;endcaseend
endendmodule


复位信号开始为0,拉高后开始计费,可见当路程小于2km时,收费为起步价7元,超过2km后按1.8元/km收费。如图行驶了2.1km,收费7.18元,数码管刷到第1位(路费的角位),数字为1,符合预期。

路程为14.9km,路费此时为30.22元(7+12.9*1.8),此时位选cnt0=1 ,data1为路费(角)为2,数码管刷新到第1位,显示数字为2,符合预期。


此时finish信号被拉高,mile_int,mile_dec和tmp_100price一直保持不变,全程行驶了24.9km,路费为7+22.9*1.8=48.22符合要求,此时位选是第9位(路程百位),数码管显示为0,符合预期。

50--出租车计费器相关推荐

  1. 基于FPGA的数码管显示出租车计费器

    基于FPGA简易出租车计价器设计技术规范 专业:集成电路设计与集成系统 班级:电路1401班 姓名:童峥 学号:05146034 一. 功能描述: 本设计基于FPGA设计并使用Verilog HDL硬 ...

  2. 设计题目:基于CPLD/FPGA的出租车计费器

    一.设计任务及要求: 本设计要求设计一个基于CPLD/FBGA的出租车计费器,其具体要求如下: 1  能够实现计费功能 费用是按行驶的里程进行 计算的,设出租车的起价是6.0元,当里程小于3km时,按 ...

  3. 单片机c语言出租车计时程序,基于单片机的出租车计费(c语言).doc

    基于单片机的出租车计费(c语言) 基于单片机的出租车计费(c语言) 基于proteus仿真 一.设计要求: 1.用实现出租车计费器的设计. 出租车起步开始计程和计费,计程系统按实际公里数计程,计费系统 ...

  4. 出租车收费题目及答案c语言,《基于单片机的出租车计费(c语言)》.doc

    基于单片机的出租车计费(c语言)基于proteus仿真 一.设计要求: 1.用实现出租车计费器的设计. 出租车起步开始计程和计费,计程系统按实际公里数计程,计费系统首先显示起步价(如.0),车行驶2k ...

  5. taxi计费器c语言程序,毕业论文:出租车计费系统(全文完整版)

    <毕业论文:出租车计费系统.doc>由会员分享,可免费在线阅读全文,更多与<毕业论文:出租车计费系统>相关文档资源请在帮帮文库(www.woc88.com)数亿文档库存里搜索. ...

  6. python 北京出租车收费3.45_北京出租车计费标准和价目表

    北京出租车计费标准和价目表 2008-03-17 09:20 北京出租车的价目表是这样的: 1 .每公里 2 元,基价为 3 公里,起价 10 元: 2 .单程 15 公里以上的部分加收 50% 空驶 ...

  7. Java出租车计费问题

    Java出租车计费问题,一个简单小程序助你学会流程控制 出租车问题 出租车计费标准(表1) 任务实施 实现功能 出租车问题 某市出租车计费标准如表1所示. 请根据此标准完成一个出租车计费模拟功能. 能 ...

  8. python出租车计费_python的基础程序——判断语句(以出租车计费为例)

    判断语句用于检测某个条件是否成立.如果成立,则执行判断语句内的程序:否则,跳过判断语句,执行后面的内容.(判断语句分为三类if,else,switch.但python编程语言中一般没有switch). ...

  9. python出租车计费_关于使用Python——写出租车计费系统

    要求: #出租车计费************************************************************************************** # 要 ...

  10. 计算机应用软件系统修改记录,[计算机软件及应用]修改记录_多路计费器.doc

    [计算机软件及应用]修改记录_多路计费器 修改记录_多路计费器 记录要求: 请各相关工程师配合将测试问题反馈或修改建议和问题反馈的修改答复,按时间顺序记录在本文档中,以配合本项目运行. 各工程师也可将 ...

最新文章

  1. python3 sha 系列 hex 加密 以sha256为例
  2. 初学者可能不知道的vue技巧
  3. (数据结构与算法)数组模拟队列和环形队列
  4. react 合并数组_React 常被忽视的细节。
  5. 解析word template返回使用的webservice WSDL和Operation
  6. 学开车不能急于求成,心急上路
  7. C语言实现一维多项式求值
  8. [JavaScript] js获取Html元素的实际宽度高度
  9. 单选按钮用法, 选择的值
  10. linux 命令行域名的解析(DNS) —— dig、host
  11. EntityFramework 学习 一 Entity Framework 查询设计
  12. 计算机原理视频罗克露优酷,5IO系统-2中断-罗克露计算机组成原理课件(绝对与网上视频教程同步)...
  13. 免费试用一年微软云服务【图文并茂】
  14. java实现文件压缩打包(zip打包)(文件相关二)
  15. Nagios安裝与配置
  16. C语言的OOP实践(OOC)
  17. XtraReport实现分栏打印
  18. 关于echart 饼图显示不出来 挖坑总结
  19. 【游戏逆向】FPS网络游戏自动瞄准漏洞分析以及实现二
  20. MySQL修改初始密码三种方法:

热门文章

  1. java卡 apdu_将applet安装到java卡的APDU命令的顺序是什么?
  2. Git克隆仓库代码至本地
  3. PS一键磨皮美白扩展插件Delicious Retouch 5.0 汉化集合版 Win/Mac
  4. 立创3D文件转成stp文件应用到AD中
  5. 自抗扰控制(ADRC)
  6. php 检查货币类型_PHP如何获取货币汇率-百度经验
  7. 科赫雪花c语言程序设计,用 C 语言画科赫雪花
  8. 非平衡电桥电阻计算_用非平衡电桥测量电阻
  9. Android------APP FPS测试
  10. Linux USB驱动-鼠标驱动