eda課程設(shè)計(jì)自動售貨機(jī)的設(shè)計(jì).doc
《eda課程設(shè)計(jì)自動售貨機(jī)的設(shè)計(jì).doc》由會員分享,可在線閱讀,更多相關(guān)《eda課程設(shè)計(jì)自動售貨機(jī)的設(shè)計(jì).doc(15頁珍藏版)》請?jiān)谘b配圖網(wǎng)上搜索。
電子信息科學(xué)與技術(shù) 專業(yè)課程設(shè)計(jì)任務(wù)書 學(xué)生姓名 專業(yè)班級 學(xué)號 題 目 自動售貨機(jī)的設(shè)計(jì) 課題性質(zhì) 工程設(shè)計(jì) 課題來源 自擬課題 指導(dǎo)教師 同組姓名 主要內(nèi)容 設(shè)計(jì)制作一個(gè)自動售貨機(jī),該自動售貨機(jī)能完成貨物信息存儲、進(jìn)程控制、硬幣處理、余額計(jì)算、顯示等功能。自動售貨機(jī)可以售2種貨物,每種貨物的數(shù)量和單價(jià)在初始化時(shí)設(shè)入,在存儲器中存儲。用戶可以用硬幣進(jìn)行購物,按鍵進(jìn)行選擇。系統(tǒng)根據(jù)用戶輸入的貨幣,判斷錢幣是否夠,錢幣足夠則根據(jù)顧客要求自動售貨;錢幣不夠則給出提示并退出。系統(tǒng)自動地計(jì)算出應(yīng)找錢幣余額、庫存數(shù)量并顯示。(提示:錢數(shù)以5角為單位。) 任務(wù)要求 ①根據(jù)設(shè)計(jì)題目要求編寫相應(yīng)程序代碼 ②對編寫的VHDL程序代碼進(jìn)行編譯和仿真 ③總結(jié)設(shè)計(jì)內(nèi)容,完成課程設(shè)計(jì)說明書 參考文獻(xiàn) [1] 焦素敏.EDA課程設(shè)計(jì)指導(dǎo)書.鄭州:河南工業(yè)大學(xué),2008 [2] 潘松,黃繼業(yè).EDA技術(shù)實(shí)用教程.北京:科學(xué)出版社,2002 [3] 王國棟,潘松等.VHDL實(shí)用教程.成都:電子科技大學(xué)出版社,2000 [4] 張亦華,延明.數(shù)字電路EDA入門.北京:電子工業(yè)出版社,2003 [5] http://www.ele-diy.com/ 中國電子制作網(wǎng) 網(wǎng)站 審查意見 指導(dǎo)教師簽字 教研室主任簽字 2012年 2月 20日 一. 設(shè)計(jì)說明 根據(jù)要求可自動出售兩種貨物,本文設(shè)計(jì)的自動售貨機(jī)可銷售cola 和 pepsi兩種飲料:售貨機(jī)可識別1元和0.5元的兩種貨幣,在一次購買過程中,可購買一個(gè)或多個(gè)商品,系統(tǒng)會自動計(jì)算所需錢數(shù)和找零的錢數(shù)并自動找零。另外有3個(gè)發(fā)光二極管、6個(gè)LCD數(shù)碼管:兩個(gè)用來顯示所需金額,兩個(gè)用來顯示已付金額,兩個(gè)用來顯示找零數(shù)。 1.1.1 流程說明 本文設(shè)計(jì)的自動售貨機(jī)當(dāng)通電時(shí),表示一次銷售的開始。顧客選擇一種商品或多種商品后就進(jìn)入投幣狀態(tài)。若不投幣,則自動返回初始狀態(tài)。投幣后,系統(tǒng)自動計(jì)算所投錢數(shù)。若投幣夠,則出貨并找零。若投幣不夠,如果顧客沒有繼續(xù)投幣,則退幣并回到初始狀態(tài)。本系統(tǒng)的投幣銷售流程圖如圖所示: 退幣清零 結(jié) 束 出貨找零 繼續(xù)投幣 綜合〉物價(jià) 計(jì)算金額 投幣 選 擇 開始 1.1.2各模塊說明 本文設(shè)計(jì)的自動售貨機(jī)總體分三個(gè)模塊:總控模塊,二進(jìn)制譯碼模塊、BCD碼譯碼模塊。 總控模塊:總控模塊是本系統(tǒng)最重要的模塊,該模塊大體有5個(gè)輸入端口和6個(gè)輸出端口。其輸入端口包括clk、coin1(投入一元貨幣)、coin5(投入0.5元貨幣)、cola(選擇cola)、pepsi(選擇pepsi),輸出端口有paid(已投入多少錢)、needed(還需多少錢)moneyout(找零)、success(燈亮表示交易成功)、failure(燈亮表示交易失?。howmoneyout(燈亮表示正在找零)。該模塊實(shí)現(xiàn)了本系統(tǒng)最重要的交易過程,包括選擇商品、投入貨幣,計(jì)算剩余金額,找零出貨等。 二進(jìn)制譯碼模塊:該模塊有一個(gè)輸入端口和兩個(gè)輸出端口。輸入端口是一個(gè)8位的二進(jìn)制數(shù)輸出端口bcd0、bcd1是兩個(gè)4位的BCD碼。該模塊的主要的功能是實(shí)現(xiàn)將主控模塊輸出的二進(jìn)制數(shù)(paid、needed、moneyout)轉(zhuǎn)換成BCD碼,以便輸出到七段數(shù)碼管上顯示出來。該模塊的原理是將一個(gè)8位的二進(jìn)制轉(zhuǎn)換成2個(gè)4位的BCD碼,分為高四位和低四位。 BCD碼譯碼模塊:該模塊有一個(gè)輸入端口和一個(gè)輸出端口 1.1.3 程序設(shè)計(jì) 主控模塊完整程序如下: Library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity shouhuoji is port(clk: in std_logic; coin1:in std_logic; coin5:in std_logic; cola:in std_logic; pepsi:in std_logic; paid:out std_logic_vector(7 downto 0); needed:out std_logic_vector(7 downto 0); success:out std_logic; failure:out std_logic; showmoneyout:out std_logic; moneyout:out std_logic_vector(7 downto 0)); end shouhuoji; architecture behav of shouhuoji is type state_type is (qa,qb,qe,qc,qg,qd,qf);--定義七個(gè)狀態(tài) signal current_state :state_type:=qa; signal q:integer range 0 to 100; begin process(clk) variable paidtemp:std_logic_vector(7 downto 0);--定義變量 variable neededtemp:std_logic_vector(7 downto 0); variable backmoney:std_logic_vector(7 downto 0); variable pricetemp:std_logic_vector(7 downto 0); begin if clkevent and clk=1 then case current_state is when qa=>paidtemp:="00000000";neededtemp:="00000000"; backmoney:="00000000";pricetemp:="00000000";q<=0; showmoneyout<=0;moneyout<="00000000";paid<="00000000"; needed<="00000000";failure<=0;success<=0; if cola=1 or pepsi=1 then current_state<=qb; if cola=1 then pricetemp:=pricetemp+"00001111"; neededtemp:=pricetemp; Else pricetemp:=pricetemp+"00010100"; neededtemp:=pricetemp; end if; end if; paid<=paidtemp; needed<=neededtemp; when qb=>if coin1=1 or coin5=1 then if coin1=1then paidtemp:=paidtemp+"00001010"; else paidtemp:=paidtemp+"00000101"; end if; if paidtemp>=pricetemp then backmoney:=paidtemp-pricetemp; neededtemp:="00000000";current_state<=qd; else neededtemp:=pricetemp-paidtemp;backmoney:="00000000"; current_state<=qc;q<=0; end if; paid<=paidtemp; needed<=neededtemp; end if; if q<8 then q<=q+1; if cola=1 or pepsi=1then q<=0; if cola=1 then pricetemp:=pricetemp+"00001111"; neededtemp:=neededtemp+"00001111"; else pricetemp:=pricetemp+"00010100"; neededtemp:=neededtemp+"00010100"; end if; paid<=paidtemp; needed<=neededtemp; end if; else current_state<=qe;q<=0; end if; when qe=>failure<=1; if q<4 then q<=q+1; else current_state<=qa;q<=0; end if; when qc=>if coin1=1 or coin5=1 then if coin1=1then paidtemp:=paidtemp+"00001010"; else paidtemp:=paidtemp+"00000101"; end if; if paidtemp>=pricetemp then backmoney:=paidtemp-pricetemp; neededtemp:="00000000";current_state<=qd; else neededtemp:=pricetemp-paidtemp;backmoney:="00000000"; current_state<=qc; end if; paid<=paidtemp; needed<=neededtemp; end if; if coin1/=1and coin5/=1 then if q<10 then q<=q+1; else current_state<=qg; end if; else q<=0; end if; when qg=>failure<=1; showmoneyout<=1;moneyout<=paidtemp; current_state<=qf;q<=0; success<=0; when qd=>success<=1; if backmoney>"00000000"then showmoneyout<=1; moneyout<=backmoney; end if; current_state<=qf;q<=0; when qf=>if q<4 then q<=q+1; else current_state<=qa;q<=0; end if; end case; else end if; end process; end behav; BCD譯碼模塊完整程序如下: Library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity code1 is port( b:in std_logic_vector(7 downto 0); bcd0:out std_logic_vector(3 downto 0); bcd1:out std_logic_vector(3 downto 0) ) ; end code1; architecture one of code1 is begin process(b) begin case b is when"00000000"=>bcd0<="0000";bcd1<="0000";--譯碼“0”; when"00000001"=>bcd0<="0001";bcd1<="0000";--譯碼“1”; when"00000010"=>bcd0<="0010";bcd1<="0000";--譯碼“2”; when"00000011"=>bcd0<="0011";bcd1<="0000";--譯碼“3”; when"00000100"=>bcd0<="0100";bcd1<="0000";--譯碼“4”; when"00000101"=>bcd0<="0101";bcd1<="0000";--譯碼“5”; when"00000110"=>bcd0<="0110";bcd1<="0000"; when"00000111"=>bcd0<="0111";bcd1<="0000"; when"00001000"=>bcd0<="1000";bcd1<="0000"; when"00001001"=>bcd0<="1001";bcd1<="0000"; when"00001010"=>bcd0<="0000";bcd1<="0001"; when"00001011"=>bcd0<="0001";bcd1<="0001"; when"00001100"=>bcd0<="0010";bcd1<="0001"; when"00001101"=>bcd0<="0011";bcd1<="0001"; when"00001110"=>bcd0<="0100";bcd1<="0001"; when"00001111"=>bcd0<="0101";bcd1<="0001"; when"00010000"=>bcd0<="0110";bcd1<="0001"; when"00010001"=>bcd0<="0111";bcd1<="0001"; when"00010010"=>bcd0<="1000";bcd1<="0001"; when"00010011"=>bcd0<="1001";bcd1<="0001"; when"00010100"=>bcd0<="0000";bcd1<="0010";譯碼“20” when others=>null; end case; end process; end one; 頂層模塊完整程序如下: library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; entity top is Port( clk1:in std_logic; C1,C5,P1_5,P2:in std_logic; paid_lcd0,paid_lcd1,needed_lcd0,needed_lcd1,Mout_lcd0,Mout_lcd1:out std_logic_vector(3 downto 0); s,f,showout :out std_logic ); end top; architecture one of top is component shouhuoji port ( clk:in std_logic; coin1:in std_logic; coin5:in std_logic; cola:in std_logic; pepsi:in std_logic; paid:out std_logic_vector(7 downto 0); needed:out std_logic_vector(7 downto 0); success:out std_logic; failure:out std_logic; showmoneyout:out std_logic; moneyout:out std_logic_vector(7 downto 0) ); end component; component code1 port( b:in std_logic_vector( 7 downto 0); bcd0:out std_logic_vector(3 downto 0); bcd1:out std_logic_vector(3 downto 0) ); end component; signal p,n,mo:std_logic_vector( 7 downto 0); --signal s1,s2,s3,s4,s5,s6:std_logic_vector(3 downto 0); begin u0:shouhuoji--各模塊連接 port map(clk=>clk1,coin1=>C1,coin5=>C5,cola=>P1_5,pepsi=>P2, success=>s,failure=>f,showmoneyout=>showout,paid=>p,needed=>n,moneyout=>mo); u1:code1 port map(b=>p,bcd0=>paid_lcd0,bcd1=>paid_lcd1); u2:code1 port map(b=>n,bcd0=>needed_lcd0,bcd1=>needed_lcd1); u3:code1 port map(b=>mo,bcd0=>Mout_lcd0,bcd1=>Mout_lcd1); end one; 1.1.4各模塊的連接 各模塊的連接如圖所示: 售貨機(jī)主控系統(tǒng)和譯碼器模塊圖 售貨機(jī)頂層模塊 2、1 主控模塊的仿真 上圖表示顧客選擇了pepsi飲料后,且投了2個(gè)一元的硬幣。Success為高電平,代表售貨機(jī)有飲料售出。且余額為0. 上圖表示顧客選擇了pepsi飲料后,且投1個(gè)一元的硬幣和一個(gè)0.5元的硬幣。failure為高電平,代表售貨機(jī)無飲料售出。且余額為已投的金額,將錢退還給顧客。. 2.BCD碼譯碼的仿真 上圖表示自動售貨機(jī)的譯碼系統(tǒng),上圖表示將8位數(shù)字轉(zhuǎn)換成4位BCD碼。 3.TOP文件的仿真 上圖表示顧客選擇了pepsi飲料后,且投了2個(gè)一元的硬幣。Success為高電平,代表售貨機(jī)有飲料售出。且余額為0. 上圖表示顧客選擇了pepsi飲料后,且投1個(gè)一元的硬幣和一個(gè)0.5元的硬幣。Failure 為高電平,代表售貨機(jī)無飲料售出。Showout為退幣指示燈。.Mout_lcd0和Mout_lcd1,顯示退幣的金額。Paided _lcd0 和Paided_lcd1 needed _lcd0 和needed_lcd1 分別顯示已付金額和還需要的金額數(shù)。 3. 下載驗(yàn)證 在無數(shù)次的調(diào)試與修改中,下載驗(yàn)證能夠?qū)崿F(xiàn)題目的要求 4. 參考文獻(xiàn):[1] 焦素敏.EDA課程設(shè)計(jì)指導(dǎo)書.鄭州:河南工業(yè)大學(xué),2008 [2] 潘松,黃繼業(yè).EDA技術(shù)實(shí)用教程.北京:科學(xué)出版社,2002 [3] 王國棟,潘松等.VHDL實(shí)用教程.成都:電子科技大學(xué)出版社,2000 [4] 張亦華,延明.數(shù)字電路EDA入門.北京:電子工業(yè)出版社,2003 [5] http://www.ele-diy.com/ 中國電子制作網(wǎng) 網(wǎng)站 5. 心得體會 自動售貨機(jī)系統(tǒng)的設(shè)計(jì)經(jīng)過一個(gè)星期的設(shè)計(jì)已經(jīng)全部完成,能按預(yù)期的效果進(jìn)行多次購買、找零出貨、并且在數(shù)碼管上顯示出已投貨幣的金額、還需金額、找零,同時(shí)有指示燈提示交易成功、交易失敗、正在找零。在自動售貨機(jī)系統(tǒng)的3個(gè)模塊中,最主要的是主控模塊,其次的還有二進(jìn)制譯碼模塊和BCD碼譯碼模塊。各模塊完成后,將它們組合成完整的自動售貨機(jī)系統(tǒng)。在設(shè)計(jì)過程中還需改進(jìn)的是。本文所用的VHDL語言雖然語法規(guī)則與其他計(jì)算機(jī)高級語言如C語言在很多方面很類似,但它畢竟是硬件描述語言,其本質(zhì)作用在于描述硬件,因而會受硬件環(huán)境的限制。因此,為了達(dá)到設(shè)計(jì)的預(yù)期效果,在代碼編寫前,應(yīng)做到對硬件電路心中有數(shù),不能一味的追求代碼的完美,而應(yīng)該已實(shí)現(xiàn)的硬件電路的性能優(yōu)劣為標(biāo)準(zhǔn)。- 1.請仔細(xì)閱讀文檔,確保文檔完整性,對于不預(yù)覽、不比對內(nèi)容而直接下載帶來的問題本站不予受理。
- 2.下載的文檔,不會出現(xiàn)我們的網(wǎng)址水印。
- 3、該文檔所得收入(下載+內(nèi)容+預(yù)覽)歸上傳者、原創(chuàng)作者;如果您是本文檔原作者,請點(diǎn)此認(rèn)領(lǐng)!既往收益都?xì)w您。
下載文檔到電腦,查找使用更方便
9.9 積分
下載 |
- 配套講稿:
如PPT文件的首頁顯示word圖標(biāo),表示該P(yáng)PT已包含配套word講稿。雙擊word圖標(biāo)可打開word文檔。
- 特殊限制:
部分文檔作品中含有的國旗、國徽等圖片,僅作為作品整體效果示例展示,禁止商用。設(shè)計(jì)者僅對作品中獨(dú)創(chuàng)性部分享有著作權(quán)。
- 關(guān) 鍵 詞:
- eda 課程設(shè)計(jì) 自動 售貨 設(shè)計(jì)
鏈接地址:http://www.820124.com/p-6723385.html