(整理)出租车计价器.

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

本计价器的主要功能包括:
计时功能;
计费功能;
计程功能;
LCD显示;
功能:
1)启动计费器,里程计数器和时间计数器从零开始,费用计费器从10元开始计算;
2)根据出租车行驶的里程数和时间(包括停车等待时间)进行计费,当出租车启动在3公里以内,且在等待累计2分钟内时费用计数器复位为起步价10元;
3)当出租车在行驶状态下超过3公里时,每满1公里时,费用计数器加1元;4)当出租车等待时间累计超过2分钟时以每分钟1元计费。

整体设计方案:
Clk 输入 C9;
Sw1输入 L14;
TXD 输出 u8;
Flash_ce 输出 k18;
Lcd_e 输出 M18;
LCD_RW 输出 L17;
LCD_RS 输出 L18;
LCD_d[3:0] 输出 R15 R16 P17 M15; 模块划分
1.分频电路模块:
2. 时间计算模块:
start: 启动信号, 当start 为高电平时出租车开动,选择以公里计费;当start 为低电平
时出租车等待;选择以时间计费
m: 输出的时间分信号
s: 输出的时间秒信号
Time_enable:控制计费的时间信号,当其为高电平时控制计数器按时间数计数
3. 计程功能“
distance_enable: 控制计费的公里信号,当其为高电平时控制计数器按路程计数
distance:输出的公里信号
4.判断控制模块;
select_clk:输出选择的时钟信号5.计费模块:
fee: 输出的费用信号
6.
显示模块:
分频程序:
module div(clk_50M,clk,reset);
input clk_50M;
input reset;
output clk;
wire clk_50M;
wire reset;
reg clk;
reg [7:0] count;
always@ (posedge clk_50M or negedge reset) begin
if(!reset)
begin
count<=0;
clk<=0;
end
else
if(count==8'd100)
begin
count<=8'd0;
clk<=~clk;
end
else
count<=count+1'd1;
end
endmodule
module test;
reg clk_50M;
reg reset;
wire clk;
div u1(.clk_50M(clk_50M),
.reset(reset),
.clk(clk));
initial
#0 clk_50M=1'b0;
always #5 clk_50M=~clk_50M;
initial
begin
#0 reset=1'b0;
#100 reset=1'b1;
end
endmodule
计时激励:
module timemokuai(clk,reset,start,s,m,time_enable);// 端口的定义input clk,reset,start;
output [7:0] s;//输出的秒
output [7:0] m;//输出的分
output time_enable;//输出的控制计费的信号
reg [7:0] s;
reg [7:0] m;
wire time_enable;
always@(posedge clk or negedge reset)//异步复位
begin
if(!reset)//低电平有效
begin //复位
s<=8'd0;
m<=8'd0;
end
else if(!start)//start 信号低电平有效
begin
if(s[3:0]==9)// 秒的低四位是9
begin
s[3:0]<=4'd0;//清零
if(s[7:4]==5) // 秒的高四位是5
begin
s[7:4]<=4'd0; //清零
if(m[3:0]==9) // 分的低奈皇?
begin
m[3:0]<=4'd0; //清零
if(m[7:4]==9) // 分的高四位是9
m[7:4]<=4'd0; //清零
else m[7:4]<=m[7:4]+1'd1; // 分的高四位不是9加一
end
else m[3:0]<=m[3:0]+1'd1; //分的低四位不是9加一
end
else s[7:4]<=s[7:4]+1'd1; // 秒的高四位不是5加一
end
else s[3:0]<=s[3:0]+1'd1; //秒的低四位不是9加一
end//end always
end
assign time_enable=((m[7:0]>8'd2)&&(s[7:0]==8'd0))?1'd1:1'd0; //产生time_enable信号。

endmodule//结束计时
激励:
module test4;
reg clk;
reg reset;
reg start;
wire [7:0] s;
wire [7:0] m;
wire time_enable;
timemokuai u1(.clk(clk),
.reset(reset),
.start(start),
.s(s),
.m(m),
.time_enable(time_enable));
initial
clk=1'b0;
always
#10 clk=~clk;
initial
begin
#0 reset=1'b0;
#100 reset=1'b1;
end
initial
begin
start=1'b0;
#5000 start=1'b1;
end
endmodule
计程模块激励:
module test;
reg clk;
reg start;
reg reset;
wire [7:0] distance;
wire distance_enable;
distancemokuai u1(.clk(clk),
.reset(reset),
.start(start),
.distance(distance),
.distance_enable(distance_enable)); initial
clk=1'b0;
always
#10 clk=~clk;
initial
begin
#0 reset=1'b0;
#100 reset=1'b1;
end
initial
begin
start=1'b1;
#500 start=1'b0;//仿真过程要延迟时间足够长
end
endmodule。

相关文档
最新文档