自动售货机控制系统的设计

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

自动售货机控制系统的

设计

集团标准化工作小组 #Q8QGGQT-GX8G08Q8-GNQGJ8-MHHGN#

课程设计题目:自动售货机控制系统的设计

目的与任务:

(1)进一步掌握MAX+PLUSⅡ软件的使用方法;

(2)会使用VHDL语言设计小型数字电路系统;

(3)掌握应用MAX+PLUSⅡ软件设计电路的流程;

(4)掌握自动售货机的设计方法;

(5)会使用GW48实验系统。

内容和要求:

设计一个简易的自动售货机,它能够完成钱数处理、找零、显示、退币等功能。

(1)用3个键表示3种钱,再用3个键表示3种物品。

(2)用2个数码管显示输入的钱数,再用2个数码管显示所找的钱数,以元为单位。

(3)买东西时,先输入钱,用数码管显示钱数,再按物品键,若输入的钱数大于物品的价格,用数码管显示所找的钱数,并用发光二极管表示购买成功。

(4)若输入的钱数少于物品的价格,用数码管显示退出的钱数,并用发光二极管表示购买失败。

设计内容(原理图以及相关说明、调试过程、结果)

一、系统设计方案

根据系统要求,系统的组成框图如图1所示。

(1

NEW_CLK

(a2)控制模块是这个系统的核心模块,它具有判断按键、计算输入钱数总和、计算找零、控制显示四个作用。它的工作原理是每当时钟上升沿到来时,判断哪个按键按下,若按下的是钱数键,则将钱数保存于中间信号COIN,若下次按下的仍是钱数键,COIN的值则加上相应的值并显示于数码管;当物品键按下时,则将COIN的值与物品价格进行比较,然后控制找零。

(3)由于钱数可能大于9,所以译码显示模块的作用就是将钱数译码后用两个数码管显示,这样方便观察。

根据各个功能模块的功能并进行整合,可得到一个完整的自动售货机系统的整体组装设计原理图,如图2所示。

图2 设计原理图

二、系统主要VHDL源程序

(1)分频器的源程序(外部时钟选用3MHz,实现3万分频)

LIBRARY IEEE;

USE CLKGEN IS

PORT(CLK:IN STD_LOGIC;

NEWCLK:OUT STD_LOGIC);

END CLKGEN;

ARCHITECTURE BEHAVE OF CLKGEN IS

SIGNAL Q:INTEGER RANGE 0 TO 14999;

SIGNAL DIVCLK: STD_LOGIC;

BEGIN

PROCESS(CLK)

BEGIN

IF CLK'EVENT AND CLK='1' THEN

IF Q < 14999 THEN Q <=Q+1;

ELSE DIVCLK <= NOT DIVCLK;Q <=0;

END IF;

END IF;

END PROCESS;

NEWCLK <= DIVCLK;

END BEHAVE;

(2)自动售货机控制器源程序( 3种钱数为1元、2元、5元;

3种物品的价格为2元、5元、10元) LIBRARY IEEE;

USE SHOUHUOJI IS

P ORT ( CLK: IN STD_LOGIC;

COIN1: IN STD_LOGIC; --1元信号

COIN2: IN STD_LOGIC; --2元信号

COIN3: IN STD_LOGIC; --5元信号

PRICE1: IN STD_LOGIC; --2元商品

PRICE2: IN STD_LOGIC; --5元商品

PRICE2: IN STD_LOGIC; --5元商品

PRICE3: IN STD_LOGIC; --10元商品

Y0: OUT STD_LOGIC; --购买成功信号

Y1: OUT STD_LOGIC; --退币信号

MONEY: OUT STD_LOGIC_VECTOR(3 DOWNTO 0);

PAYBACK: OUT STD_LOGIC_VECTOR(3 DOWNTO 0));

END SHOUHUOJI;

ARCHITECTURE BEHAV OF SHOUHUOJI IS

SIGNAL COIN: STD_LOGIC_VECTOR(3 DOWNTO 0); --保存钱数

SIGNAL COUT: STD_LOGIC_VECTOR(3 DOWNTO 0); --保存找零

BEGIN

PROCESS(CLK)

BEGIN

IF CLK'EVENT AND CLK='1' THEN

IF COIN1='1' THEN COIN <= COIN+1; Y0<='0';Y1<='0';

ELSIF COIN2='1' THEN COIN <= COIN+2; Y0<='0';Y1<='0';

ELSIF COIN3='1' THEN COIN <= COIN+5; Y0<='0';Y1<='0';

ELSIF PRICE1='1' THEN IF COIN >= "0010" THEN Y0<='1';Y1<='0';COUT<=COIN-2;

ELSE Y0<='0';Y1<='1';COUT<=COIN;

END IF;

ELSIF PRICE2='1' THEN

IF COIN >= "0101" THEN Y0<='1';Y1<='0';COUT<=COIN-5;

ELSE Y0<='0';Y1<='1';COUT<= COIN;

END IF;

ELSIF PRICE3='1' THEN

IF COIN >= "1010" THEN Y0<='1';Y1<='0';COUT<=COIN-10;

ELSE Y0<='0';Y1<='1';COUT<=COIN;

END IF;

END IF;

END IF;

END PROCESS;

MONEY<=COIN; -- 输入的钱数

相关文档
最新文档