ImageVerifierCode 换一换
格式:DOCX , 页数:15 ,大小:203.73KB ,
资源ID:6140072      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/6140072.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(易拉罐售货机控制器1303030335.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

易拉罐售货机控制器1303030335.docx

1、易拉罐售货机控制器1303030335目录1设计目的 12设计要求和任务 13总体设计思路及原理描述 24分层次方案设计及代码描述 34.1主控模块代码 34.2分频模块 64.3二进制译码模块 74.4 BCD码译码模块 84.5系统模块连接 95各模块的时序仿真图 105.1主控模块仿真 105.2二进制译码仿真 115.3 BCD码译码仿真 116总结 127参考文献 131设计目的易拉罐售货机是能根据投入的钱币或硬币自动给出客人所选货物的机器,它是一种常用的商业自动化设备,它不受时间,地点的限制,可以节省人力,简化交易。自动售货机在当今被普遍地应用在各大现代化都市的街道及便利店中,正逐

2、渐地成为商业自动化的代表性设备。它能够在无人操作的情况下根据程序自动地销售商品。而且进入21世纪时,自动售货机也将进一步向节省资源和能源以及高功能化的方向发展。从自动售货机的发展趋势来看,大量生产,大量消费以及消费模式和销售环境的变化,要求出现新的流通渠道,而相对的超市,百货购物中心等新的流通渠道的产生,人工费用也不断上升,在加上场地的局限性和购物的便利性等这些因素的制约,无人自动售货机作为一种必须的机器也就有了其相当可观的前景。2设计要求和任务易拉罐售货机要求:1. 能识别纸币、硬币;2. 能对五种易拉罐商品进行选择;3. 能选择商品的数量;4. 能为客人找钱。顾客选择商品后,向售货机投入纸

3、币或硬币,判断投币额是否足够,若投币额足够则根据顾客要求自动售货,若投币不够三秒后退出。顾客通过按键选择商品后,有数码管显示该商品价格。顾客投币过程中,数码管显示投币额。当顾客买完商品后,还剩余额,售货机自动为顾客找钱,数码管将显示余额数。3总体设计思路及原理描述通过VHDL的状态机以及CASE语句进行编程,用6个状态分别表示商品选择、投币额累加、找零售货以及总销售额的累加等功能。程序编起来需要对整体有较好的理解,各个状态的切换与跳转要思路清晰,不过在仿真过程中运行成功,且程序分为多个状态,看起来比较清晰。 图3.1程序设计图该系统主要由分频、控制、译码和显示四个部分构成。当有人需要购买物品时

4、,首先选择所要购买的物品,这时,前两个数码显示管选中商品的单价。之后顾客投币进行购买,后两个数码显示管显示总共投入了多少钱。当按下确认键时,将在系统内部进行比较,比较单价和所投入的金额。若投币金额大于或等于该商品单价时,系统显示成功售出该商品并进行找零,即投币金额与商品单价的差值,然后将售出总额加上这次的物品单价。若投币金额小于该商品单价时,系统显示购买失败,在几秒钟的延迟后退换投币金额,售出总额不变。无论哪种情况,完成后回到初始状态。图3.2程序流程图4分层次方案设计及代码描述4.1主控模块代码Library ieee;use ieee.std_logic_1164.all;use ieee

5、.std_logic_unsigned.all;entity sellingmachine isport( clk: in std_logic; set: in std_logic; -复位键 coin5:in std_logic; -投入五角和一元硬币 coin10:in std_logic; papermoney50:in std_logic; -投入五元和十元纸币 papermoney100:in std_logic; water:in std_logic; -五种商品 milk:in std_logic; juice:in std_logic; cola:in std_logic; c

6、offee:in std_logic;paid:out std_logic_vector(6 downto 0); -投入的金额needed:out std_logic_vector(6 downto 0); -不足时还差的金额success:out std_logic; -售货成功 failure:out std_logic; -售货失败 showchange:out std_logic; -找钱 change:out std_logic_vector(6 downto 0); -退还的金额 sum:buffer std_logic_vector(6 downto 0); -售货机总的金额

7、end sellingmachine;architecture behav of sellingmachine is -结构体type state_type is (qa,qb,qc,qg,qd,qf); -定义七个状态(结构体内定义的信号为内部信号,只在结构体内部起作用)signal current_state :state_type:=qa;signal q:integer range 0 to 100; -q为延时信号beginprocess(clk) -括号内为敏感信号variable paidtemp:std_logic_vector(6 downto 0); -进程内部变量vari

8、able neededtemp: std_logic_vector(6 downto 0);variable backmoney: std_logic_vector(6 downto 0);variable pricetemp:std_logic_vector(6 downto 0); variable sumtemp:std_logic_vector(6downto 0);beginif clkevent and clk=1 then -若上升沿到来时就进行以下判断,该进入哪个状态case current_state is when qa=paidtemp:=0000000;neededte

9、mp:=0000000; -进入初态 backmoney:=0000000;pricetemp:=0000000;sumtemp:=0000000;q=0; showchange=0;change=0000000;paid=0000000; needed=0000000;failure=0;success=0; if water=1 or milk=1 or juice=1 or cola=1 or coffee=1 then -有选择商品的信号 if water=1 then pricetemp:=pricetemp+15; -判断选择了哪一商品 elsif milk=1 then pric

10、etemp:=pricetemp+20; elsif juice=1 then pricetemp:=pricetemp+25; elsif cola=1 then pricetemp:=pricetemp+30; else pricetemp:=pricetemp+35; end if; neededtemp:=pricetemp; -选择商品后所需要的金额 needed=neededtemp; paid=paidtemp; current_state=qb; end if; if set=1 then paidif coin5=0 or coin10=0then -投币状态 if coin

11、5=0 then paidtemp:=paidtemp+5; -当有投币动作时 else paidtemp:=paidtemp+10; end if; neededtemp:=pricetemp-paidtemp;backmoney:=0000000; -不够则进入继续投币状态qc paid=paidtemp; needed=neededtemp; current_state=qc;q=pricetemp then neededtemp:=0000000; -若继续投币足够,则进入出货找零状态qd backmoney:=paidtemp-pricetemp; -若成功则累计 paid=paid

12、temp; needed=neededtemp; q=0; current_state=qd; end if; end if; if coin5/=0 and coin10/=0 and papermoney50/=0 and papermoney100/=0 then -若无投币动作则进入延时状态qf if q3 then q=q+1; else current_state=qf; end if; else q if coin5=0 or coin10=0 then -若又有投币动作,则累计 if coin5=0then paidtemp:=paidtemp+5; else paidtemp

13、:=paidtemp+10; end if; if paidtemp=pricetemp then neededtemp:=0000000; -若继续投币足够,则进入出货找零状态qd backmoney:=paidtemp-pricetemp; -若成功则累计 paid=paidtemp; needed=neededtemp; q=0; current_state=qd; else neededtemp:=pricetemp-paidtemp; -若不够则继续执行继续投币状态qc backmoney:=0000000; paid=paidtemp; needed=neededtemp; cur

14、rent_state=qc; end if; end if; if coin5/=0 and coin10/=0 and papermoney50/=0 and papermoney100/=0 then -若在继续投币状态无投币信号则计时准备进入还币状态qg if q3 then q=q+1; else current_state=qg; end if; else qif q1 then success=1;q0000000 then showchange=1; change=backmoney; -若需找钱则找钱灯亮并将钱返还 else showchange=0; end if; sumt

15、emp:=pricetemp; sum=sum+sumtemp; else current_state if q4 then q=q+1; else current_state=qa;qfailure=1; -若钱不够或超时未付钱,且再三秒延时后还没有投币则失败 showchange=1;change=paidtemp; current_state=qf;qcurrent_state=qa;end case;end if;end process;end behav;4.2分频模块该分频模块的频数为50MHZ,将50HZ转换成50MHZ。其程序代码如下:library ieee ;use iee

16、e.std_logic_arith.all ;use ieee.std_logic_unsigned.all;use ieee.std_logic_1164.all ;entity clkdiv is generic ( temp :integer := 25000000 ) ; -类属参数说明语句 port( clk : in std_logic ; clk_div : out std_logic );end entity clkdiv ;architecture clk_div of clkdiv is constant period :integer := 50000000 ; -常数定

17、义,分频数 signal count :integer range 0 to period-1 ; -信号定义,计数作用begin process ( clk ) -进程,由clk这个信号启 begin if ( clkevent and clk = 1) then if ( count temp ) then clk_div = 0 ; count = count +1; elsif ( count period-1 ) then clk_div = 1 ; count = count +1; else count bcd0=0000;bcd1bcd0=0101;bcd1bcd0=0000;

18、bcd1bcd0=0101;bcd1bcd0=0000;bcd1bcd0=0101;bcd1bcd0=0000;bcd1bcd0=0101;bcd1bcd0=0000;bcd1bcd0=0101;bcd1bcd0=0000;bcd1bcd0=0101;bcd1bcd0=0000;bcd1bcd0=0101;bcd1bcd0=0000;bcd1bcd0=0101;bcd1bcd0=0000;bcd1bcd0=0111;bcd1null;end case;end process;end one;4.4 BCD码译码模块该模块有一个输入端和一个输出端。输入端d是一个4位的BCD码,输出端q是一个7位

19、数,输出连接到一个LED数码管显示出来。该模块代码如下:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity code2 isport(d:in std_logic_vector(3 downto 0);q:out std_logic_vector(6 downto 0);end code2;architecture one of code2 isbeginprocess(d)begincase d iswhen0000=qqqqqqqqqqq=1111111;end case;end p

20、rocess;end one;4.5系统模块连接图4.1系统模块图由图4.1中可以看到,八个代表不同意思的输入端口接入到主控模块上,从主控模块输出的两个端口分别连接在两个二进制译码器上,再将二进制译码器的输出端连接到数码显示管上,用来显示商品单价、投币金额和售出总额。其余的五个输出端口分别表示购买成功、失败、找零、找零金额。其中的找零金额因数码显示管数量有限不能显示,只能进行仿真。5各模块的时序仿真图5.1主控模块仿真使用硬币图5.1使用硬币仿真图当顾客选择3.5元的coffee,投币4元时,程序仿真图如图5.1所示。数码管前两位显示商品单价3.5元,后两位数码显示管将显示投币金额4元,并显示

21、购买成功,找零金额为0元。使用纸币图5.2使用纸币仿真图当顾客选择2.5元的juice,并投纸币5元时,程序仿真图如图5.2所示。数码管前两位显示商品单价2.5元,后两位数码管显示投币金额10元,并显示购买成功,找零金额为7.5元。5.2二进制译码仿真图5.3二进制译码仿真图当七位二进制数为1010101时,代表十进制数85。此时第一个数码显示管现实的数字为8,第二个数码显示管显示的数字为5。表明仿真正确。 5.3 BCD码译码仿真图5.3BCD译码仿真图当BCD码输入为1001时,数码显示管表示的二进制数为0000100,代表十进制数9。有仿真图5.3可知,当d为1001时,q为000010

22、0,表明仿真成功。6总结这次课设相对之前的课设,难度有所增加,而且EDA的理论课是之前学的,有很多知识忘了,在做课设时总会遇到一些基础的东西模棱两可,不得不翻阅书籍,加上之前我们没有做过硬件方面的东西,做起来有些困难,但也让我学到了很多。在这段时间里,我学到了很多知识也有很多感受。当然在做的过程中也遇到过很多的麻烦,在调试的时候会有一些错误,自己很难改正,只得求助老师,最后得以解决。这次毕业设计使我开始了自主的学习和试验,查看相关的资料和书籍,让自己头脑中模糊的概念逐渐清晰,使自己非常稚嫩作品一步步完善起来,每一次改进都是我学习的收获,每一次的成功都会让我兴奋好一段时间。和老师的沟通交流更使我

23、对设计有了新的认识也对自己提出了新的要求。课题设计过程中我不怕失败,在失败中总结经验,为成功积累素材;学着自我超越,敢于尝试,在尝试中进步,这对我能力的提高大有好处。设计中有太多的不懂和陌生,但是我会多看、多想、多问、多学。非常感谢学校能给我们提供这样的一个可以自己动脑、动手进行设计的机会,同时也大大加强了同学之间的沟通,以及学生与老师之间的交流,我们理论知识与实际结合的平台,更是一个放飞自我的平台。通过此次课程设计,我加深了对VHDL语言的了解,不仅学会用Quartus编程作图,更学会用Quartus软件,而且我们还学会将程序下载到开发板上运行操作,并深刻认识到同学之间相互协作的重要性,同时也更了解到老师们都是很好沟通的,谢谢老师给予的帮助!这次课程设计真的是让人收获很多。总之,这次课程设计让我觉得受益匪浅。7参考文献1徐志军,王金明等.EDA技术与VHDL设计.北京:电子工业出版社,20092潘松,黄继业.EDA技术实用教程.北京:科学出版社,2009 3周润景.基于Quartus II的FPGA/CPLD数字系统设计实例.北京:电子工业出版社,20104郑燕.基于VHDL与Quartus软件的可编程逻辑器件应用与开发.北京:国防工业出版社,20115李青. EDA技术在电子线路实训教学中的运用,2011

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1