自动售货机控制系统_第1页
自动售货机控制系统_第2页
自动售货机控制系统_第3页
自动售货机控制系统_第4页
自动售货机控制系统_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、成绩 Xuzhou Institute of Technology可编程器件及应用课程设计报告设计名称:自动售货机控制系统学 院:信电工程学院专业班级:13电信学生姓名:学 号:指导教师:贾燕玲 2016 年 6 月 30 日目 录一、前言1二、设计项目及要求1三、设计流程2(一)设计说明3(二)流程说明3四、软件设计3(一)顶层电路图4(一)状态转换4(二)模块组成51、总控模块52、译码模块93、显示模块10五、各模块软件仿真及分析12(一)顶层电路仿真12 (二)主控模块仿真12 (三)显示模块仿真.13 (四)译码模块仿真.,.13 六、总结15附录161、初始状态实物图162、购买状

2、态实物图16 3、合作分工.17 一、前言随着科技的发展和社会的进步,自动化商业机械有了越来越广泛的的应用,自动售货机作为自动化商业机械的代表被广泛用于公共场所自动售货,给人们的生活带来了极大的方便。特别在发达的国家,自动售货机已经十分普及,自动售货机可售出各种成型包装的小商品,各种袋装,盒装,软瓶装等小商品。因其无需专人值守而可以每天24 小时售货,被称为“无人小超市”。在我国,由于多种原因,自动售货机的市场推广缓慢,随着商品市场的不断繁荣,自动售货机和自动服务设施必将逐步得到广泛的应用。本文设计研究自动售货机的主要功能模块,主要包括货币处理模块、余额计算模块、显示模块,延时和时控模块。相应

3、的功能有选择货物,多次购买,出货找零。本文是通过使用VHDL语言,基于KX GW48FPGA芯片,并通过使用QUARTUS II软件进行程序设计,模拟仿真,功能验证,以更好的来理解和掌握自动售货机控制系统的工作原理和设计方法,以及学习和掌握基于EDA的电子产品设计方法,进一步加深对VHDL语言以及QUARTUS II 软件、FPGA可编程芯片的认识与了解。FPGA是现场可编程门阵列(Field programmable gates array)的英文简称。是有可编程逻辑模块组成的数字集成电路(IC)。这些逻辑模块之间用可配置的互联资源。设计者可以对这些器件进行编程来完成各种各样的任务 二、设计

4、项目及要求设计一个自动售货机,它能够完成对货物信息的存储,硬币处理,余额计算和显示等功能。(1)自动售货机可以出售四种货物,每种商品的数量和单价在初始化时设定,并存储在存储器中。(2)采用模拟开关分别模拟5角和1元的硬币来进行购物,并通过按键来选择商品。(3)系统能够根据用户输入的硬币,判断钱币是否够,当所投硬币达到或超过购物者所选面值时,则根据顾客的要求自动售货,并找回剩余的硬币,然后回到初始状态。当所投硬币不够时,则给出提示,并通过一个复位键退回所投硬币,然后回到初始状态。三、设计流程(一)设计说明 本文设计的自动售货机可销售四种货物,售货机可识别1元和0.5元的两种货币,在一次购买过程中

5、,可购买一个或多个商品,系统会自动计算所需钱数和找零的钱数并自动找零。另外有3个发光二极管、6个LCD数码管:两个用来显示所需金额,两个用来显示已付金额,两个用来显示找零数。(二)流程说明 本文设计的自动售货机当通电时,表示一次销售的开始。顾客选择一种商品或多种商品后就进入投币状态。若不投币,则自动返回初始状态。投币后,系统自动计算所投钱数。若投币够,则出货并找零。若投币不够,如果顾客没有继续投币,则退币并回到初始状态。本系统的投币销售流程图如图1所示。退币清零出货(找零)总额=物价计算金额投币开始选择货物四货物三货物二货物一 Y N继续投币Y结束N图1 投币销售流程图四、软件设计(一)顶层电

6、路图(二)状态转换本文所设计的自动售货机进程可以分为7个状态:a,b,c,d,e,f,g.a为开始状态,当有商品选择键按下时即进入b状态(投币状态)。当有货币投入,但投币不够时,即进入c状态(继续投币),若投币够了,即进入d状态(出货找零),之后进入f状态(延时)后返回a(状态)。(三)模块组成总控模块二进制译码模块显示模块1、总控模块 (1)模块说明总控模块是本系统最重要的模块,该模块大体有5个输入端口和6个输出端口,如图1-1所示。其输入端口包括clk、coin1(投入一元货币)、coin5(投入0.5元货币)、good1(选择货物一)、good2(选择货物二)、good3(选择货物三)、

7、good4(选择货物四),输出端口有paid(已投入多少钱)、needed(还需多少钱)moneyout(找零)、success(灯亮表示交易成功)、failure(灯亮表示交易失败)、showmoneyout(灯亮表示正在找零)。该模块实现了本系统最重要的交易过程,包括选择商品、投入货币,计算剩余金额,找零出货等。 (2)模块源程序 Library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity shouhuoji is port(clk1: in std_logic; coin1:in s

8、td_logic; coin5:in std_logic; gd1:in std_logic; gd2:in std_logic; gd3:in std_logic; gd4: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); e

9、nd shouhuoji; architecture behav of shouhuoji is type state_type is (qa,qb,qe,qc,qg,qd,qf);-定义七个状态 signal current_state :state_type:=qa; signal q:integer range 0 to 100; begin process(clk1) variable paidtemp:std_logic_vector(7 downto 0);-定义变量 variable neededtemp:std_logic_vector(7 downto 0); variabl

10、e backmoney:std_logic_vector(7 downto 0); variable pricetemp:std_logic_vector(7 downto 0); begin if clk1event and clk1=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=000

11、00000;failure=0;success=0; if gd1=1 or gd2=1 or gd3=1 or gd4=1 then current_state=qb; if gd1=1 then pricetemp:=pricetemp+00001111; neededtemp:=pricetemp; Elsif gd2=1 then pricetemp:=pricetemp+00001010; neededtemp:=pricetemp; Elsif gd3=1 then pricetemp:=pricetemp+00010100; neededtemp:=pricetemp; Elsi

12、f gd4=1 then pricetemp:=pricetemp+00011001; neededtemp:=pricetemp; end if; end if; paid=paidtemp; needed if coin1=1 or coin5=1 then if coin1=1 then paidtemp:=paidtemp+00001010; else paidtemp:=paidtemp+00000101; end if; end if; if paidtemp=pricetemp then backmoney:=paidtemp-pricetemp; neededtemp:=000

13、00000;current_state=qd; else neededtemp:=pricetemp-paidtemp;backmoney:=00000000; current_state=qc;q=0; end if; paid=paidtemp; needed=neededtemp; if q8 then q=q+1; if gd1=1 or gd2=1 or gd3=1 or gd4=1then q=0; if gd1=1 then pricetemp:=pricetemp+00001111; neededtemp:=neededtemp+00001111; Elsif gd2=1 th

14、en pricetemp:=pricetemp+00000101; neededtemp:=pricetemp; Elsif gd3=1 then pricetemp:=pricetemp+00010100; neededtemp:=pricetemp; Elsif gd4=1 then pricetemp:=pricetemp+00011001; neededtemp:=pricetemp; end if; end if; paid=paidtemp; needed=neededtemp; else current_state=qe;qfailure=1; if q4 then q=q+1;

15、 else current_state=qa;qif 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_s

16、tate=qc; end if; paid=paidtemp; needed=neededtemp; end if; if coin1/=1and coin5/=1 then if q10 then q=q+1; else current_state=qg; end if; else qfailure=1; showmoneyout=1;moneyout=paidtemp; current_state=qf;q=0; successsuccess00000000then showmoneyout=1; moneyout=backmoney; end if; current_state=qf;q

17、if q4 then q=q+1; else current_state=qa;qbcd0=0000;bcd1bcd0=0001;bcd1bcd0=0010;bcd1bcd0=0011;bcd1bcd0=0100;bcd1bcd0=0101;bcd1bcd0=0110;bcd1bcd0=0111;bcd1bcd0=1000;bcd1bcd0=1001;bcd1bcd0=0000;bcd1bcd0=0001;bcd1bcd0=0010;bcd1bcd0=0011;bcd1bcd0=0100;bcd1bcd0=0101;bcd1bcd0=0110;bcd1bcd0=0111;bcd1bcd0=10

18、00;bcd1bcd0=1001;bcd1bcd0=0000;bcd1null; end case; end process; end one;(3)二进制译码模块封装电路图图1-2 二进制译码模块封装电路图3、显示模块 (1)模块说明 该模块有clk2、gao1、di1、gao2、di2、gao3、di3七个输入以及控制6个数码管显示的两个输出wei和duan,此外6个LCD数码管,如图1-3所示:两个用来显示所需金额,两个用来显示已付金额,两个用来显示找零数。(2)模块源程序library ieee;use ieee.std_logic_1164.all;use ieee.std_logi

19、c_arith.all;use ieee.std_logic_unsigned.all;entity erjinzhiyima is port (clk2:in std_logic; gao1,di1,gao2,di2,gao3,di3:in std_logic_vector(3 downto 0); wei:out std_logic_vector(2 downto 0); duan1:out std_logic_vector(7 downto 0);end entity erjinzhiyima;architecture behv of erjinzhiyima is signal dou

20、t: std_logic_vector(3 downto 0); signal wei1:std_logic_vector(2 downto 0);begin process (clk2)variable count:std_logic_vector(2 downto 0);beginif RISING_EDGE(clk2) then -动态扫描显示输出if count=101 thencount:=000;else count:=count+1;end if;case count is when 000=dout=gao1;wei1dout=di1;wei1dout=gao2;wei1dou

21、t=di2;wei1dout=gao3;wei1dout=di3;wei1null; end case;end if;end process;process(dout)begincase dout is when 0000=duan1duan1duan1duan1duan1duan1duan1duan1duan1duan1duan1=11101111;end case;end process;wei=wei1;end behv;(3)显示模块封装电路图图1-3 显示模块封装电5、 各模块软件仿真及分析(一)顶层电路仿真图 5-1 顶层电路仿真图 此仿真显实的是顾客选择购买货物三,货物三的实际价格为2元,而顾客实际投入了1.5元,购买失败,给出一个失败信号和退钱信号。(二)主控模块仿真图 5-2 主控模块仿真图 此仿真实现的是顾客购买货物三,货物三的价格为2元,而顾客实际投币1.5元,所以购买失败,退回投入的1

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论