基于FPGA的自动售货机课程设计《电子线路EDA》课程设计.doc
《基于FPGA的自动售货机课程设计《电子线路EDA》课程设计.doc》由会员分享,可在线阅读,更多相关《基于FPGA的自动售货机课程设计《电子线路EDA》课程设计.doc(20页珍藏版)》请在三一办公上搜索。
1、绪论自动售货机(Vending Machine,VEM)是能根据投入的钱币自动付货的机器。自动售货机是商业自动化的常用设备,它不受时间、地点的限制,能节省人力、方便交易。是一种全新的商业零售形式,又被称为24小时营业的微型超市。能分为三种:饮料自动售货机、食品自动售货机、综合自动售货机。它能够在无人操作的情况下根据程序自动地销售商品。自动售货机不受工作时间及地点限制的特点,使其实现了一种提高营业额的同时又降低了成本的销售模式。进入21世纪之后,自动售货机的发展进一步加快,智能化的自动售货机正在逐步进入普通民众的生活之中,在未来,自动售货机的发展将会更加迅速,更加智能的自动售货机会让人们的生活更
2、加便利。VHDL主要用于描述数字系统的结构,行为,功能和接口。除了含有许多具有硬件特征的语句外,VHDL的语言形式和描述风格与句法是十分类似于一般的计算机高级语言。VHDL的程序结构特点是将一项工程设计,或称设计实体(可以是一个元件,一个电路模块或一个系统)分成外部(或称可视部分,及端口)和内部(或称不可视部分),既涉及实体的内部功能和算法完成部分。在对一个设计实体定义了外部界面后,一旦其内部开发完成后,其他的设计就可以直接调用这个实体。这种将设计实体分成内外部分的概念是VHDL系统设计的基本点。因此,此次运用VHDL语言来实现一个简易的自动售货机是一个很有意义并且非常有乐趣的课题!关键词:自
3、动售货机 VHDL 1 课程设计实验要求1.1 初始条件设计一个自动售货机控制器,具有投币和选择商品等功能。可出售四种商品,分别为纯净水(2元)、可乐(4.5元)、牛奶(5元)、果汁(5.5元)。在购买过程中,采取投币方式,只能投入5元、10元或20元三种规格的纸币,且一次只能投入一张纸币。1.2 要求完成的主要任务1. 顾客通过按键选择某种商品后,由数码管显示该商品价格。顾客投币过程中,数码管显示投币额。2. 投币后,按下确认键,判断投币额是否足够,若投币额足够则根据顾客的要求自动售货并找零。若投币额不够,则报警5s并退钱。3. 投币后,按下取消键,则终止交易,自动退钱。4. 售货机还具有供
4、商家使用的累加卖货额的功能,由数码管显示累加的售出金额。5. 广泛调研,提出几种可行的方案,多方论证,确定设计方案。在仿真软件上完成设计和仿真。6. 按规定格式完成报告书。7. 近5年参考文献不少于5篇。2 程序设计思路2.1 方案论证及选择方案一:通过VHDL的状态机以及CASE语句进行编程,用6个状态分别表示商品选择、投币额累加、找零售货以及总销售额的累加等功能。但是由于对状态机的理解和应用并不是很熟练,并且程序相对比较复杂。方案二:通过一步一步的过程,按顺序将程序运行下去,并且用IF语句实现对售出金额的累加,完成目标要求。程序通俗易懂,按照大体的思路可以很容易的编出来,思路清晰。经比较,
5、方案二更能较好的完成对实验目标的实验,且编程部分相对比较简单。所以选择方案二作为最终的方案。2.2 系统组成框图根据设计要求,系统的组成框图如下图3-1所示。 时钟信号 控制器 按键 投币 译码 显示图2-1 系统的组成框图由图3-1可知,该系统主要由购物控制、译码显示两个部分构成。当有人需要购买物品时,首先选择所要购买的物品,这时,前三个数码显示管选中商品的单价。之后顾客投币进行购买,后两个数码显示管显示总共投入了多少钱。当按下确认键时,将在系统内部进行比较,比较单价和所投入的金额。若投币金额大于或等于该商品单价时,系统显示成功售出该商品并进行找零,即投币金额与商品单价的差值,然后将售出总额
6、加上这次的物品单价。若投币金额小于该商品单价时,系统显示购买失败,在报警5后退换投币金额,售出总额不变。无论哪种情况,完成后回到初始状态。2.3 程序流程图图2-2 系统的程序流程图 运行开始之后,由顾客选择商品,然后进行投币,此时若顾客选择取消按键,则立即执行退币,程序结束,若顾客选择的确定键,则进一步判断顾客的投币金额是够足够买所选商品,如果不够,则报警5S后退币并结束,若足够,则出货并且退币,程序结束。3 系统程序及各模块说明3.1 购物模块 购物模块分成三个部分,分别是选择商品部分,投币部分和确认或取消部分,选择商品有四种情况分别为纯净水(2元)、可乐(4.5元)、牛奶(5元)、果汁(
7、5.5元);投币有三种情况分别是5元10元和20元,确认或取消有两种情况,因为价格中有小数部分,所以导致其中的数据部分都可能含有小数部分,因此,此处选择将所有的价格以及投币均放大十倍,这样就消除了小数带来的影响。LIBRARY IEEE;USE IEEE.std_logic_1164.all;USE IEEE.std_logic_unsigned.all;USE IEEE.std_logic_arith.all;USE IEEE.std_logic_signed.all;entity VendingMachine is -定义实体port(clk:in std_logic; btn_water
8、:in std_logic; -分别定义9个输入 btn_cola:in std_logic; btn_milk:in std_logic; btn_juice:in std_logic; money_5:in std_logic; money_10:in std_logic; money_20:in std_logic; btn_submit:in std_logic; btn_cancel:in std_logic; warn_out:out std_logic; -分别定义5个输出 price_out:out std_logic_vector(7 downto 0); money_out
9、:out std_logic_vector(7 downto 0); backmoney_out:out std_logic_vector(7 downto 0); sum_out:out std_logic_vector(7 downto 0) );end VendingMachine;architecture behav_vm of VendingMachine is -定义结构体signal cur_price:integer range 0 to 300;signal cur_money:integer range 0 to 300;signal btn_water_areg:std_
10、logic;signal btn_cola_areg:std_logic;signal btn_milk_areg:std_logic;signal btn_juice_areg:std_logic;signal money_5_areg:std_logic;signal money_10_areg:std_logic;signal money_20_areg:std_logic;signal btn_submit_areg:std_logic;signal btn_cancel_areg:std_logic;signal warn:std_logic;signal warn_count:in
11、teger range 0 to 100;-signal sum:integer range 0 to 300;beginclk_process:process(clk, money_5, money_10, money_20) variable sum:integer range 0 to 3000; - variable back_areg:integer range 0 to 3000; beginif clkevent and clk=1 thenbtn_water_areg = btn_water;if btn_water_areg = 0 and btn_water=1 then
12、-判断顾客选择的商品价格cur_price = 20;end if;btn_cola_areg = btn_cola;if btn_cola_areg = 0 and btn_cola=1 thencur_price = 45;end if;btn_milk_areg = btn_milk;if btn_milk_areg = 0 and btn_milk=1 thencur_price = 50;end if;btn_juice_areg = btn_juice;if btn_juice_areg = 0 and btn_juice=1 thencur_price = 55;end if;p
13、rice_out = conv_std_logic_vector(cur_price, 8); -将十进制的价格化为8位二进制表示的数money_5_areg = money_5;if money_5_areg = 0 and money_5=1 then -判断顾客投币金额 cur_money = cur_money + 50;end if;money_10_areg = money_10;if money_10_areg = 0 and money_10=1 thencur_money = cur_money + 100;end if;money_20_areg = money_20;if
14、 money_20_areg = 0 and money_20=1 thencur_money = cur_money + 200;end if;money_out = conv_std_logic_vector(cur_money, 8);btn_submit_areg = btn_submit;if btn_submit_areg = 0 and btn_submit=1 then -顾客按下确定键if cur_money cur_price then -投币不够warn = 1; -进入报警程序warn_out = 1;backmoney_out = conv_std_logic_vec
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 电子线路EDA 基于 FPGA 自动 售货 课程设计 电子线路 EDA
链接地址:https://www.31ppt.com/p-4144848.html