




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、 . . . 數電課程設計報告設計課題:出租車計價器: 班級: 學號:指導老師 0引言隨著我國市場經濟的發展,交通也越來越便利,特別是計程車,以快捷、方便的特點早已盛行各個城市,成為城市交通的重要工具。計程車市場從90年代初的起步階段到現在已經進入了高峰期。隨著城市化水平的提高和人民生活水平的改善,計程車的服務也就顯得越來越重要。因此計程車計價器也就應運而生了。本設計就是針對目前計程車計價器的問題設計的一種基于可編程邏輯器件FPGA的ASIC,并用超高速硬件描述語言VHDL編程實現的可同時顯示金額、乘車時間、乘車總路程的“多功能”計價器。有較好的實用價值和較高的可行性。一、整體方案設計實現計程
2、車的計價器功能。一方面實現基本功能時,包括在行程中滿足2公里以計起步價6 元,以后在車行2公里后且10公里以再按1.8元/公里,10公里以后按2.2元/公里計費;處于等待的狀態下滿足5 分鐘以不計價,以后以2元/分計費。另一方面多功能的實現,計價器可以顯示總費用,總行程數和總乘車時間等等。實現模擬功能:能模擬汽車啟動、停止等狀態。設計的主要技術指標如下:1、計價圍:0999.0元 計價分辨率: 0.1元。2、計程圍:099公里 計價分辨率:1公里。3、計時圍: 59分59秒 計時分辨率:1秒(<1小時)設計方案比較方案一:用單片機實現:通過軟件編程,仿真,調試,符合要求后將程序用編程器寫
3、入到單片機芯片上。利用單片機的中斷響應乘客開車或者等待的請求,進行相應的處理。利用寄存器存放計價器系統運行狀態,從而可以根據整個行程的狀態進行計價。方案二:用FPGA(可編程門陣列)實現:利用硬件描述語言編程,仿真調試后下載到可編程邏輯器件(CPLD)上實現??梢詫τ嫵誊囌麄€過程進行判斷、處理。整個過程完全實現了自動化和智能化。比較而言,方案一的開發與制作成本較低,能較大程度地利用資源,但外圍電路較多,調試復雜,抗干擾能力差,特別對這種計程車的計價器需要長時間不間斷運作的系統,由于主要是軟件運作,容易出錯,造成系統不穩定。方案二將所有器件集成在一塊芯片上,體積大大減小的同時還提高了穩定性,并且
4、可應用EDA軟件仿真,調試,易于進行功能擴展,外圍電路較少,采用硬件邏輯電路實現,其最大的優點是穩定性好,抗干擾能力強,非常適合作為計程車的計價器系統的控制核心?;趯σ陨细鱾€因素的考慮,我們覺得FPGA實現計程車的計價器的設計更設計的要求,提升設計的可行性。因此,決定選用以FPGA為核心,用VHDL編程來實現計價器的設計。二、系統模塊劃分將系統分為三個大模塊:1 系統各項計費功能的實現;CP1端輸入的脈沖信號經系統部分頻后做為模擬行車里程信號。CP2端輸入脈沖信號進系統部分頻后做為行車時間信號。RR為復位信號,RR=1時計價器清零,RSTN為計價器開關。CASH150 MILES150 TI
5、MES150 端分別輸出乘車費用,行車里程,行車總時間,它們都是用16位2進制BCD碼表示。2 各模塊的LCD顯示模塊。BUSY:控制器忙信號,數據未顯示穩定時BUSY=1;反之為0;CASHH70 CASHL70 :乘車費用16位2進制BCD碼的高8位數據和低八位數據;CPIN :輸入工作時鐘信號;MILEH70 MILEL70 : 行車里程16位2進制BCD碼的高8位數據和低八位數據;R : LCD顯示開關;TMH70 TML70 :行車時間16位2進制BCD碼的高8位數據和低八位數據;ADDR30:字符在LCD屏幕上的地址(共兩行,每行16個字符) ADDR=“0000”“1111”對應
6、每行的第015個字符;CLK: 控制器工作時鐘,上升沿有效;DATA 70 :ASCII碼數據總線;OUTLINE:LCD1602屏幕上的行選擇信號,LINE=0時數據在第一行顯示,LINE=1時數據在第二行顯示;RST:復位信號,高電平有效;STORB:E數據輸入有效使能,高電平有效;3 LCD控制顯示模塊CLK:控制器工作時鐘,上升沿有效RST:復位信號,高電平有效DATA7.0:ASCII碼數據總線ADDR3.0:字符在LCD屏幕上的地址(共兩行,每行16個字符) ADDR=“0000”“1111”對應每行的第015個字符LINE: LCD1602屏幕上的行選擇信號,LINE=0時數據在
7、第一行顯示,LINE=1時數據在第二行顯示BUSY: 控制器忙信號,數據未顯示穩定時BUSY=1;反之為0STROBE: 數據輸入有效使能,高電平有效LCD顯示器接口:LCD_E:LCD顯示器使能LCD_RW:LCD讀寫方向控制LCD_RS:LCD命令,數據選擇LCD_DATA_TRI:LCD數據高阻態控制LCD_DATAO:LCD數據輸出總線LCD_DATAI:LCD數據輸入總線三、主要VHDL源程序1、計費功能的實現LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;entity JFQZMK i
8、s port (CP1 ,CP2,RR,RSTN: IN STD_LOGIC; MILES,CASH,TIMES: OUT STD_LOGIC_VECTOR(15 DOWNTO 0) );end JFQZMK ;architecture JFQLL of JFQZMK is SIGNAL CASHOUT:STD_LOGIC_VECTOR(15 DOWNTO 0); -由CASHTIME&CASHMILE組成-十個十米記為0.1KM的SIGNAL(模擬輪子轉一圈走十米) SIGNAL CT:STD_LOGIC_VECTOR(15 DOWNTO 0); SIGNAL CP3:STD_LOG
9、IC;-十個十米記為0.1KM的SIGNAL-十個0。1KM脈沖記為1KM的SIGNAL SIGNAL T:STD_LOGIC_VECTOR(15 DOWNTO 0); SIGNAL CP:STD_LOGIC;-十個0。1KM脈沖記為1KM的SIGNAL-時間計數與分頻的SIGANAL SIGNAL COUNTER_REG : STD_LOGIC_VECTOR(31 DOWNTO 0); SIGNAL COUNTER :STD_LOGIC_VECTOR(31 DOWNTO 0); SIGNAL TIMESOUT:STD_LOGIC_VECTOR(15 DOWNTO 0); SIGNAL CLK
10、:STD_LOGIC;-時間計數與分頻的SIGANAL-里程計算部分的SIGNAL SIGNAL MILESOUT: STD_LOGIC_VECTOR(15 DOWNTO 0);-里程計算部分的SIGNAL-行車計費部分的SIGNAL SIGNAL CASHL: STD_LOGIC_VECTOR(15 DOWNTO 0); SIGNAL CASHH: STD_LOGIC_VECTOR(15 DOWNTO 0); SIGNAL CASHMILE: STD_LOGIC_VECTOR(15 DOWNTO 0);-行車計費部分的SIGNAL-停車計費部分的SIGNAL SIGNAL COST : ST
11、D_LOGIC_VECTOR(15 DOWNTO 0); SIGNAL CV: STD_LOGIC_VECTOR(7 DOWNTO 0); SIGNAL CASHTIME: STD_LOGIC_VECTOR(15 DOWNTO 0);-停車計費部分的SIGNAL-將16位二進制價格轉換到BCD碼 FUNCTION CONVERT(AA:STD_LOGIC_VECTOR) RETURN STD_LOGIC_VECTOR IS VARIABLE AN:STD_LOGIC_VECTOR(15 DOWNTO 0); VARIABLE S:STD_LOGIC_VECTOR(15 DOWNTO 0);BE
12、GIN AN:=X"0000"S:=X"0000" FOR N IN 0 TO 15 LOOP IF AA(N)='1' THEN CASE N IS WHEN 0 => AN:=X"0001" WHEN 1 => AN:=X"0002" WHEN 2 => AN:=X"0004" WHEN 3 => AN:=X"0008" WHEN 4 => AN:=X"0016" WHEN 5 => AN:=X&qu
13、ot;0032" WHEN 6 => AN:=X"0064" WHEN 7 => AN:=X"0128" WHEN 8 => AN:=X"0256" WHEN 9 => AN:=X"0512" WHEN 10 => AN:=X"1024" WHEN 11 => AN:=X"2048" WHEN 12 => AN:=X"4096" WHEN 13 => AN:=X"8192" WH
14、EN OTHERS => AN:=X"0000" END CASE; IF ("0" & S(3 downto 0) + ("0" & AN(3 DOWNTO 0)>"01001" THEN S(3 DOWNTO 0):=S(3 DOWNTO 0)+AN(3 DOWNTO 0)+"0110" S(15 DOWNTO 4):=S(15 DOWNTO 4)+X"001" ELSE S(3 DOWNTO 0):=S(3 DOWNTO 0)+AN(3 DO
15、WNTO 0); END IF; IF ("0" & S(7 DOWNTO 4) + ("0" & AN(7 DOWNTO 4)>"01001" THEN S(7 DOWNTO 4):=S(7 DOWNTO 4)+AN(7 DOWNTO 4)+"0110" S(15 DOWNTO 8):=S(15 DOWNTO 8)+X"01" ELSE S(7 DOWNTO 4):=S(7 DOWNTO 4)+AN(7 DOWNTO 4); END IF; IF ("0&quo
16、t; & S(11 DOWNTO 8) + ("0" & AN(11 DOWNTO 8)>"01001" THEN S(11 DOWNTO 8):=S(11 DOWNTO 8)+AN(11 DOWNTO 8)+"0110" S(15 DOWNTO 12):=S(15 DOWNTO 12)+X"1" ELSE S(11 DOWNTO 8):=S(11 DOWNTO 8)+AN(11 DOWNTO 8); END IF; S(15 DOWNTO 12):=S(15 DOWNTO 12)+AN(15
17、 DOWNTO 12); END IF; END LOOP; RETURN S; END FUNCTION; -將16位二進制價格轉換到BCD碼BEGIN-10個脈沖記為0.1KM的實現PROCESS(CP1,RR) -CP1,RR INPUT SIGNALBEGINIF RR='1' THENCT<=X"0000"ELSIF CP1='1' AND CP1'EVENT THENIF CT="01001" THEN CT<=X"0000" CP3<='1' EL
18、SE CP3<='0' CT<=CT+"00001" END IF;END IF;END PROCESS;-10個脈沖記為0.1KM的實現-10個0。1KM脈沖記為1KM的實現PROCESS(CP3,RR)BEGINIF RR='1' THENT<=X"0000"ELSIF CP3='1' AND CP3'EVENT THEN IF T="01001" THEN T<=X"0000" CP<='1' ELSE CP
19、<='0' T<=T+"00001" END IF;END IF;END PROCESS;-10個0。1KM脈沖記為1KM的實現完-將時間脈沖分頻 PROCESS(CP2,RR) BEGIN IF RR='1' THEN COUNTER_REG<="1111"-X"989680" -仿真時設為2 COUNTER <= X"00000000" CLK<='0' ELSE IF CP2='1' AND CP2 'EVE
20、NT THEN IF COUNTER>=COUNTER_REG THEN COUNTER<=X"00000000" CLK<=NOT CLK; ELSE COUNTER<=COUNTER+1; END IF; END IF;END IF;END PROCESS;-時間脈沖分頻完-時間計數的實現PROCESS(CLK,RR)VARIABLE TIMESOUT_I:STD_LOGIC_VECTOR(15 DOWNTO 0);BEGINIF RR='1' THEN TIMESOUT<=X"0000" TIMESOU
21、T_I:=X"0000"ELSIF CLK='1' AND CLK'EVENT THEN IF TIMESOUT_I(15 DOWNTO 0)="11001" THEN -16位二進制數轉BCD碼 TIMESOUT_I:=X"0000" ELSE IF TIMESOUT_I(11 DOWNTO 0)="1" THEN TIMESOUT_I(11 DOWNTO 0):="0" TIMESOUT_I:=TIMESOUT_I+"00000" ELSE IF
22、TIMESOUT_I(7 DOWNTO 0)="01011001" THEN TIMESOUT_I(7 DOWNTO 0):="00000000" TIMESOUT_I:=TIMESOUT_I+"00000" ELSE IF TIMESOUT_I(3 DOWNTO 0)="1001" THEN TIMESOUT_I(3 DOWNTO 0):="0000" TIMESOUT_I:=TIMESOUT_I+"10000" ELSE TIMESOUT_I:=TIMESOUT_I+&q
23、uot;00001" END IF; END IF; END IF; END IF; TIMESOUT<=TIMESOUT_I;END IF; -16位二進制數轉BCD碼END PROCESS;-時間計數的實現完-里程計算部分PROCESS(CP3,RR)VARIABLE MILESOUT_I:STD_LOGIC_VECTOR(15 DOWNTO 0);BEGINIF RR='1' THENMILESOUT<=X"0000"MILESOUT_I:=X"0000"ELSIF CP3='1' AND CP
24、3'EVENT THEN IF MILESOUT_I(15 DOWNTO 0)="11001" THEN -16位二進制數轉BCD碼 MILESOUT_I:=X"0000" ELSE IF MILESOUT_I(11 DOWNTO 0)="1" THEN MILESOUT_I(11 DOWNTO 0):="0" MILESOUT_I:=MILESOUT+"00000" ELSE IF MILESOUT_I(7 DOWNTO 0)="10011001" THEN MIL
25、ESOUT_I(7 DOWNTO 0):="00000000" MILESOUT_I:=MILESOUT_I+"00000" ELSE IF MILESOUT_I(3 DOWNTO 0)="1001" THEN MILESOUT_I(3 DOWNTO 0):="0000" MILESOUT_I:=MILESOUT_I+"10000" ELSE MILESOUT_I:=MILESOUT_I+"00001" END IF; END IF; END IF; END IF; -16位
26、二進制數轉BCD碼MILESOUT<=MILESOUT_I;END IF;END PROCESS;-里程計算部分完-行車計費部分PROCESS(MILESOUT,RR)BEGINIF RR='1' THENCASHL<=X"0000"ELSIF MILESOUT <"00000" THEN CASHL<="11100"ELSE CASHL<="11100"END IF;END PROCESS;PROCESS(MILESOUT,CP,RR)BEGINIF RR='
27、1' THENCASHH<=X"0000"ELSIF CP='1' AND CP'EVENT THEN IF MILESOUT <"00000" THEN CASHH<=X"0000" ELSIF MILESOUT <"00000" THEN CASHH<=CASHH+"10010"-行程<=10公里,1.8元/公里 ELSE CASHH<=CASHH+"10110"-行程>10公里,2.2元/公
28、里 END IF;END IF;END PROCESS;PROCESS(CASHH,CASHL,RR)BEGINIF RR='1' THENCASHMILE<=X"0000"ELSECASHMILE<=CASHH+CASHL;END IF;END PROCESS;-行車計費部分完-停車計費部分PROCESS(MILESOUT,CLK,RR)BEGINIF RR='1' THEN COST<=X"0000"CV<=X"00"CASHTIME<=X"0000"
29、;ELSIF CLK='1' AND CLK 'EVENT THEN IF COST/=MILESOUT THEN CV<="00000000" ELSIF CV="00000101" THEN CASHTIME<=CASHTIME+"00010"-停車超過5分鐘,每等一分鐘2元 ELSE CV<=CV+"00000001" END IF; COST<=MILESOUT;END IF;END PROCESS;-停車計費部分完-計價部分PROCESS(CASHTIME,
30、CASHMILE,RR)VARIABLE CASHOUT_I:STD_LOGIC_VECTOR(15 DOWNTO 0);BEGINIF RR='1' THENCASHOUT_I:=X"0000"ELSE CASHOUT_I:=CONVERT(CASHTIME+CASHMILE);END IF; CASHOUT<=CASHOUT_I;END PROCESS;-計價部分完-輸出部分PROCESS(MILESOUT,CASHOUT,TIMESOUT)BEGINMILES<=MILESOUT;CASH<=CASHOUT;TIMES<=TIM
31、ESOUT;END PROCESS;-輸出部分完END JFQLL;2、各模塊的LCD顯示模塊。LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;entity JFQLCD is port (CPIN,R,BUSY :IN STD_LOGIC; TMH,TML,MILEH,MILEL,CASHH,CASHL :IN STD_LOGIC_VECTOR(7 DOWNTO 0); CLK,RST,STROBE,OUTLINE : OUT STD_LOGIC; DATA : OUT STD_LOGIC_VE
32、CTOR(7 DOWNTO 0); ADDR : OUT STD_LOGIC_VECTOR(3 DOWNTO 0) );end JFQLCD;architecture JFQ of JFQLCD is TYPE STATES IS (S0,S1,S2,S3,S4); SIGNAL S: STATES; SIGNAL LCDPT : INTEGERRANGE 0 TO 23; SIGNAL CPCT : INTEGERRANGE 0 TO 65535; SIGNAL CP: STD_LOGIC;beginPROCESS(CPIN,R)BEGINCLK<=CPIN;IF R='1
33、39; THEN CPCT<=65535;ELSIF CPIN='1' AND CPIN 'EVENT THEN IF CPCT=0 THEN CPCT<=65535;CP<=NOT CP; ELSE CPCT<=CPCT-1; END IF;END IF;END PROCESS;PROCESS(CP,R)BEGINIF R='1' THEN S<=S0;LCDPT<=0;RST<='1'ELSIF CP='1' AND CP 'EVENT THEN CASE S IS W
34、HEN S0=> S<=S1;LCDPT<=0;RST<='1' WHEN S1=> RST<='0'STROBE<='0' IF BUSY='0' THEN LCDPT<=LCDPT+1; IF LCDPT=10 THEN S<=S3; ELSE S<=S2; END IF; END IF; WHEN S2=> S<=S1;STROBE<='1' WHEN S3=> STROBE<='0' IF BUSY=&
35、#39;0' THEN IF LCDPT=23 THEN LCDPT<=10; ELSE LCDPT<=LCDPT+1; END IF; S<=S4; END IF; WHEN S4=> STROBE<='1'S<=S3; WHEN OTHERS=> NULL; END CASE;END IF; END PROCESS; PROCESS(LCDPT,TMH,TML,CASHH,CASHL,MILEH,MILEL)BEGINCASE LCDPT ISWHEN 0 => NULL;WHEN 1=> DATA<=&q
36、uot;00111010"ADDR<="0011"OUTLINE<='0' -:WHEN 2=> DATA<="00101110"ADDR<="1011"OUTLINE<='0' -.WHEN 3=> DATA<="01001011"ADDR<="1101"OUTLINE<='0' -KWHEN 4=> DATA<="01101101"ADDR&l
37、t;="1110"OUTLINE<='0' -mWHEN 5=> DATA<="01000011"ADDR<="0010"OUTLINE<='1' -CWHEN 6=> DATA<="01000001"ADDR<="0011"OUTLINE<='1' -AWHEN 7=> DATA<="01010011"ADDR<="0100"OUTLI
38、NE<='1' -SWHEN 8=> DATA<="01001000"ADDR<="0101"OUTLINE<='1' -HWHEN 9=> DATA<="00111010"ADDR<="0110"OUTLINE<='1' -:WHEN 10=> DATA<="00101110"ADDR<="1011"OUTLINE<='1' -.-L
39、CDPT=722 顯示FS1FS8-LCDPT=2325 顯示ZB/TMWHEN 11=>DATA<="0011"&TMH(7 DOWNTO 4);ADDR<="0001"OUTLINE<='0'WHEN 12=>DATA<="0011"&TMH(3 DOWNTO 0);ADDR<="0010"OUTLINE<='0'WHEN 13=>DATA<="0011"&TML(7 DOWN
40、TO 4);ADDR<="0100"OUTLINE<='0'WHEN 14=>DATA<="0011"&TML(3 DOWNTO 0);ADDR<="0101"OUTLINE<='0'WHEN 15=>DATA<="0011"&MILEH(7 DOWNTO 4);ADDR<="1000"OUTLINE<='0'WHEN 16=>DATA<="0011&
41、quot;&MILEH(3 DOWNTO 0);ADDR<="1001"OUTLINE<='0'WHEN 17=>DATA<="0011"&MILEL(7 DOWNTO 4);ADDR<="1010"OUTLINE<='0'WHEN 18=>DATA<="0011"&MILEL(3 DOWNTO 0);ADDR<="1100"OUTLINE<='0'WHEN 19=
42、>DATA<="00100000"ADDR<="0111"OUTLINE<='1'WHEN 20=>DATA<="0011"&CASHH(7 DOWNTO 4);ADDR<="1000"OUTLINE<='1'WHEN 21=>DATA<="0011"&CASHH(3 DOWNTO 0);ADDR<="1001"OUTLINE<='1'WHEN 22=>DATA<="0011"&CASHL(7 DOWNTO 4);ADDR<="1010"OUTLINE<='1'WHEN 23=>DATA<="0011"&CASHL(3 DOWNTO 0);ADDR<="1100"OU
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年安全管理員安全培訓考試試題可打印
- 2025新版車間安全培訓考試試題及完整答案(必刷)
- 2025管理人員安全培訓考試試題及參考答案(精練)
- 2025合同糾紛解決的關鍵要素
- 2025購銷合同轉讓協議范本
- 2025私營企業員工的人事合同范本
- 2025房產買賣合同書
- 2025年電子線圈設備項目建議書
- 2025標準版汽車銷售合同協議書
- 2025建筑公司標準版勞動合同
- 大型活動策劃與管理第八章 大型活動風險管理
- Q∕GDW 12165-2021 高海拔地區運維檢修裝備配置規范
- 現代風險導向審計在天衡會計師事務所的應用研究
- JGJ107-2016鋼筋機械連接技術規程
- 婦科醫生進修匯報課件
- 動態分析與設計實驗報告總結
- 2024年江蘇省泰州市海陵區中考一模數學試卷
- 從汽車檢測看低空飛行器檢測發展趨勢
- DB32T 4740-2024 耕地和林地損害程度鑒定規范
- 五一節假日安全生產培訓
- 中考英語二輪復習課件:中考解題技巧-讀寫綜合
評論
0/150
提交評論