以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
|