出租车计价器设计方案和功能介绍(verilog、fpga)(编辑修改稿)内容摘要:

art_out==1amp。 amp。 run==1amp。 amp。 state==0) //出租车行驶状态键,没按一次取反一次。 begin run_out=~run_out。 end // start/run第二功能区 add=start。 //加 ,第二功能 sub=run。 //减 ,第二功能 if(password==639。 b010101) //密码正确才能更改价格和参数 case(state) 439。 d0:。 439。 d1:。 439。 d2:。 439。 d3: begin if(add==1) //白天近程单价设置 if(price_day_short=839。 d99) price_day_short=839。 d0。 11 else price_day_short=price_day_short+839。 d1。 if(sub==1) if(price_day_short=839。 d0) price_day_short=839。 d99。 else price_day_short=price_day_short839。 d1。 end 439。 d4: //白天远程单价设置 begin if(add==1) if(price_day_long=839。 d99) price_day_long=839。 d0。 else price_day_long=price_day_long+839。 d1。 if(sub==1) if(price_day_long=839。 d0) price_day_long=839。 d99。 else price_day_long=price_day_long839。 d1。 end endcase end endmodule 2 里程计数 模块 //里程计算模块 module distance(clk, //1Hz start, //计费启动开关 run, //出租车运行状态开关 distance //里程 )。 input clk,run。 input [3:0] start。 output [15:0] distance。 reg [15:0] distance,count,count1。 always@(posedge clk) begin if(start==0) count=0。 //清零 if(start==1amp。 amp。 run==1) begin if(count1=4) begin count1=0。 count=count+1。 end //为了方便模拟,出租车每秒走 else count1=count1+1。 end 12 distance=count。 end endmodule 3 时钟 模块 //时钟模块 //为系统提供时间 module clock(clk, //1Hz 时钟 hour_out, //时,显示时间 min_out, //分,显示时间 sec_out, //秒 , 显示时间 )。 input clk。 output [7:0] hour_out,min_out,sec_out。 reg [7:0] hour_out,min_out,sec_out。 initial begin hour_out=12。 min_out=0。 sec_out=0。 end always @(posedge clk) begin if(sec_out59) begin sec_out=sec_out+739。 b1。 end if(sec_out==59) begin sec_out=0。 if(min_out59) min_out=min_out+739。 b1。 end if(min_out==59) begin min_out=0。 if(hour_out23) hour_out=hour_out+739。 b1。 end 13 if(hour_out==23) begin hour_out=0。 end end endmodule 4 等待时间计数 模块 //等待时间模块 module wait_time (clk, //1Hz start, //计费启动开关 run, //出租车运行状态开关 led_stop, wait_time //等待时间 )。 input clk,run。 input [3:0] start。 output [15:0] wait_time。 output led_stop。 reg [15:0] wait_time,count。 reg led_stop。 always@(posedge clk) begin if(start==0) wait_time=0。 //清零 if(start==1amp。 amp。 run==0) //计价开关为 1,且车状态位 0,开始计时 begin led_stop=1。 if(count10) count=count+1639。 b1。 //为了便于模拟,每 10s,当做一分钟 else begin count=0。 wait_time=wait_time+1。 end end else begin led_stop=0。 end end endmodule 14 5 计价 模块 // 计价模块 //根据里程、时钟、等待时间计算出总价 //里程:判断远程和近程 //时钟:判断白天和晚上 //价格单位:元 //里程单位:千米 //等待时间单位 :分钟 //时间和里程为整数 //价格为小数 module charge(clk, //50MHz start, //计费启动开关 run, //出租车运行状态开关 distance, //里程 hour, //时钟,时 min, //时钟,分 sec, //时钟,秒 wait_time, //等待时间 day_time, //白天开始时间 night_time, //晚上开始时间 short_distance, //起步价可行最大里程数 long_distance, //最大近程里程数 price_day_short, //白天近程单价 price_day_long, //白天远程单价 price_night_short, //晚上近程单价 price_night_long, //晚上远程单价 one_price_day, //白天起步价 one_price_night, //晚上起步价 price_wait_time, //等待时间每分钟价格 charge, //总费用 total_charge, total_distance )。 input clk,run。 input [3:0] start。 input [7:0] hour,min,sec,day_time,night_time。 input [7:0。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。