名称:出租车计费器设计Verilog代码Quartus 正点原子新起点开发板(文末获取)
软件:Quartus
语言:Verilog
代码功能:
出租车计费器
1、起步费为10元,3公里
2、车行驶 3公里后按每公里 2元计费
3、若总公里数超过20公里,需加收10元空载返程费
4、停车每5分钟3元计费
本代码已在正点原子新起点开发板验证,正点原子新起点开发板如下,其他开发板可以修改管脚适配:
1. 工程文件
2. 程序文件
3. 程序编译
4. RTL图
5. 管脚分配
部分代码展示:
module taxi_state( input clk,//标准时钟,50MHz input reset,//复位信号 input stop,//中途暂停 input start,//启动信号,行程开始,高有效 input one_kilometre,//1公里产生一次脉冲 output [7:0] minute,//等待时间 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_highmileage_price=3'd3; parameter s_stop_1=3'd4; parameter s_stop_2=3'd5; parameter s_stop_3=3'd6; 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 or posedge reset) if(reset==1) mileage<=8'd0; else if(state==s_starting_price || state==s_mileage_price || state==s_highmileage_price) if(one_kilometre==1) mileage<=mileage+8'd1;//一公里里程加1 else mileage<=mileage; reg minute_en=0; reg [31:0] count_min=32'd0; always@(posedge clk or posedge reset) if(reset==1)begin count_min<=0; minute_en<=0; end else if(state==s_stop_1 || state==s_stop_2 || state==s_stop_3) if(count_min>=32'd3000000000)begin//1分钟=50000000*60 count_min<=0; minute_en<=1; end else begin count_min<=count_min+1; minute_en<=0; end reg [7:0] wait_minute=8'd0;//等待分钟数 assign minute=wait_minute; reg five_minutes_en=0;//5分钟计时信号 always@(posedge clk or posedge reset) if(reset==1) wait_minute<=8'd0; else if(minute_en) wait_minute<=wait_minute+8'd1;//等待分钟数 else wait_minute<=wait_minute;
源代码
点击下方的公众号卡片获取