• 方案介紹
  • 附件下載
  • 相關(guān)推薦
申請入駐 產(chǎn)業(yè)圖譜

自動(dòng)售貨機(jī)basys2開發(fā)板VHDL可改單價(jià)找零販賣機(jī)自助機(jī)

加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點(diǎn)資訊討論

1-2311062209123F.doc

共1個(gè)文件

名稱:自動(dòng)售貨機(jī)basys2開發(fā)板VHDL可改單價(jià)販賣機(jī)自助機(jī)(代碼在文末下載)

軟件:ISE

語言:VHDL

代碼功能:

自動(dòng)售貨機(jī)

1、具有3元、6元、7元、9元的商品,通過按鍵選擇商品。

2、可以投幣1元、2元、5元、10元。

3、購買成功后有led燈提示,且具有找零功能。

4、具有取消按鍵,可以取消購買,退回已投金額。

本代碼商品單價(jià)及投幣金額可以自行修改,相關(guān)代碼如下

--商品選擇(1~3)
???PROCESS?(clk,?reset_n)
???BEGIN
??????IF?(reset_n?=?'0')?THEN
?????????need_money_buf?<=?"0000";
??????ELSIF?(clk'EVENT?AND?clk?=?'1')?THEN
?????????IF?(state?=?"001")?THEN
????????????IF?(select_p?=?'1')?THEN--商品有3.6.7.9元的
???IF?(need_money_buf?=?"0000")?THEN
need_money_buf?<=?"0011";--商品3元的
???????????????ELSIF(need_money_buf?=?"0011")?THEN
??????????????????need_money_buf?<=?"0110";--商品6元的
???????????????ELSIF(need_money_buf?=?"0110")?THEN
need_money_buf?<=?"0111";--商品7元的
???????????????ELSIF(need_money_buf?=?"0111")?THEN
need_money_buf?<=?"1001";--商品9元的
???????????????ELSIF(need_money_buf?=?"1001")?THEN
need_money_buf?<=?"0011";--商品3元的
???????????????END?IF;
????????????ELSE
???????????????need_money_buf?<=?need_money_buf;
????????????END?IF;
?????????ELSIF?(state?=?"100")?THEN
????????????need_money_buf?<=?"0000";
?????????END?IF;
??????END?IF;
???END?PROCESS;
???
--投幣累計(jì)
???PROCESS?(clk,?reset_n)
???BEGIN
??????IF?(reset_n?=?'0')?THEN
?????????input_money_buf?<=?"0000";
??????ELSIF?(clk'EVENT?AND?clk?=?'1')?THEN
?????????IF?(state?=?"010")?THEN
????????????IF?(coin_1_p?=?'1')?THEN
???????????????input_money_buf?<=?input_money_buf?+?"0001";--投幣1元
????????????ELSIF?(coin_5_p?=?'1')?THEN
???????????????input_money_buf?<=?input_money_buf?+?"0101";--投幣5元
????????????ELSIF?(coin_2_p?=?'1')?THEN
???????????????input_money_buf?<=?input_money_buf?+?"0010";--投幣2元
????????????ELSIF?(coin_10_p?=?'1')?THEN
???????????????input_money_buf?<=?input_money_buf?+?"1010";--投幣10元
????????????ELSE
???????????????input_money_buf?<=?input_money_buf;
????????????END?IF;
?????????ELSIF?(state?=?"100")?THEN
????????????input_money_buf?<=?"0000";
?????????END?IF;
??????END?IF;
???END?PROCESS;

FPGA代碼Verilog/VHDL代碼資源下載:www.hdlcode.com

本代碼已在Basys2開發(fā)板驗(yàn)證,開發(fā)板如下,其他開發(fā)板可以修改管腳適配:

basys2.png

演示視頻:

設(shè)計(jì)文檔:

1. 工程文件

2. 程序文件

3. 程序編譯

4. Testbench

5. 仿真圖

整體仿真圖

按鍵下降沿輸出模塊仿真

售貨機(jī)控制模塊仿真,下圖select_p按下三次,最終選擇了7元商品(select_num=7),再按下確認(rèn)鍵(confirm_p=1)后開始投幣,先后投幣了1,2,5元,共8元(input_money=8),找零金額為refound_money=1。

數(shù)碼管顯示模塊仿真

7段數(shù)碼管對(duì)照編碼

部分代碼展示:

LIBRARY?ieee;
???USE?ieee.std_logic_1164.all;
???
?--頂層模塊
ENTITY?auto_sell?IS
???PORT?(
??????clk_50M????????:?IN?STD_LOGIC;--50M時(shí)鐘
??????reset_n????????:?IN?STD_LOGIC;--復(fù)位
??????
??????select_key_n???:?IN?STD_LOGIC;--商品選擇按鍵
??????confirm_key_n??:?IN?STD_LOGIC;--確認(rèn)按鍵
??????cancel_key_n???:?IN?STD_LOGIC;--取消按鍵
??????coin_1_n???????:?IN?STD_LOGIC;--投幣1元
??????coin_2_n???????:?IN?STD_LOGIC;--投幣2元
??????coin_5_n???????:?IN?STD_LOGIC;--投幣5元
coin_10_n???????:?IN?STD_LOGIC;--投幣10元
??????
??????buy_succeed????:?OUT?STD_LOGIC;--購買成功
??????bit_select?????:?OUT?STD_LOGIC_VECTOR(3?DOWNTO?0);--數(shù)碼管位選
??????seg_select?????:?OUT?STD_LOGIC_VECTOR(7?DOWNTO?0)--數(shù)碼管段選
???);
END?auto_sell;
ARCHITECTURE?trans?OF?auto_sell?IS
--售貨控制模塊
component?sell_ctrl?IS
???PORT?(
??????clk????????????:?IN?STD_LOGIC;
??????reset_n????????:?IN?STD_LOGIC;
??????
??????confirm_p??????:?IN?STD_LOGIC;
??????select_p???????:?IN?STD_LOGIC;
??????concel_p???????:?IN?STD_LOGIC;
??????
??????coin_1_p???????:?IN?STD_LOGIC;
??????coin_2_p???????:?IN?STD_LOGIC;
??????coin_5_p???????:?IN?STD_LOGIC;
coin_10_p???????:?IN?STD_LOGIC;--投幣10元
??????
??????buy_succeed????:?OUT?STD_LOGIC;
??????select_num?????:?OUT?STD_LOGIC_VECTOR(3?DOWNTO?0);
??????input_money????:?OUT?STD_LOGIC_VECTOR(3?DOWNTO?0);
??????refound_money??:?OUT?STD_LOGIC_VECTOR(3?DOWNTO?0)
???);
END?component;
--按鍵消抖模塊
component?key_jitter?IS
???PORT?(
??????clkin????????:?IN?STD_LOGIC;
??????key_in???????:?IN?STD_LOGIC;
??????key_negedge??:?OUT?STD_LOGIC
???);
END?component;
--顯示模塊
component?display?IS
???PORT?(
??????clk????????????:?IN?STD_LOGIC;
??????
??????select_num?????:?IN?STD_LOGIC_VECTOR(3?DOWNTO?0);
??????input_money????:?IN?STD_LOGIC_VECTOR(3?DOWNTO?0);
??????refound_money??:?IN?STD_LOGIC_VECTOR(3?DOWNTO?0);
??????
??????bit_select?????:?OUT?STD_LOGIC_VECTOR(3?DOWNTO?0);
??????seg_select?????:?OUT?STD_LOGIC_VECTOR(7?DOWNTO?0)
???);
END?component;
???SIGNAL?select_num????????:?STD_LOGIC_VECTOR(3?DOWNTO?0);
???SIGNAL?input_money???????:?STD_LOGIC_VECTOR(3?DOWNTO?0);
???SIGNAL?refound_money?????:?STD_LOGIC_VECTOR(3?DOWNTO?0);
???
???SIGNAL?confirm_p?????????:?STD_LOGIC;
???SIGNAL?select_p??????????:?STD_LOGIC;
???SIGNAL?concel_p??????????:?STD_LOGIC;
???
???SIGNAL?coin_1_p??????????:?STD_LOGIC;
???SIGNAL?coin_2_p??????????:?STD_LOGIC;
???SIGNAL?coin_5_p??????????:?STD_LOGIC;
SIGNAL?coin_10_p??????????:?STD_LOGIC;
???
???--?Declare?intermediate?signals?for?referenced?outputs
???SIGNAL?buy_succeed_buf?:?STD_LOGIC;
???SIGNAL?bit_select_buf??:?STD_LOGIC_VECTOR(3?DOWNTO?0);
???SIGNAL?seg_select_buf??:?STD_LOGIC_VECTOR(7?DOWNTO?0);
BEGIN
???--?Drive?referenced?outputs
???buy_succeed?<=?buy_succeed_buf;
???bit_select?<=?bit_select_buf;
???seg_select?<=?seg_select_buf;
--調(diào)用按鍵消抖模塊???
???i1_key_jitter?:?key_jitter
??????PORT?MAP?(
?????????clkin????????=>?clk_50M,
?????????key_in???????=>?select_key_n,
?????????key_negedge??=>?select_p
??????);
???
???
--調(diào)用按鍵消抖模塊???
???i2_key_jitter?:?key_jitter
??????PORT?MAP?(
?????????clkin????????=>?clk_50M,
?????????key_in???????=>?confirm_key_n,
?????????key_negedge??=>?confirm_p
??????);
???
???
--調(diào)用按鍵消抖模塊???
???i3_key_jitter?:?key_jitter
??????PORT?MAP?(
?????????clkin????????=>?clk_50M,
?????????key_in???????=>?cancel_key_n,
?????????key_negedge??=>?concel_p
??????);
???
???
--調(diào)用按鍵消抖模塊???
???i4_key_jitter?:?key_jitter
??????PORT?MAP?(
?????????clkin????????=>?clk_50M,
?????????key_in???????=>?coin_1_n,
?????????key_negedge??=>?coin_1_p
??????);
???
???
--調(diào)用按鍵消抖模塊???
???i5_key_jitter?:?key_jitter
??????PORT?MAP?(
?????????clkin????????=>?clk_50M,
?????????key_in???????=>?coin_2_n,
?????????key_negedge??=>?coin_2_p
??????);
???
???
--調(diào)用按鍵消抖模塊???
???i6_key_jitter?:?key_jitter
??????PORT?MAP?(
?????????clkin????????=>?clk_50M,
?????????key_in???????=>?coin_5_n,
?????????key_negedge??=>?coin_5_p
??????);
--調(diào)用按鍵消抖模塊???
???i7_key_jitter?:?key_jitter
??????PORT?MAP?(
?????????clkin????????=>?clk_50M,
?????????key_in???????=>?coin_10_n,
?????????key_negedge??=>?coin_10_p
??????);
???
?--調(diào)用售貨控制模塊??
???i_sell_ctrl?:?sell_ctrl
??????PORT?MAP?(
?????????clk????????????=>?clk_50M,
?????????reset_n????????=>?reset_n,
?????????
?????????confirm_p??????=>?confirm_p,
?????????select_p???????=>?select_p,
?????????concel_p???????=>?concel_p,
?????????
?????????coin_1_p???????=>?coin_1_p,
?????????coin_2_p???????=>?coin_2_p,
?????????coin_5_p???????=>?coin_5_p,
coin_10_p??????=>?coin_10_p,
?????????
?????????buy_succeed????=>?buy_succeed_buf,
?????????select_num?????=>?select_num,
?????????input_money????=>?input_money,
?????????refound_money??=>?refound_money
??????);
???
???
?--調(diào)用顯示模塊??
???i_display?:?display
??????PORT?MAP?(
?????????clk????????????=>?clk_50M,
?????????
?????????select_num?????=>?select_num,
?????????input_money????=>?input_money,
?????????refound_money??=>?refound_money,
?????????
?????????bit_select?????=>?bit_select_buf,
?????????seg_select?????=>?seg_select_buf
??????);
???
END?trans;

點(diǎn)擊鏈接獲取代碼文件:http://www.hdlcode.com/index.php?m=home&c=View&a=index&aid=266

  • 1-2311062209123F.doc
    下載

相關(guān)推薦