自动售货机控制系统设计-VHDL-QuartusII
自动售货机控制系统设计-VHDL-QuartusII
名称:自动售货机控制系统-VHDL-QuartusII
软件:Quartus II
语言:VHDL
商品自动售货机
1、支持投币1元、2元、5元
2、具有单价1元、2元、3元的商品,通过按键选择商品
3、选中后确认,开始投币,若投币金额大于单价则自动出货并找零
4、投币过程中可以取消,退回所投金额
5、数码管显示购买状态(单价,投币金额,找零金额),led指示购买成功
设计文档:
1、工程文件

2、程序文件



3、程序编译

4、RTL图

5、仿真图
整体仿真图


按键消抖模块


控制模块


显示模块


部分代码展示:
--售货控制模块 LIBRARY ieee; USE ieee.std_logic_1164.all; USE ieee.std_logic_unsigned.all; ENTITY 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;--投币1 coin_2_p : IN STD_LOGIC;--投币2 coin_5_p : IN STD_LOGIC;--投币5 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 sell_ctrl; ARCHITECTURE trans OF sell_ctrl IS SIGNAL need_money_buf : STD_LOGIC_VECTOR(3 DOWNTO 0) := "0000"; SIGNAL input_money_buf : STD_LOGIC_VECTOR(3 DOWNTO 0) := "0000"; SIGNAL refound_money_buf : STD_LOGIC_VECTOR(3 DOWNTO 0) := "0000"; SIGNAL state : STD_LOGIC_VECTOR(2 DOWNTO 0) := "000"; SIGNAL buy_succeed_buf : STD_LOGIC := '0'; BEGIN select_num <= need_money_buf; input_money <= input_money_buf; refound_money <= refound_money_buf; --状态转换 PROCESS (clk, reset_n) BEGIN IF (reset_n = '0') THEN state <= "000"; ELSIF (clk'EVENT AND clk = '1') THEN CASE state IS WHEN "000" => state <= "001"; WHEN "001" =>--选择票价 IF (confirm_p = '1') THEN state <= "010"; ELSE state <= "001"; END IF; WHEN "010" =>--投币 IF (input_money_buf >= need_money_buf) THEN state <= "011"; ELSIF (concel_p = '1') THEN state <= "011"; ELSE state <= "010"; END IF; WHEN "011" =>--找零 IF (confirm_p = '1') THEN state <= "100"; ELSE state <= "011"; END IF; WHEN "100" =>--结束 state <= "000"; WHEN OTHERS => state <= "000"; END CASE; END IF; END PROCESS; --票价选择(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 IF (need_money_buf >= "0011") THEN need_money_buf <= "0001"; ELSE need_money_buf <= need_money_buf + "0001"; 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; --投币累计 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"; ELSIF (coin_5_p = '1') THEN input_money_buf <= input_money_buf + "0101"; ELSIF (coin_2_p = '1') THEN input_money_buf <= input_money_buf + "0010"; ELSE input_money_buf <= input_money_buf; END IF; ELSIF (state = "100") THEN input_money_buf <= "0000"; END IF; END IF; END PROCESS; buy_succeed <= (buy_succeed_buf);--购买成功 --找零计算 PROCESS (clk, reset_n) BEGIN IF (reset_n = '0') THEN refound_money_buf <= "0000"; buy_succeed_buf <= '0'; ELSIF (clk'EVENT AND clk = '1') THEN IF (state = "011") THEN IF (input_money_buf >= need_money_buf) THEN refound_money_buf <= input_money_buf - need_money_buf; buy_succeed_buf <= '1'; ELSE refound_money_buf <= input_money_buf; buy_succeed_buf <= '0'; END IF; ELSIF (state = "100") THEN refound_money_buf <= "0000"; buy_succeed_buf <= '0'; END IF; END IF; END PROCESS; END trans;
代码下载(付费可见)
![]()
1、代码文件需要付费后才可见。
2、支付问题请联系微信公众号客服。
3、优质Verilog/VHDL代码资源,所见即所得。
Verilog/VHDL资源下载 » 自动售货机控制系统设计-VHDL-QuartusII
2、支付问题请联系微信公众号客服。
3、优质Verilog/VHDL代码资源,所见即所得。
Verilog/VHDL资源下载 » 自动售货机控制系统设计-VHDL-QuartusII
发表评论
模板文件不存在: ./template/plugins/comment/pc/index.htm