eda课程设计自动售货机的设计

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

电子信息科学与技术专业课程设计任务书

一.设计说明

根据要求可自动出售两种货物,本文设计的自动售货机可销售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";

相关文档
最新文档