8.21 自动售货机控制系统设计.ppt
8.21 8.21 自动售货机控制系统设计自动售货机控制系统设计设计要求n设计制作一个自动售货机控制系统。n该系统能完成货物信息存储,进程控制,硬币处理,余额计算,显示等功能。n该系统可以管理四种货物,每种的数量和单价在初始化时输入,在存储器中存储。用户可以用硬币进行购物,按键进行选择。n系统根据用户输入的货币,判断钱币是否够,钱币足够则根据顾客的要求自动售货,钱币不够则给出提示并退出。n系统自动的计算出应找钱币余额、库存数量并显示。系统组成n系统以FPGA器件为处理数据和控制核心。n系统按功能分为:分频模块 控制模块 译码模块 译码显示模块。系统组成方框图 n首先由售货员把自动售货机里的每种商品的数量和单价通过set键和sel键置入到RAM里。n然后顾客通过sel键对所需要购买的商品进行选择,选定以后通过get键进行购买,再按finish键取回找币,同时结束此次交易。n按get键时,如果投的钱数等于或则大于所购买的商品单价,则自动售货机会给出所购买的商品;如果投的钱数不够,自动售货机不做响应,继续等待顾客的下次操作。n顾客的下次操作可以继续投币,直到钱数到达所要的商品单价进行购买;也可以直接按finish键退币。自动售货机VHDL程序与仿真 自动售货机VHDL程序n-文件名:AUTO.vhd。n-功能:货物信息存储,进程控制,硬币处理,余额计算,显示等功能。n-说明:显示的钱数coin的 以5角为单位。n-最后修改日期:2004.3.23。nlibrary ieee;nuse ieee.std_logic_arith.all;nuse ieee.std_logic_1164.all;nuse ieee.std_logic_unsigned.all;nentity AUTO isnport(clk:in std_logic;-系统时钟nset,get,sel,finish:in std_logic;-设定、买、选择、完成信号ncoin0,coin1:in std_logic;-5角硬币、1元硬币nprice,quantity :in std_logic_vector(3 downto 0);-价格、数量数据nitem0,act:out std_logic_vector(3 downto 0);-显示、开关信号ny0,y1:out std_logic_vector(6 downto 0);-钱数、商品数量显示数据nact10,act5 :out std_logic);-1元硬币、5角硬币nend AUTO;narchitecture behav of AUTO isntype ram_type is array(3 downto 0)of std_logic_vector(7 downto 0);nsignal ram:ram_type;-定义RAMnsignal item:std_logic_vector(1 downto 0);-商品种类nsignal coin:std_logic_vector(3 downto 0);-币数计数器nsignal pri,qua:std_logic_vector(3 downto 0);-商品单价、数量nsignal clk1:std_logic;-控制系统的时钟信号nbeginncom:process(set,clk1)nvariable quan:std_logic_vector(3 downto 0);nbeginn if set=1 then ram(conv_integer(item)=price&quantity;act=0000;n -把商品的单价、数量置入到RAMn elsif clk1event and clk1=1 then act5=0;act10=0;n if coin0=1 then n if coin1001then coin=coin+1;-投入5角硬币,coin自加1n else coin=0000;n end if;n elsif coin1=1 then n if coin1001then coin=coin+2;-投入1元硬币,coin自加2n else coin=0000;n end if;n elsif sel=1 then item0000 and coin=pri then coin=coin-pri;quan:=quan-1;n ram(conv_integer(item)=pri&quan;n if item=00 then act=1000;-购买时,自动售货机对4种商品的操作n elsif item=01 then act=0100;n elsif item=10 then act=0010;n elsif item=11 then act“0001”then act10=1;coin0000 then act5=1;coin=coin-1;n else act5=0;act10=0;n end if;n elsif get=0 then act=0000;n for i in 4 to 7 loop n pri(i-4)=ram(conv_integer(item)(i);-商品单价的读取n end loop;n for i in 0 to 3 loopn quan(i):=ram(conv_integer(item)(i);-商品数量的读取n end loop;n end if;n end if;n qua=quan;nend process com;nm32:process(clk)-此进程完成对32Mhz的脉冲分频nvariable q:std_logic_vector(24 downto 0);nbeginn if clkevent and clk=1 then q:=q+1;n end if;n if q=111111111111111111111111 then clk1=1;n else clk1item0item0item0item0y0y0y0y0y0y0y0y0y0y0y0y1y1y1y1y1y1y1y1y1y1y1=1111111;n end case;nend process;nend behav;自动售货机VHDL程序仿真 n1.系统仿真全图 n2.系统仿真图-预置部分 n3.系统仿真图-商品种类选择部分 n4.系统仿真图-投币部分 n5.系统仿真图-购买、找币结束交易部分(1.系统仿真全图)(2.系统仿真图-预置部分)(3.系统仿真图-商品种类选择部分)(4.系统仿真图-投币部分)(5.系统仿真图-购买、找币结束交易部分)