【正文】
出租車計(jì)費(fèi)系統(tǒng)項(xiàng)目設(shè)計(jì)方案 系統(tǒng)設(shè)計(jì)要求 以CPLD/FPGA為主體,設(shè)計(jì)并制作一臺(tái)出租車計(jì)費(fèi)系統(tǒng)。 1.計(jì)費(fèi)及顯示 (1) 里程,即汽車行駛里程,用四位數(shù)字顯示,顯示方式為“”,單位為km, km。 (2) 單價(jià),即里程單價(jià),用三位數(shù)字顯示,顯示方式為“”,單價(jià)為元/km,根據(jù)每天不同的時(shí)間段有兩種情況:當(dāng)時(shí)間段為06:00~23:。 (3) 等候時(shí)間,用四位數(shù)字顯示分鐘和秒,顯示方式為“XX:XX”,等候的定義是:當(dāng)汽車行駛速度小于或等于12 km/h時(shí)為“等候”。 (4) 等候單價(jià),等候單價(jià)有兩種情況:在等候時(shí)間小于1小時(shí)的情況下,等候單價(jià)為1元每5分鐘;在等候時(shí)間大于1小時(shí)的情況下,等候單價(jià)為20元每小時(shí)。 (5) 費(fèi)用的計(jì)算,當(dāng)里程小于2 km時(shí),按起價(jià)計(jì)算費(fèi)用;當(dāng)里程大于2 km時(shí)按下式計(jì)算費(fèi)用: 費(fèi)用=里程╳里程單價(jià)+等候時(shí)間╳等候單價(jià) (6) 費(fèi)用的顯示,用五位數(shù)字顯示,顯示方式為“”,單價(jià)為元。 2.時(shí)鐘及顯示 當(dāng)出租車在常運(yùn)狀態(tài)下,應(yīng)能顯示當(dāng)前的時(shí)間。在汽車熄火的情況下,時(shí)鐘必須正常運(yùn)行,但是可以不顯示時(shí)鐘。 3.計(jì)費(fèi)開始提示 當(dāng)出租車載上乘客并起步后,將空車指示牌扳倒時(shí),空車指示牌里的指示燈熄滅,并有語音或燈光提示信號(hào)。 系統(tǒng)設(shè)計(jì)方案 系統(tǒng)總體設(shè)計(jì)方案 本系統(tǒng)擬采用單片機(jī)和FPGA的結(jié)合進(jìn)行系統(tǒng)的主體設(shè)計(jì)。 測(cè)控FPGA的VHDL程序設(shè)計(jì) 根據(jù)系統(tǒng)的設(shè)計(jì)要求,我們可將整個(gè)測(cè)控FPGA系統(tǒng)CZJFXT分為七個(gè)模塊,它們分別是:分頻器模塊FPQ,等待判別模塊DDPB,里程計(jì)算模塊LCJS,里程計(jì)費(fèi)模塊LCJF,等待計(jì)時(shí)模塊DDJS,等待計(jì)費(fèi)模塊DDJF,輸出數(shù)據(jù)選擇模塊SCXZ。 分頻器模塊FPQ:將外部時(shí)鐘信號(hào)SCLK(設(shè)計(jì)時(shí)假設(shè)為200 Hz)經(jīng)過適當(dāng)分頻后,產(chǎn)生1 Hz的系統(tǒng)工作用基準(zhǔn)時(shí)鐘信號(hào)CLK1HZ,供系統(tǒng)中的有關(guān)模塊計(jì)時(shí)用。 等待判別模塊DDPB:根據(jù)速度傳感器脈沖信號(hào)WCLK和分頻器產(chǎn)生的基準(zhǔn)時(shí)鐘信號(hào)CLK1HZ,計(jì)算單位時(shí)間里WCLK的脈沖個(gè)數(shù)(每km產(chǎn)生1000個(gè)脈沖信號(hào),即每米產(chǎn)生1個(gè)脈沖信號(hào)),亦即出租車行駛速度,從而判別出租車是否處于等待狀態(tài),發(fā)出等待標(biāo)志信號(hào)DDBZ。 里程計(jì)算模塊LCJS:根據(jù)速度傳感器脈沖信號(hào)WCLK和等待標(biāo)志DDBZ,對(duì)出租車行駛的里程數(shù)XSLC進(jìn)行計(jì)算,同時(shí)發(fā)出里程標(biāo)志信號(hào)LCBZ和里程計(jì)費(fèi)標(biāo)志信號(hào)JFBZ。 里程計(jì)費(fèi)模塊LCJF:在計(jì)費(fèi)標(biāo)志信號(hào)JFBZ、等待標(biāo)志信號(hào)DDBZ、里程標(biāo)志信號(hào)LCBZ和時(shí)段標(biāo)志信號(hào)XDBZ等信號(hào)的控制下,計(jì)算行駛里程超過2 km以上里程的費(fèi)用LCFY。 等待計(jì)時(shí)模塊DDJS:在等待標(biāo)志信號(hào)DDBZ和基準(zhǔn)時(shí)鐘信號(hào)CLK1HZ的控制下,進(jìn)行等待時(shí)間DDSJ的計(jì)算,其中DDSJ的低8位表示等待時(shí)間的秒數(shù),DDSJ的高8位表示等待時(shí)間的分鐘數(shù),同時(shí)根據(jù)等待時(shí)間的長(zhǎng)短發(fā)出一個(gè)熄燈標(biāo)志信號(hào)XDBZ。 等待計(jì)費(fèi)模塊DDJF:在等待標(biāo)志信號(hào)DDBZ和熄燈標(biāo)志信號(hào)XDBZ控制下,進(jìn)行等待費(fèi)用DDFY的計(jì)費(fèi)操作。 輸出數(shù)據(jù)選擇模塊SCXZ :根據(jù)單片機(jī)發(fā)出的數(shù)據(jù)傳輸選擇控制信號(hào)SEL,選擇有關(guān)計(jì)算處理結(jié)果傳輸給單片機(jī)。 單片機(jī)控制程序設(shè)計(jì) 單片機(jī)模塊包括單片機(jī)AT89C51及其控制的顯示和鍵盤系統(tǒng),(略 )所示。 AT89C51對(duì)FPGA的數(shù)據(jù)進(jìn)行運(yùn)算,計(jì)算出用車總費(fèi)用并送顯示系統(tǒng)顯示,同時(shí)它接收鍵盤信息并處理顯示切換。系統(tǒng)采用6+1顯示,6個(gè)數(shù)碼管作常規(guī)顯示,一個(gè)數(shù)碼管作狀態(tài)顯示。按鍵共有5個(gè),分別是功能切換鍵、確定鍵、修改鍵、啟動(dòng)模擬鍵和空車牌壓下模擬鍵。~。 主 要 源 程 序 主要VHDL源程序 1.分頻器模塊FPQ的VHDL源程序 LIBRARY IEEE。 USE 。 USE 。 USE 。 ENTITY FPQ IS PORT(SCLK: IN STD_LOGIC。 SCLK=200 Hz CLK1HZ: OUT STD_LOGIC)。 CLK1HZ=1 HzEND ENTITY FPQ。 ARCHITECTURE ART OF FPQ IS SIGNAL CNT100: INTEGER RANGE 0 TO 99。 SIGNAL CLK1: STD_LOGIC。 BEGIN PROCESS(SCLK)BEGIN IF SCLK39。EVENT AND SCLK=39。139。 THEN IF CNT100=99 THEN CNT100=0。 CLK1=NOT CLK1。 ELSE CNT100=CNT100+1。 END IF。 ELSE CLK1=CLK1。 END IF。 CLK1HZ=CLK1。 END PROCESS。END ARCHITECTURE ART。2.等待判別模塊DDPB的VHDL源程序LIBRARY IEEE。USE 。USE 。USE 。ENTITY DDPB IS PORT(START,WCLK:IN STD_LOGIC。 CLK1HZ:IN STD_LOGIC。 DDBZ:OUT STD_LOGIC)。 END ENTITY DDPB。ARCHITECTURE ART OF DDPB IS SIGNAL T60S:STD_LOGIC。 SIGNAL WCLKCOU:STD_LOGIC_VECTOR(7 DOWNTO 0)。 BEGIN 產(chǎn)生60 s周期性跳變信號(hào)進(jìn)程 PROCESS(START, CLK1HZ) IS VARIABLE CNT60: STD_LOGIC_VECTOR(7 DOWNTO 0)。 BEGIN IF START=39。139。 THENCNT60:=00000000。 T60S=39。039。 ELSIF CLK1HZ39。EVENT AND CLK1HZ=39。139。 THEN IF CNT60=00111100 THEN CNT60=60 T60S=39。139。 CNT60:=00000000。 ELSE CNT60: =CNT60+39。139。 T60S=39。039。 END IF。 END IF。 END PROCESS 。 每分鐘行駛距離計(jì)算進(jìn)程 PROCESS(START, WCLK, T60S) IS BEGIN IF START=39。139。 THEN WCLKCOU=00000000。 ELSIF WCLK39。EVENT AND WCLK=39。139。 THEN IF T60S=39。139。 THEN WCLKCOU=00000000。 ELSE WCLKCOU=WCLKCOU+39。139。 距離計(jì)算,單位為m END IF。 END IF。 END PROCESS 。 等待標(biāo)志判別進(jìn)程 PROCESS(WCLKCOU,T60S) IS BEGIN IF T60S39。EVENT AND T60S=39。139。 THEN IF WCLKCOU=11001000 THEN WCLKCOU=200 DDBZ=39。139。 等待 ELSEDDBZ=39。039。 行駛 END IF。 END IF。 END PROCESS 。 END ARCHITECTURE ART。3.里程計(jì)算模塊LCJS的VHDL源程序LIBRARY IEEE。USE 。USE 。USE 。ENTITY LCJS IS PORT(START, DDBZ, WCLK: IN STD_LOGIC。 XSLC: OUT STD_LOGIC_VECTOR(15 DOWNTO 0)。 LCBZ,JFBZ:OUT STD_LOGIC)。END ENTITY LCJS。ARCHITECTURE ART OF LCJS IS SIGNAL BMS:STD_LOGIC_VECTOR(15 DOWNTO 0)。 SIGNAL BMS1: INTEGER RANGE 0 TO 99999。 SIGNAL JFBZ1: STD_LOGIC。 BEGIN 里程計(jì)算及標(biāo)志產(chǎn)生進(jìn)程 PROCESS(START,WCLK) VARIABLE MS: STD_LOGIC_VECTOR(7 DOWNTO 0)。 BEGIN IF START=39。139。 THEN MS:=00000000。 BMS=0000000000000000。LCBZ=39。039。 ELSIF WCLK39。EVENT AND WCLK=39。139。 THEN IF DDBZ=39。039。 THEN IF MS=01100011 THEN MS:=00000000。 BMS=BMS+39。139。 百米數(shù)計(jì)算 IF BMS=20 THEN LCBZ=39。139。 大于2 km標(biāo)志 END IF。 ELSE MS:=MS+39。139。 米數(shù)計(jì)算 END IF。 END IF。 END IF。 END PROCESS。里程計(jì)算結(jié)果輸出 XSLC=BMS。 里程計(jì)算結(jié)果轉(zhuǎn)換 BMS1=CONV_INTEGER(BMS)。 產(chǎn)生計(jì)費(fèi)信號(hào)進(jìn)程 PROCESS(BMS1) IS BEGIN CASE BMS1 IS WHEN 10|20|30|40|50|60|70|80|90|100=JFBZ1=39。139。 WHEN 110|120|130|140|150|160|170|180|190|200=JFBZ1=39。139。 WHEN 210|220|230|240|250|260|270|280|290|300=JFBZ1=39。139。 WHEN 310|320|330|340|350|360|370|380|390|