出租車計費系統的設計好_第1頁
出租車計費系統的設計好_第2頁
出租車計費系統的設計好_第3頁
出租車計費系統的設計好_第4頁
出租車計費系統的設計好_第5頁
已閱讀5頁,還剩8頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、1.所選題目:出租車計費器2.設計要求:設計一個出租車計費器,能按路程計費,具體要求如下:()實現計費功能,計費標準為:按行駛里程計費,起步價為7.00元,并在汽車行駛2km后按1.2元km計費,當里程數達到15km后,沒千米加收50%的空駛費,車輛停止和暫停時不計費。()現場模擬汽車的啟動、停止、暫停和換擋等狀態。()設計數碼管顯示電路,將車費和路程顯示出來,各有位小數。3.設計原理:設計該出租車有啟動鍵、停止鍵、暫停鍵和檔位鍵。啟動鍵為脈沖觸發信號,當其為一個脈沖時,表示汽車已啟動,并根據車速的選擇和基本車速發出相應頻率的脈沖(計費脈沖)以此來實現車費和路程的計數,同時車費顯示起步價;當停

2、止鍵為高電平時,表示汽車熄火,同時停止發出脈沖,此時車費和路程計數清零;當暫停鍵為高電平時,表示汽車暫停并停止發出脈沖,此時車費和路程計數暫停;檔位鍵用于改變車速,不同的檔位對應著不同的車速,同時路程計數的速度也不同。4.模塊設計:出租車計費器可分為兩大模塊,即控制模塊和譯碼顯示模塊。系統框圖如下:計費時鐘檔位啟動控制模塊顯示模塊暫停停止5.電路符號:出租車計費器的輸入信號有:計費時鐘脈沖clk;汽車啟動鍵start;汽車停止鍵stop;檔位speedup。輸出信號:段顯示控制信號seg7;小數點dp。6.具體設計流程:(1) 根據出租車計費原理,將出租車計費部分由5個計數器來完成分別為cou

3、nterA,counterB,counterC,counterD,counterE。計數器A完成車費百位。計數器B完成車費十位和個位。計數器C完成車費角和分(顯示時只顯示角)。計數器D完成計數到20(完成車費的起步價)。計數器E完成模擬實現車行駛100 m的功能。(2) 當超出起步價時就自動在起步價的基礎上每增加一個100m脈沖就增加相應的費用,而當總里程達到或超過一定的數值時,能按新的收費標準進行收費。(3)譯碼/動態掃描電路模塊將路程與費用的數值譯碼后用動態掃描的方式驅動6只數碼管,即所連接的數碼管共用一個數據端,由片選信號依次選擇輸出,輪流顯示。(4)數碼管顯示將千米數和計費金額均用3位

4、LED數碼管顯示(2位整數,1位小數)。7.具體模塊設計:7.1車速控制模塊當啟停鍵為啟動狀態(高電平時),模塊根據車速選擇和基本車速發出響應頻率的脈沖驅動計費器和里程顯示模塊進行計數;當處于暫停狀態,暫停發出脈沖,此時里程計數模塊和計費模塊相應地停止計數。當處于停止狀態時,停止發出脈沖,此時計費器和里程顯示模塊數清零。如圖所示。程序代碼:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY SPEED IS PORT( CLK,RESET,START,STOP: IN STD_LOGIC

5、; SPEEDUP : IN STD_LOGIC_VECTOR(4 DOWNTO 0); CLKOUT : OUT STD_LOGIC );END SPEED;ARCHITECTURE A OF SPEED IS SIGNAL COUNT1 :STD_LOGIC_VECTOR(1 DOWNTO 0); SIGNAL TEMPCLK,CLKS:STD_LOGIC; SIGNAL KINSIDE :STD_LOGIC_VECTOR(4 DOWNTO 0); BEGIN KINSIDE<="00000"-SPEEDUP; CLKS_LABEL: PROCESS(RESET,

6、CLK) VARIABLE COUNT2: STD_LOGIC_VECTOR(4 DOWNTO 0); BEGIN IF STOP='1' THEN TEMPCLK <='0' ELSIF RESET = '1' and stop='0' THEN COUNT2:="00000" ELSIF CLK'EVENT AND CLK='1' AND STOP='0' THEN IF START='1' THEN IF COUNT2=KINSIDE THEN

7、 COUNT2:="00000" END IF; IF NOT (SPEEDUP="00000") THEN COUNT2:= COUNT2+1; END IF; IF COUNT2="00001" THEN TEMPCLK <= NOT TEMPCLK; END IF; END IF; END IF; END PROCESS CLKS_LABEL; CLKOUT <= TEMPCLK; END A;仿真結果:啟動后(包括暫停)復位后停止后7.2里程計數模塊由車速控制模塊發出的脈沖作為計數脈沖,行駛里程大于3KM時,本模塊

8、中信號變為1,并將計數動態顯示出來,每來一個脈沖,里程值加0.1(每收到一個脈沖代表運行了0.1公里)。程序中要將計數值從十六進制轉換成十進制,即在十六進制的數上加7或6,同時產生了相應的進位信號。如圖所示。程序代碼:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY jicheng IS PORT (CLK,RESET,STOP: IN STD_LOGIC; COUNT1:OUT STD_LOGIC_VECTOR (3 DOWN

9、TO 0); COUNT2:OUT STD_LOGIC_VECTOR (3 DOWNTO 0); COUNT3:OUT STD_LOGIC_VECTOR (3 DOWNTO 0);END jicheng;ARCHITECTURE AA OF jicheng ISBEGIN PROCESS(CLK,RESET,STOP) VARIABLE MM: STD_LOGIC_VECTOR (11 DOWNTO 0); BEGIN IF RESET ='1' THEN MM:="000000000000" ELSIF CLK='0' AND STOP=&

10、#39;1' THEN MM:="000000000000" ELSIF CLK'EVENT AND CLK='1' AND STOP='0' THEN IF MM(3 DOWNTO 0)="1001" THEN MM:=MM+7; ELSE MM:=MM+1; END IF; IF MM(7 DOWNTO 4)="1010" THEN MM:=MM+"01100000" END IF; END IF; COUNT1 <=MM(3 DOWNTO 0); COUN

11、T2 <=MM(7 DOWNTO 4); COUNT3 <=MM(11 DOWNTO 8); END PROCESS; END AA;仿真結果:開始計程個位開始計數十位開始計數停止后7.3計費模塊計費模塊啟動reset信號,根據輸入的clk信號變化,調節費用的計數,用c1、c2、c3顯示費用。其初值為6,當里程數超過2km后,才接受計數車速控制模塊發出的脈沖的驅動,并且將計數顯示動態顯示出來,每一個脈沖其數值加0.12,當里程超過15km時數值加0.18。當啟動鍵為啟動狀態(高電平時),模塊根據車速選擇和基本車速發出響應頻率的脈沖驅動計費器和里程顯示模塊進行計數;當處于停止狀態時,

12、暫停發出脈沖,此時計費器和里程顯示模塊相應的停止計數,全部歸零。如圖所示。程序代碼:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY jifei IS PORT(CLK,RESET,stop:IN STD_LOGIC; JUDGE2:IN STD_LOGIC_VECTOR(3 DOWNTO 0); JUDGE3:IN STD_LOGIC_VECTOR(3 DOWNTO 0); COUNT1:OUT STD_LOGIC_VECTO

13、R(3 DOWNTO 0); COUNT2:OUT STD_LOGIC_VECTOR(3 DOWNTO 0); COUNT3:OUT STD_LOGIC_VECTOR(3 DOWNTO 0); COUNT4:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);END jifei;ARCHITECTURE AA OF jifei ISSIGNAL EN :STD_LOGIC;SIGNAL MONEY :STD_LOGIC_VECTOR(7 DOWNTO 0);SIGNAL MCOUNT :STD_LOGIC_VECTOR(15 DOWNTO 0);BEGINMONEY<=&q

14、uot;00011000" WHEN (MCOUNT(15)='1') OR (MCOUNT(14)='1') OR (MCOUNT(13)='1') ELSE "00010010"EN<='0' WHEN JUDGE3="0000" AND JUDGE2(3 DOWNTO 1)="000" ELSE '1'PROCESS(clk,reset) VARIABLE mm: std_logic_vector(15 downto 0);BEGIN

15、 if stop='1'and clk='0' THEN mm:="0000000000000000" elsIF reset='1' and stop='0'THEN ELSIF clk'event and clk='1' and stop='0' THEN IF en='1' THEN mm:=mm+money; -里程超過2公里 IF (mm(1)='1'or(mm(3 downto 1)="000")or(mm(

16、3 downto 2)="11")THEN mm:=mm+6;END IF; -十六進制轉換成十進制 IF mm(7)='1'and (not(mm(6 downto 5)="00")THEN mm:=mm+"01100000"END IF; IF mm(11)='1'and(not(mm(10 downto 9)="00")THEN END IF;END IF; count1<=mm(3 downto 0);count2<=mm(7 downto 4);count3&l

17、t;=mm(11 downto 8);count4<=mm(15 downto 12);mcount<=mm;END PROCESS;END aa;仿真結果:起步后開始計費行駛2公里后行駛15公里后停止后7.4 動態掃描模塊動態掃描電路將計數器A、B、C的計費狀態用數碼管顯示出來,所連接的數碼管共用一個數據端,由片選信號依次選擇輸出,輪流顯示。該模塊經過6選1選擇器將計費數據(3位BCD碼)、計程數據(3位BCD碼)動態選擇輸出。其中計費數據送入顯示譯碼模塊進行譯碼,最后送至十元、元、角為單位對應的數碼管上顯示;計程數據送入顯示譯碼模塊進行譯碼,最后送至以公里為單位的數碼管上顯示。

18、如圖所示:程序代碼:片選:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY pianxuan IS PORT(CLK: IN STD_LOGIC; A: OUT STD_LOGIC_VECTOR(2 DOWNTO 0);END pianxuan;ARCHITECTURE RT1 OF pianxuan ISBEGIN PROCESS(CLK) VARIABLE B:STD_LOGIC_VECTOR(2 DOWNTO 0); BEGIN IF(CLK'EVENT AND CLK=

19、'1')THEN IF(B="101")THEN B:="000" ELSE B:=B+1; END IF; END IF; A<=B; END PROCESS; END RT1;六選一:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY liuxuanyi IS PORT(C:IN STD_LOGIC_VECTOR(2 DOWNTO 0); DP: OUT STD_LOGIC; A1,A2,A3,B1,B2,B3:IN ST

20、D_LOGIC_VECTOR(3 DOWNTO 0); D:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);END liuxuanyi;ARCHITECTURE RT1 OF liuxuanyi ISBEGIN PROCESS(C,A1,A2,A3,B1,B2,B3) VARIABLE COMB:STD_LOGIC_VECTOR(2 DOWNTO 0); BEGIN COMB:=C; CASE COMB IS WHEN"000"=>D<=A1; DP<='0' WHEN"001"=>D<=A

21、2; DP<='1' WHEN"010"=>D<=A3; DP<='0' WHEN"011"=>D<=B1; DP<='0' WHEN"100"=>D<=B2; DP<='1' WHEN"101"=>D<=B3; DP<='0' WHEN OTHERS=>NULL; END CASE; END PROCESS;END RT1;譯碼:LIBRARY IEE

22、E;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY yima IS PORT(D:IN STD_LOGIC_VECTOR(3 DOWNTO 0); Q:OUT STD_LOGIC_VECTOR(6 DOWNTO 0);END yima;ARCHITECTURE RT1 OF yima ISBEGIN PROCESS(D) BEGIN CASE D IS WHEN"0000"=>Q<="0111111" WHEN"0001"=>Q<="0000110" WHEN"

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論