收藏 分销(赏)

eda专业课程设计自动售货机的设计.doc

上传人:精**** 文档编号:2727045 上传时间:2024-06-05 格式:DOC 页数:15 大小:172.04KB 下载积分:8 金币
下载 相关 举报
eda专业课程设计自动售货机的设计.doc_第1页
第1页 / 共15页
eda专业课程设计自动售货机的设计.doc_第2页
第2页 / 共15页


点击查看更多>>
资源描述
电子信息科学和技术 专业课程设计任务书 学生姓名 专业班级 学号 题 目 自动售货机设计 课题性质 工程设计 课题起源 自拟课题 指导老师 同组姓名 关键内容 设计制作一个自动售货机,该自动售货机能完成货物信息存放、进程控制、硬币处理、余额计算、显示等功效。自动售货机能够售2种货物,每种货物数量和单价在初始化时设入,在存放器中存放。用户能够用硬币进行购物,按键进行选择。系统依据用户输入货币,判定钱币是否够,钱币足够则依据用户要求自动售货;钱币不够则给出提醒并退出。系统自动地计算出应找钱币余额、库存数量并显示。(提醒:钱数以5角为单位。) 任务要求 ①依据设计题目要求编写对应程序代码 ②对编写VHDL程序代码进行编译和仿真 ③总结设计内容,完成课程设计说明书 参考文件 [1] 焦素敏.EDA课程设计指导书.郑州:河南工业大学, [2] 潘松,黄继业.EDA技术实用教程.北京:科学出版社, [3] 王国栋,潘松等.VHDL实用教程.成全部:电子科技大学出版社, [4] 张亦华,延明.数字电路EDA入门.北京:电子工业出版社, [5] http://www.ele- 中国电子制作网 网站 审查意见 指导老师签字 教研室主任签字 2月 20日 一. 设计说明 依据要求可自动出售两种货物,本文设计自动售货机可销售cola 和 pepsi两种饮料:售货机可识别1元和0.5元两种货币,在一次购置过程中,可购置一个或多个商品,系统会自动计算所需钱数和找零钱数并自动找零。另外有3个发光二极管、6个LCD数码管:两个用来显示所需金额,两个用来显示已付金额,两个用来显示找零数。 1.1.1 步骤说明 本文设计自动售货机当通电时,表示一次销售开始。用户选择一个商品或多个商品后就进入投币状态。若不投币,则自动返回初始状态。投币后,系统自动计算所投钱数。若投币够,则出货并找零。若投币不够,假如用户没有继续投币,则退币并回到初始状态。本系统投币销售步骤图图所表示: 退币清零 结 束 出货找零 继续投币 综合〉物价 计算金额 投币 选 择 开始 1.1.2各模块说明 本文设计自动售货机总体分三个模块:总控模块,二进制译码模块、BCD码译码模块。 总控模块:总控模块是本系统最关键模块,该模块大致有5个输入端口和6个输出端口。其输入端口包含clk、coin1(投入一元货币)、coin5(投入0.5元货币)、cola(选择cola)、pepsi(选择pepsi),输出端口有paid(已投入多少钱)、needed(还需多少钱)moneyout(找零)、success(灯亮表示交易成功)、failure(灯亮表示交易失败)、showmoneyout(灯亮表示正在找零)。该模块实现了本系统最关键交易过程,包含选择商品、投入货币,计算剩下金额,找零出货等。 二进制译码模块:该模块有一个输入端口和两个输出端口。输入端口是一个8位二进制数输出端口bcd0、bcd1是两个4位BCD码。该模块关键功效是实现将主控模块输出二进制数(paid、needed、moneyout)转换成BCD码,方便输出到七段数码管上显示出来。该模块原理是将一个8位二进制转换成2个4位BCD码,分为高四位和低四位。 BCD码译码模块:该模块有一个输入端口和一个输出端口 1.1.3 程序设计 主控模块完整程序以下: Library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity shouhuoji is port(clk: in std_logic; coin1:in std_logic; coin5:in std_logic; cola:in std_logic; pepsi: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)); end 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(clk) variable paidtemp:std_logic_vector(7 downto 0);--定义变量 variable neededtemp:std_logic_vector(7 downto 0); variable backmoney:std_logic_vector(7 downto 0); variable pricetemp:std_logic_vector(7 downto 0); begin if clk'event and clk='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<="00000000";failure<='0';success<='0'; if cola='1' or pepsi='1' then current_state<=qb; if cola='1' then pricetemp:=pricetemp+"00001111"; neededtemp:=pricetemp; Else pricetemp:=pricetemp+"00010100"; neededtemp:=pricetemp; end if; end if; paid<=paidtemp; needed<=neededtemp; when qb=>if coin1='1' or coin5='1' then if coin1='1'then 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_state<=qc;q<=0; end if; paid<=paidtemp; needed<=neededtemp; end if; if q<8 then q<=q+1; if cola='1' or pepsi='1'then q<=0; if cola='1' then pricetemp:=pricetemp+"00001111"; neededtemp:=neededtemp+"00001111"; else pricetemp:=pricetemp+"00010100"; neededtemp:=neededtemp+"00010100"; end if; paid<=paidtemp; needed<=neededtemp; end if; else current_state<=qe;q<=0; end if; when qe=>failure<='1'; if q<4 then q<=q+1; else current_state<=qa;q<=0; end if; when qc=>if coin1='1' or coin5='1' then if coin1='1'then 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_state<=qc; end if; paid<=paidtemp; needed<=neededtemp; end if; if coin1/='1'and coin5/='1' then if q<10 then q<=q+1; else current_state<=qg; end if; else q<=0; end if; when qg=>failure<='1'; showmoneyout<='1';moneyout<=paidtemp; current_state<=qf;q<=0; success<='0'; when qd=>success<='1'; if backmoney>"00000000"then showmoneyout<='1'; moneyout<=backmoney; end if; current_state<=qf;q<=0; when qf=>if q<4 then q<=q+1; else current_state<=qa;q<=0; end if; end case; else end if; end process; end behav; BCD译码模块完整程序以下: Library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity code1 is port( b:in std_logic_vector(7 downto 0); bcd0:out std_logic_vector(3 downto 0); bcd1:out std_logic_vector(3 downto 0) ) ; end code1; architecture one of code1 is begin process(b) begin case b is when"00000000"=>bcd0<="0000";bcd1<="0000";--译码“0”; when"00000001"=>bcd0<="0001";bcd1<="0000";--译码“1”; when"00000010"=>bcd0<="0010";bcd1<="0000";--译码“2”; when"00000011"=>bcd0<="0011";bcd1<="0000";--译码“3”; when"00000100"=>bcd0<="0100";bcd1<="0000";--译码“4”; when"00000101"=>bcd0<="0101";bcd1<="0000";--译码“5”; when"00000110"=>bcd0<="0110";bcd1<="0000"; when"00000111"=>bcd0<="0111";bcd1<="0000"; when"00001000"=>bcd0<="1000";bcd1<="0000"; when"00001001"=>bcd0<="1001";bcd1<="0000"; when"00001010"=>bcd0<="0000";bcd1<="0001"; when"00001011"=>bcd0<="0001";bcd1<="0001"; when"00001100"=>bcd0<="0010";bcd1<="0001"; when"00001101"=>bcd0<="0011";bcd1<="0001"; when"00001110"=>bcd0<="0100";bcd1<="0001"; when"00001111"=>bcd0<="0101";bcd1<="0001"; when"00010000"=>bcd0<="0110";bcd1<="0001"; when"00010001"=>bcd0<="0111";bcd1<="0001"; when"00010010"=>bcd0<="1000";bcd1<="0001"; when"00010011"=>bcd0<="1001";bcd1<="0001"; when"00010100"=>bcd0<="0000";bcd1<="0010";译码“20” when others=>null; end case; end process; end one; 顶层模块完整程序以下: library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; entity top is Port( clk1:in std_logic; C1,C5,P1_5,P2:in std_logic; paid_lcd0,paid_lcd1,needed_lcd0,needed_lcd1,Mout_lcd0,Mout_lcd1:out std_logic_vector(3 downto 0); s,f,showout :out std_logic ); end top; architecture one of top is component shouhuoji port ( clk:in std_logic; coin1:in std_logic; coin5:in std_logic; cola:in std_logic; pepsi: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) ); end component; component code1 port( b:in std_logic_vector( 7 downto 0); bcd0:out std_logic_vector(3 downto 0); bcd1:out std_logic_vector(3 downto 0) ); end component; signal p,n,mo:std_logic_vector( 7 downto 0); --signal s1,s2,s3,s4,s5,s6:std_logic_vector(3 downto 0); begin u0:shouhuoji--各模块连接 port map(clk=>clk1,coin1=>C1,coin5=>C5,cola=>P1_5,pepsi=>P2, success=>s,failure=>f,showmoneyout=>showout,paid=>p,needed=>n,moneyout=>mo); u1:code1 port map(b=>p,bcd0=>paid_lcd0,bcd1=>paid_lcd1); u2:code1 port map(b=>n,bcd0=>needed_lcd0,bcd1=>needed_lcd1); u3:code1 port map(b=>mo,bcd0=>Mout_lcd0,bcd1=>Mout_lcd1); end one; 1.1.4各模块连接 各模块连接图所表示: 售货机主控系统和译码器模块图 售货机顶层模块 2、1 主控模块仿真 上图表示用户选择了pepsi饮料后,且投了2个一元硬币。Success为高电平,代表售货机有饮料售出。且余额为0. 上图表示用户选择了pepsi饮料后,且投1个一元硬币和一个0.5元硬币。failure为高电平,代表售货机无饮料售出。且余额为已投金额,将钱退还给用户。. 2.BCD码译码仿真 上图表示自动售货机译码系统,上图表示将8位数字转换成4位BCD码。 3.TOP文件仿真 上图表示用户选择了pepsi饮料后,且投了2个一元硬币。Success为高电平,代表售货机有饮料售出。且余额为0. 上图表示用户选择了pepsi饮料后,且投1个一元硬币和一个0.5元硬币。Failure 为高电平,代表售货机无饮料售出。Showout为退币指示灯。.Mout_lcd0和Mout_lcd1,显示退币金额。Paided _lcd0 和Paided_lcd1 needed _lcd0 和needed_lcd1 分别显示已付金额和还需要金额数。 3. 下载验证 在无数次调试和修改中,下载验证能够实现题目标要求 4. 参考文件:[1] 焦素敏.EDA课程设计指导书.郑州:河南工业大学, [2] 潘松,黄继业.EDA技术实用教程.北京:科学出版社, [3] 王国栋,潘松等.VHDL实用教程.成全部:电子科技大学出版社, [4] 张亦华,延明.数字电路EDA入门.北京:电子工业出版社, [5] 5. 心得体会 自动售货机系统设计经过一个星期设计已经全部完成,能按预期效果进行数次购置、找零出货、而且在数码管上显示出已投货币金额、还需金额、找零,同时有指示灯提醒交易成功、交易失败、正在找零。在自动售货机系统3个模块中,最关键是主控模块,其次还有二进制译码模块和BCD码译码模块。各模块完成后,将它们组合成完整自动售货机系统。在设计过程中还需改善是。本文所用VHDL语言即使语法规则和其它计算机高级语言如C语言在很多方面很类似,但它毕竟是硬件描述语言,其本质作用在于描述硬件,所以会受硬件环境限制。所以,为了达成设计预期效果,在代码编写前,应做到对硬件电路心中有数,不能一味追求代码完美,而应该已实现硬件电路性能优劣为标准。
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 学术论文 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服