标题:
Verilog HDL语言在QuartusⅡ13.5软件中将出租车计费器基本结构分成5个...
[打印本页]
作者:
liqingshen
时间:
2022-3-12 11:54
标题:
Verilog HDL语言在QuartusⅡ13.5软件中将出租车计费器基本结构分成5个...
以CPLD/FPGA为主体,设计并制作一台出租车计费系统。
基本要求:1、里程显示,显示方式为XXX.X,单位为km精确到0.1km
2、里程单价显示,显示方式为X.XX,单位为元/km,根据每天不同的时间段有两种情况:当时间段为06:00~23:00时单价为1.40元/km,其他时间段单价为1.80元/km;
3、费用的计算及显示,出租车的起价为5.00元,当里程小于2km时,按起价计算费用;当里程大于2km时,按下式计算费用:
费用=里程×里程单价+等候时间×等候单价
费用显示方式为XXX:XX,单位为元;
4、当出租车在正常运行状态下,应能显示当前的时间;在熄火的情况下,时钟必须正常运行,但是可以不显示时钟;
源程序如下:
module control(clk, //50MHz
reset, //复位
set, //状态切换
start, //计费启动开关
run, //出租车运行状态开关
price_day_short, //白天近程单价
price_day_long, //白天远程单价
price_night_short, //晚上近程单价
price_night_long, //晚上远程单价
price_wait_time, //等待时间每分钟价格
one_price_day, //白天起步价
one_price_night, //晚上起步价
short_distance, //起步价可行最大里程数
long_distance, //最大近程里程数
day_time, //白天开始时间
night_time, //晚上开始时间
start_out,
run_out,
state,
password //更改信息的密码
);
input clk,reset,set,start,run;
input [5:0] password;
output [7:0] price_day_short,price_day_long,price_night_short,price_night_long,price_wait_time;
output [11:0] one_price_day,one_price_night;
output [7:0] short_distance,long_distance;
output [7:0] day_time,night_time;
output [3:0] state,start_out;
output run_out;
reg [7:0] price_day_short,price_day_long,price_night_short,price_night_long,price_wait_time;
reg [11:0] one_price_day,one_price_night;
reg [7:0] short_distance,long_distance;
reg [7:0] day_time,night_time;
reg [3:0] state,start_out;
reg run_out,add,sub;
initial //为了处理小数点,把实际价格扩大十倍
begin
day_time=5; //白天开始时间
night_time=23; //晚上开始时间
short_distance=3; //起步价可行最大里程数
long_distance=10; //最大近程里程数
price_day_short=24; //实际价格2.4元
price_day_long=36; //实际价格3.6元
price_night_short=31; //实际价格3.1元
price_night_long=47; //实际价格4.7元
one_price_day=140; //实际价格14元
one_price_night=180; //实际价格18元
price_wait_time=10; //实际价格1元
end
initial
begin
state<=4'd0;
end
always@(posedge clk)
begin
if(reset==1) //复位键
state<=4'd0;
if(set==1) //总状态设置
if(state>=4'd14)
state<=4'd1;
else
state<=state+4'd1;
// start/run第一功能区
if(start==1&&state==0) //state=0,该功能可用 //计费启动键,每按一次取反一次。
if(start_out>=4'd2) start_out<=4'd0; //总状态设置
else start_out<=start_out+4'd1;
if(start_out==0) run_out=1;
if(start_out==1&&run==1&&state==0) //出租车行驶状态键,没按一次取反一次。
begin
run_out=~run_out;
end
// start/run第二功能区
add=start; //加,第二功能
sub=run; //减,第二功能
if(password==6'b010101) //密码正确才能更改价格和参数
case(state)
4'd0:;
4'd1:;
4'd2:;
4'd3:
begin
if(add==1) //白天近程单价设置
if(price_day_short>=8'd99) price_day_short<=8'd0;
else price_day_short<=price_day_short+8'd1;
if(sub==1)
if(price_day_short<=8'd0) price_day_short<=8'd99;
else price_day_short<=price_day_short-8'd1;
end
4'd4: //白天远程单价设置
begin
if(add==1)
if(price_day_long>=8'd99) price_day_long<=8'd0;
else price_day_long<=price_day_long+8'd1;
if(sub==1)
if(price_day_long<=8'd0) price_day_long<=8'd99;
else price_day_long<=price_day_long-8'd1;
end
endcase
end
endmodule
复制代码
51hei.png
(11.55 KB, 下载次数: 64)
下载附件
2022-3-12 22:28 上传
代码下载:
czc.7z
(7.27 MB, 下载次数: 8)
2022-3-12 22:30 上传
点击文件名下载附件
下载积分: 黑币 -5
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1