|
以CPLD/FPGA為主體,設(shè)計(jì)并制作一臺(tái)出租車(chē)計(jì)費(fèi)系統(tǒng)。
基本要求:1、里程顯示,顯示方式為XXX.X,單位為km精確到0.1km
2、里程單價(jià)顯示,顯示方式為X.XX,單位為元/km,根據(jù)每天不同的時(shí)間段有兩種情況:當(dāng)時(shí)間段為06:00~23:00時(shí)單價(jià)為1.40元/km,其他時(shí)間段單價(jià)為1.80元/km;
3、費(fèi)用的計(jì)算及顯示,出租車(chē)的起價(jià)為5.00元,當(dāng)里程小于2km時(shí),按起價(jià)計(jì)算費(fèi)用;當(dāng)里程大于2km時(shí),按下式計(jì)算費(fèi)用:
費(fèi)用=里程×里程單價(jià)+等候時(shí)間×等候單價(jià)
費(fèi)用顯示方式為XXX:XX,單位為元;
4、當(dāng)出租車(chē)在正常運(yùn)行狀態(tài)下,應(yīng)能顯示當(dāng)前的時(shí)間;在熄火的情況下,時(shí)鐘必須正常運(yùn)行,但是可以不顯示時(shí)鐘;
源程序如下:
- module control(clk, //50MHz
- reset, //復(fù)位
- set, //狀態(tài)切換
- start, //計(jì)費(fèi)啟動(dòng)開(kāi)關(guān)
- run, //出租車(chē)運(yùn)行狀態(tài)開(kāi)關(guān)
- price_day_short, //白天近程單價(jià)
- price_day_long, //白天遠(yuǎn)程單價(jià)
- price_night_short, //晚上近程單價(jià)
- price_night_long, //晚上遠(yuǎn)程單價(jià)
- price_wait_time, //等待時(shí)間每分鐘價(jià)格
- one_price_day, //白天起步價(jià)
- one_price_night, //晚上起步價(jià)
- short_distance, //起步價(jià)可行最大里程數(shù)
- long_distance, //最大近程里程數(shù)
- day_time, //白天開(kāi)始時(shí)間
- night_time, //晚上開(kāi)始時(shí)間
- 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 //為了處理小數(shù)點(diǎn),把實(shí)際價(jià)格擴(kuò)大十倍
- begin
- day_time=5; //白天開(kāi)始時(shí)間
- night_time=23; //晚上開(kāi)始時(shí)間
- short_distance=3; //起步價(jià)可行最大里程數(shù)
- long_distance=10; //最大近程里程數(shù)
- price_day_short=24; //實(shí)際價(jià)格2.4元
- price_day_long=36; //實(shí)際價(jià)格3.6元
- price_night_short=31; //實(shí)際價(jià)格3.1元
- price_night_long=47; //實(shí)際價(jià)格4.7元
- one_price_day=140; //實(shí)際價(jià)格14元
- one_price_night=180; //實(shí)際價(jià)格18元
- price_wait_time=10; //實(shí)際價(jià)格1元
- end
-
- initial
- begin
- state<=4'd0;
- end
-
- always@(posedge clk)
- begin
- if(reset==1) //復(fù)位鍵
- state<=4'd0;
- if(set==1) //總狀態(tài)設(shè)置
- if(state>=4'd14)
- state<=4'd1;
- else
- state<=state+4'd1;
-
- // start/run第一功能區(qū)
-
- if(start==1&&state==0) //state=0,該功能可用 //計(jì)費(fèi)啟動(dòng)鍵,每按一次取反一次。
- if(start_out>=4'd2) start_out<=4'd0; //總狀態(tài)設(shè)置
- else start_out<=start_out+4'd1;
-
- if(start_out==0) run_out=1;
-
- if(start_out==1&&run==1&&state==0) //出租車(chē)行駛狀態(tài)鍵,沒(méi)按一次取反一次。
- begin
- run_out=~run_out;
- end
-
- // start/run第二功能區(qū)
-
- add=start; //加,第二功能
- sub=run; //減,第二功能
- if(password==6'b010101) //密碼正確才能更改價(jià)格和參數(shù)
- case(state)
- 4'd0:;
- 4'd1:;
- 4'd2:;
- 4'd3:
- begin
- if(add==1) //白天近程單價(jià)設(shè)置
- 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: //白天遠(yuǎn)程單價(jià)設(shè)置
- 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
復(fù)制代碼
51hei.png (11.55 KB, 下載次數(shù): 64)
下載附件
2022-3-12 22:28 上傳
代碼下載:
czc.7z
(7.27 MB, 下載次數(shù): 8)
2022-3-12 22:30 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
|
評(píng)分
-
查看全部評(píng)分
|