课程设计题目:自动售货机控制系统的设计
目的与任务:
(1) 进一步掌握MAX+PLUSⅡ软件的使用方法; (2) 会使用VHDL语言设计小型数字电路系统; (3) 掌握应用MAX+PLUSⅡ软件设计电路的流程; (4) 掌握自动售货机的设计方法; (5) 会使用GW48实验系统。
内容和要求:
设计一个简易的自动售货机,它能够完成钱数处理、找零、显示、退币等功能。 (1)用3个键表示3种钱,再用3个键表示3种物品。
(2)用2个数码管显示输入的钱数,再用2个数码管显示所找的钱数,以元为单位。 (3)买东西时,先输入钱,用数码管显示钱数,再按物品键,若输入的钱数大于物品
的价格,用数码管显示所找的钱数,并用发光二极管表示购买成功。
(4)若输入的钱数少于物品的价格,用数码管显示退出的钱数,并用发光二极管表示
购买失败。
最新范本,供参考!
设计内容(原理图以及相关说明、调试过程、结果)
一、 系统设计方案
根据系统要求,系统的组成框图如图1所示。
时钟
钱数输入 商品选择
分频器 控制器 译码显示 图1 系统组成框图
系统按功能可分为分频模块、控制模块和译码输出模块。
(1)分频模块的作用是获得周期较长的时钟信号,便于操作,且不会产生按键抖动的现象。其原理是定义两个中间信号Q、DIV_CLK,Q在外部时钟CLK的控制下循环计数,每当计数到一个设定的值时DIV_CLK的值翻转,最后将DIV_CLK赋给NEW_CLK即可,改变设定值可改变分频的大小。
(a2)控制模块是这个系统的核心模块,它具有判断按键、计算输入钱数总和、计算找零、控制显示四个作用。它的工作原理是每当时钟上升沿到来时,判断哪个按键按下,
最新范本,供参考!
若按下的是钱数键,则将钱数保存于中间信号COIN,若下次按下的仍是钱数键,COIN的值则加上相应的值并显示于数码管;当物品键按下时,则将COIN的值与物品 价格进行比较,然后控制找零。
(3)由于钱数可能大于9,所以译码显示模块的作用就是将钱数译码后用两个数码管显示,这样方便观察。
根据各个功能模块的功能并进行整合,可得到一个完整的自动售货机系统的整体组装设计原理图,如图2所示。
图2 设计原理图
二、 系统主要VHDL源程序
(1) 分频器的源程序(外部时钟选用3MHz,实现3万分频)
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL; ENTITY 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 IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY 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; -- 输入的钱数 PAYBACK<=COUT; -- 找零 END BEHAV;
(3) 译码显示源程序(总钱数应小于16元)
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL; ENTITY XIANSHI IS
PORT ( DIN: IN STD_LOGIC_VECTOR(3 DOWNTO 0);
DOUT: OUT STD_LOGIC_VECTOR(7 DOWNTO 0));
END XIANSHI;
ARCHITECTURE BEHAV OF XIANSHI IS
BEGIN
PROCESS(DIN) BEGIN
CASE DIN IS
WHEN \"0000\"=> DOUT<=\"00000000\"; WHEN \"0001\"=> DOUT<=\"00000001\"; WHEN \"0010\"=> DOUT<=\"00000010\"; WHEN \"0011\"=> DOUT<=\"00000011\";
WHEN \"0100\"=> DOUT<=\"00000100\"; WHEN \"0101\"=> DOUT<=\"00000101\"; WHEN \"0110\"=> DOUT<=\"00000110\"; WHEN \"0111\"=> DOUT<=\"00000111\";
WHEN \"1000\"=> DOUT<=\"00001000\"; WHEN \"1001\"=> DOUT<=\"00001001\";
最新范本,供参考!
WHEN \"1010\"=> DOUT<=\"00010000\"; WHEN \"1011\"=> DOUT<=\"00010001\"; WHEN \"1100\"=> DOUT<=\"00010010\"; WHEN \"1101\"=> DOUT<=\"00010011\"; WHEN \"1110\"=> DOUT<=\"00010100\"; WHEN \"1111\"=> DOUT<=\"00010101\"; WHEN OTHERS=> DOUT<=\"00000000\"; END CASE; END PROCESS;
END BEHAV;
三、 系统仿真与硬件验证
(1) 系统的有关仿真
1)分频电路的仿真
如图3所示,为了便于仿真,在仿真时采用20分频,由图可看出
每经过10个外部时钟,新时钟翻转一次,实现了分频。
图3 分频器仿真结果图
最新范本,供参考!
2)控制电路的仿真
如图4、图5、图6所示。
图4 输入7元,购买5元商品,找零2元,Y0显示购买成功
图5 输入13元,购买10元商品,找零3元,Y0显示购买成功
最新范本,供参考!
图6 输入7元,购买10元商品, Y1显示购买失败,退币7元
3)显示电路的仿真
如图7所示,当大于9时分开显示。
图7 显示电路仿真结果
系统的硬件验证
应用GW48实验系统,选择实验电路结构图NO.5,管脚定义如下: CLK接CLOCK1 、COIN1 接PIO0、COIN2接 PIO1、COIN3接PIO2、PRICE1接 PIO3、 PRICE2接PIO4、PRICE3接 PIO5;MONEY[7..0] 接PIO16~PIO23(数码管1、数码管2)、PAYBACK[7...0] 接PIO24~PIO31(数码管3、数码管4)、Y0接PIO8(二极管D1)、 Y1接PIO9(二极管D2)。
硬件验证方法:选择实验模式5,时钟信号CLK与CLOCK1信号组中的3MHz信号相连,用键1~键3输入钱数,用键4~键6选择商品,观察数码管及二极管的显示情况。
最新范本,供参考!
【本文档内容可以自由复制内容或自由编辑修改内容期待你的好评和关注,我们将会做得更好】
最新范本,供参考!
因篇幅问题不能全部显示,请点此查看更多更全内容