通用出租车计费器Basys2开发板verilog出租车计价器出租车打表器代码

名称:出租车计费器Basys2开发板verilog出租车计价器出租车打表器

软件:ISE

语言:Verilog

代码功能:

设计一个出租车计费器,能在 Basys2开发板上实际运行 

1、用开发板上的2个按键输入路程和计时信号,其中一个按键,每按一下,代表输入一个0.5公里的脉冲,另外一个按键,每按一次,代表超时后的1分钟。

2、计费规则为起步价8元,2.5公里内免费,每公里1.6元,每分钟等待0.4元。(计费方式可以自行修改)

3、路程、等待时间和费用都要用开发板上的数码管显示,数码管数目肯定不足,可以用开发板上的开关来切换显示,这一部分也需要自己编写代码实现。

本代码的计费方式可以自行修改。修改以下代码即可:

//定义计费方式,可修改
parameter start_price=15'd80;//起步价8.0元
parameter start_kilometres=8'd25;//2.5公里内起步价
parameter kilometres_price=15'd8;//0.8元每0.5公里
parameter time_price=15'd4;//0.4元每分钟

FPGA代码Verilog/VHDL代码资源下载:www.hdlcode.com

本代码已在Basys2开发板验证,开发板如下,其他开发板可以修改管脚适配:

basys2.png

代码下载:出租车计费器Basys2开发板verilog出租车计价器出租车打表器(代码在文末下载)软件:ISE语言:Verilog代码功能:设计一个出租车计费器,能在 Basys2开发板上实际运行 1、用开发板上的2个按键输入路程和计时信号,其中一个按键,每按一下,代表输入一个0.5公里的脉冲,另外一个按键,每按一次,代表超时后的1分钟。2、计费规则为起步价8元,2.5公里内免费,每公里1.6元,每分钟名称:出租车计费器Basys2开发板verilog出租车计价器出租车打表器(代码在文末下载)软件:ISE语言:Verilog代码功能:设计一个出租车计费器,能在 Basys2开发板上实际运行 1、用开发板上的2个按键输入路程和计时信号,其中一个按键,每按一下,代表输入一个0.5公里的脉冲,另外一个按键,每按一次,代表超时后的1分钟。2、计费规则为起步价8元,2.5公里内免费,每公里1.6元,每分钟icon-default.png?t=N7T8http://www.hdlcode.com/index.php?m=home&c=View&a=index&aid=265

设计文档:

1. 工程文件

2. 程序文件

3. 管脚分配

4. 程序编译

5. RTL图

6. Testbench

7. 仿真图

整体仿真图

按键模块

控制模块

显示模块

部分代码展示:

//控制模块
module taxi_state(
input clk,//标准时钟
input reset,//复位信号,高有效 

input stop,//本次行程结束,停止计费,低有效 
input start,//启动信号,行程开始,低有效 

input one_kilometre,//0.5公里产生一次
input minute_en,//1分钟产生一次

output [7:0] minute_out,//分钟
output [7:0] mileage_out,//里程
output reg [15:0] totel_money_out//合计费用
);

parameter s_idle=3'd0;
parameter s_starting_price=3'd1;//起步价
parameter s_mileage_price=3'd2;//按里程计费
parameter s_stop=3'd3;
parameter s_begin=3'd4;

reg [2:0] state=3'd0;

reg [15:0] totel_money=16'd0;

reg [7:0] mileage=8'd0;//里程
assign mileage_out=mileage;

//里程控制
always@(posedge clk)
if(reset==1)
	mileage<=8'd0;
else
if(state==s_starting_price || state==s_mileage_price )	
	if(one_kilometre==1)
		mileage<=mileage+8'd5;//0.5公里里程加0.5
	else
		mileage<=mileage;
else if(stop==1) 
		mileage<=8'd0;
	else
		mileage<=mileage;

//定义计费方式,可修改
parameter start_price=15'd80;//起步价8.0元
parameter start_kilometres=8'd25;//2.5公里内起步价
parameter kilometres_price=15'd8;//0.8元每0.5公里
parameter time_price=15'd4;//0.4元每分钟
		
always@(posedge clk)
if(reset==1)begin
	state<=s_idle;//reset
	totel_money<=16'd0;
	totel_money_out<=16'd0;
	end
else
	if(stop==1) begin//停止
		state<=s_stop;
		totel_money<=16'd0;
		totel_money_out<=totel_money;//输出合计费用
		end
	else begin
		totel_money_out<=totel_money;//输出合计费用
		case(state)
			s_idle:begin//空闲状态
			    totel_money<=totel_money;
				if(start==1)//启动
					state<=s_begin;
				else
					state<=s_idle;
				end
			s_begin:begin
				state<=s_starting_price;
				totel_money<=start_price;//起步价
				end
			s_starting_price:begin//起步价状态
				if(minute_en==1)//1分钟
					totel_money<=totel_money+time_price;//0.4元每分钟
				else
					;

				if(mileage>=start_kilometres)//大于start_kilometres公里
					state<=s_mileage_price;
				else
					state<=s_starting_price;
				end
			s_mileage_price:begin//车行驶起步公里后按每公里1.6元计费
				if(one_kilometre==1)
					totel_money<=totel_money+kilometres_price;//每公里 1.6元计费
				else if(minute_en==1)//1分钟
					totel_money<=totel_money+time_price;//0.4元每分钟
				else
					;
				end
			s_stop://停止
				state<=s_idle;
			default:state<=s_idle;
		endcase
		end
		
reg [7:0] minute_cnt=8'd0;
//总等待时间计数
always@(posedge clk)
if(reset==1)
	minute_cnt<=8'd0;
else if(state==s_mileage_price || state==s_starting_price)
	if(minute_en==1)//1分钟
		minute_cnt<=minute_cnt+8'd1;//加分钟
	else


  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值