北郵VHDL實(shí)驗(yàn)地鐵_第1頁(yè)
北郵VHDL實(shí)驗(yàn)地鐵_第2頁(yè)
北郵VHDL實(shí)驗(yàn)地鐵_第3頁(yè)
北郵VHDL實(shí)驗(yàn)地鐵_第4頁(yè)
北郵VHDL實(shí)驗(yàn)地鐵_第5頁(yè)
已閱讀5頁(yè),還剩6頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、基于vhdl的地鐵自動(dòng)售票系統(tǒng)設(shè)計(jì) 班級(jí):xxxxxxx姓名:xxxxxx 學(xué)號(hào):xxxxxxxxx 班內(nèi)序號(hào):15 日期:2012.11.11 1、 實(shí)驗(yàn)要求1.地鐵票價(jià)統(tǒng)一為每張兩元,可以投入幣值為1元、5元和10元三種幣種進(jìn)行購(gòu)票。2.能夠開(kāi)機(jī)自檢,檢驗(yàn)顯示器件正常。3.通過(guò)按鍵開(kāi)關(guān)btn輸入購(gòu)票張數(shù)和投入的人民幣張數(shù)并恰當(dāng)顯示相應(yīng)信息。4.設(shè)置適當(dāng)?shù)穆曇籼崾净蝻@示提示表示取票和找零。5.一次購(gòu)票成功后系統(tǒng)能夠恰當(dāng)?shù)剞D(zhuǎn)入下一次購(gòu)票等待狀態(tài)。6.系統(tǒng)能夠復(fù)位。二、系統(tǒng)設(shè)計(jì)3、 仿真波形及分析售票系統(tǒng)上電后首先進(jìn)行復(fù)位(reset=1),然后等待乘客選擇票數(shù)(tn=0-7) 。在選票完成后,

2、 系統(tǒng)輸出報(bào)警信號(hào) (moneyinputalarm=1), 提醒乘客進(jìn)行投幣。之后系統(tǒng)對(duì)于乘客投入的紙幣進(jìn)行識(shí)別,識(shí)別范圍是1元,5元,10元(money10,money5,money1),乘客可以連續(xù)多次投入錢(qián)幣,系統(tǒng)自動(dòng)進(jìn)行累加。當(dāng)投入的錢(qián)幣未達(dá)到所需金額時(shí),報(bào)警信號(hào)仍然繼續(xù)維持(moneyinputalarm=1),提醒錢(qián)不夠,需要繼續(xù)投入錢(qián)幣。當(dāng)投入的錢(qián)幣達(dá)到所需金額時(shí),報(bào)警信號(hào)取消(moneyinputalarm=0),售票機(jī)自動(dòng)出票(tout=1) 。如果投入的錢(qián)幣有余, 系統(tǒng)自動(dòng)計(jì)算余額 (rmoney) 。本次交易結(jié)束,系統(tǒng)自動(dòng)進(jìn)入選站狀態(tài)等待下一次的交易。在投幣期間,如果乘

3、客按復(fù)位鍵(reset=1)取消本次操作,錢(qián)幣自動(dòng)退出。4、 源程序library ieee;use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity adddiv is port( bt:out std_logic_vector(5 downto 0); reset:in std_logic; - 系統(tǒng)復(fù)位信號(hào) clk:in std_logic; - 系統(tǒng)時(shí)鐘 tn:in std_logic_vector(6 downto 0); - 所購(gòu)票數(shù) money10:in std_logic; - 投幣10元 mone

4、y5:in std_logic; - 投幣5元 money1:in std_logic; -投幣1元 moneyinputalarm:out std_logic; - 投幣不足報(bào)警信號(hào) tout : out std_logic;- 出票 led:out std_logic_vector(6 downto 0); state:out std_logic_vector(2 downto 0) - 系統(tǒng)狀態(tài)指示 ); end adddiv;architecture behave of adddiv iscomponent div_2k - 2000分頻器,用來(lái)使7段數(shù)碼管閃爍port(clk_in:

5、 in std_logic; clk_out: out std_logic);end component;component div_50m -50分頻器,用來(lái)處理投幣按鍵port(clk_in_50m: in std_logic; clk_out_50m: out std_logic);end component; signal cnt6:integer range 0 to 5; - 掃頻使6個(gè)七段數(shù)碼管輪流亮的信號(hào) signal tmplight:integer range 0 to 9; - 控制所有數(shù)碼管顯示的信號(hào) constant numh:integer:=0; - 票數(shù)顯示高位

6、 signal numl:integer range 0 to 9; - 票數(shù)顯示低位 signal pmoneyh:integer range 0 to 2; - 所付錢(qián)數(shù)顯示高位 signal pmoneyl:integer range 0 to 9; - 所付錢(qián)數(shù)顯示低位 constant rmoneyh:integer:=0; - 找錢(qián)顯示高位 signal rmoneyl:integer range 0 to 9; - 找錢(qián)顯示低位 signal clk_tmp: std_logic; 2000m分頻輸出 signal clk_money: std_logic;type ff is

7、(selticket,inputcoin,givechange) ; - 定義系統(tǒng)轉(zhuǎn)換狀態(tài) (選站, 選票, 投幣, 出票, 找零) begin u1:div_2k port map(clk_in=clk,clk_out=clk_tmp); u2:div_50m port map(clk_in_50m=clk,clk_out_50m=clk_money);main: process(reset,clk_money) variable next_state: ff:=selticket; variable tmoney,pmoney,rmoney,num: integer range 0 to

8、20; - 車(chē)票總額,投幣總額,找零總額 begin if clk_moneyevent and clk_money= 1 then case next_state is when selticket = - 選擇票數(shù) tout=0; moneyinputalarm=0; numl=0; pmoneyh=0; pmoneyl=0; rmoneyl=0; num:=0; tmoney:=0; pmoney:=0; rmoney:=0; - 初始化清零 state tmoney :=2; - 計(jì)算票價(jià) num:=1; when 0100000 = tmoney :=4; - 計(jì)算票價(jià) num:=2

9、; when 0010000 = tmoney :=6; - 計(jì)算票價(jià) num:=3; when 0001000 = tmoney :=8; - 計(jì)算票價(jià) num:=4; when 0000100 = tmoney :=10; - 計(jì)算票價(jià) num:=5; when 0000010 = tmoney :=12; - 計(jì)算票價(jià) num:=6; when 0000001 = tmoney :=14; - 計(jì)算票價(jià) num:=7; when others =null; end case; numl0) then next_state := inputcoin; - 選票結(jié)束,進(jìn)入投幣狀態(tài) else

10、next_state := selticket; - 未選票,停留在選票狀態(tài) end if ; end if; when inputcoin = - 進(jìn)行投幣 state=010; if (money10=1) then pmoney:=pmoney+10; -計(jì)算已付的款 end if; if (money5=1) then pmoney:=pmoney+5; end if; if (money1=1) then pmoney:=pmoney+1; end if; if pmoney10 then -把已付的款轉(zhuǎn)換成七段數(shù)碼管顯示的高低位 pmoneyh = 0; pmoneyl =pmon

11、ey; elsif pmoney20 then pmoneyh = 1; pmoneyl =pmoney-10; else pmoneyh = 2; pmoneyl =pmoney-20; end if; if (pmoneytmoney)then - 比較投幣總額與車(chē)票總額 moneyinputalarm =1; -缺錢(qián)警告 next_state :=inputcoin; - 投幣不足,繼續(xù)進(jìn)入投幣狀態(tài) else moneyinputalarm - 余額找出 state0)then tout=1; rmoney :=pmoney-tmoney; else tout=0; end if ; r

12、moneyl - 其他任何情況,均回到選站狀態(tài) next_state := selticket; end case ; end if; end process main; show: process(clk_tmp) begin if clk_tmpevent and clk_tmp= 1 then -實(shí)現(xiàn)模6計(jì)數(shù)器 if cnt6 = 5 thencnt6 = 0;elsecnt6 bt = 011111 ; tmplight bt = 101111 ; tmplight bt = 110111 ; tmplight bt = 111011 ; tmplight bt = 111101 ;

13、tmplight bt = 111110 ; tmplight null ; end case ; -用6個(gè)數(shù)碼管輪流輸出 case tmplight is when 0 = led led led led ledledledled led led= 1111011;end case; end if; end process show;end behave;library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity div_2k isport(clk_in:in std_logic; clk_o

14、ut:out std_logic);end div_2k; architecture a of div_2k issignal temp:integer range 0 to 1999;begin p1:process(clk_in)begin if clk_inevent and clk_in=1 then if temp=999 then clk_out=1; temp=temp+1; elsif temp=1999 then temp=0; clk_out=0; else temp=temp+1; clk_out=0; end if;end if;end process p1;end a

15、;library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity div_50m isport(clk_in_50m:in std_logic; clk_out_50m:out std_logic);end div_50m; architecture b of div_50m issignal temp:integer range 0 to 49999999;begin p1:process(clk_in_50m)begin if clk_in_50mevent and clk_in_50m=1 t

16、hen if temp=24999999 then clk_out_50m=1; temp=temp+1; elsif temp=49999999 then temp=0; clk_out_50m=0; else temp=temp+1; clk_out_50m=0; end if;end if;end process p1;end b;5、 功能說(shuō)明 本自動(dòng)售票機(jī)系統(tǒng)共分3個(gè)狀態(tài):選票狀態(tài),付款狀態(tài),出票找零狀態(tài)。在選票狀態(tài),用7個(gè)撥碼開(kāi)關(guān)分別表示17張票,選中后自動(dòng)進(jìn)入付款狀態(tài);用3個(gè)按鍵分別控制投幣10元、5元、1元,且控制按鍵進(jìn)程的時(shí)鐘為25m分頻,即每按鍵0.5s投入一張紙幣。當(dāng)投幣

17、數(shù)小于應(yīng)付票款數(shù)時(shí),警報(bào)燈亮,當(dāng)投幣數(shù)大于應(yīng)付票款數(shù)時(shí)自動(dòng)進(jìn)入出票找零狀態(tài),燈亮顯示出票,系統(tǒng)自動(dòng)計(jì)算找零數(shù)。當(dāng)復(fù)位鍵按下時(shí)系統(tǒng)回到選票狀態(tài)。與此同時(shí),六個(gè)七段數(shù)碼管分別顯示票數(shù)、付款數(shù)、找零數(shù)。6、 元器件清單硬件:max ii epm1270t144c5軟件:quartus ii 9.07、 故障及問(wèn)題分析1.本實(shí)驗(yàn)處理的最關(guān)鍵問(wèn)題是如何使6個(gè)七段數(shù)碼管在同一掃頻周期里顯示不同狀態(tài)里的變量值。經(jīng)仔細(xì)研究七段數(shù)碼管掃描靜態(tài)顯示實(shí)驗(yàn)發(fā)現(xiàn),可以把所有需要顯示的信號(hào)用一個(gè)中間變量tmplignt表示,并對(duì)掃描顯示的進(jìn)程“show”中的每個(gè)掃頻脈沖分別把6個(gè)需要顯示的變量賦予tmplight。2.起初處理按鍵時(shí)由于main進(jìn)程和show進(jìn)程用同一個(gè)時(shí)鐘,造成當(dāng)時(shí)鐘頻率過(guò)高是按鍵無(wú)法一次一次輸入;而當(dāng)時(shí)鐘頻率過(guò)低時(shí)又不能是數(shù)碼管掃描顯示達(dá)到視覺(jué)殘留的效果。故最終分頻兩次,一個(gè)25m分頻用以處理按鍵,一個(gè)2000

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論