北邮数字电路实验自动售货机
- 格式:doc
- 大小:3.54 MB
- 文档页数:44
word文档 可自由复制编辑 数字电路与逻辑设计实验 简易自动售货机
学院: 电子工程学院 班号: 学号: 姓名: 班内序号: 辅导老师: 时间: 一、设计课题的任务要求 1、 实验目的 1)进一步熟练掌握VHDL语言和QuartusⅡ软件的使用; word文档 可自由复制编辑
2) 理解状态机的工作原理和设计方法; 2、实验内容 设计一个简易的自动售货机,能够完成钱数处理、找零、显示、退币等功能。 3、基本要求 1)用 2 个数码管(disp5,disp4)显示钱数,以元为单位。用3 个按键(btn0,btn1,btn2)分别表示一元、五元、十元,每按一次按键,增加一次相应的钱数,上限99元。 2)再用 3 个按键(btn3,btn4,btn5)分别对应3 种商品,其中,商品甲售价3 元、商品乙售价8 元、商品丙售价12 元; 3)买东西时,先输入钱币,再按对应的商品键。每按一次商品键,钱数要相应地减少,同时有声光(蜂鸣器或发光二极管)提示购买成功。剩余钱数大于3 元可继续按商品键再次购买;当剩余钱数少于3 元时,表示钱数的数码管disp5,disp4 显示为零,同时用数码管disp0 显示退出的钱数。 4)买东西时,按下商品键,若输入的钱数少于商品的价格,表示钱数的数码管 disp5,disp4 显示为零,同时用数码管(disp1、disp0)显示退出的钱数,并用蜂鸣器或发光二极管闪烁表示购买失败。 5)按下商品键时,用数码管disp2 表示当前购买的商品,1 代表商品甲,2 代表商品乙,3 代表商品丙。 word文档 可自由复制编辑
6)用 btn7 做为退出功能键,退出键可以随时按下,按下后,数码管(disp5,disp4)显示为零,同时数码管(disp1、disp0)显示退出的钱数,表示结束购买,钱款全部退出。 4、提高要求: 1)用点阵设计显示投币动画、出货动画,购买成功/失败动画; 2)允许随时输入钱币,购买时,钱款不足有声光报警并等待追加钱币或选择别的商品; 3)商品数量管理,有缺货提示; 4)用点阵动态显示商品名称和库存数量等。 5)自拟其它功能。
二、设计思路及原理框图 1、原始设计思路及框图 (a)实验设计思路 用户可投入三种面值的钱,选择相应商品进行购买,若钱数足够,二极管亮,商品调出;若钱数不够,蜂鸣器响,商品不会调动,此时可继续投币,直到钱数够了商品才会调出,期间若钱数小于等于3元,系统会退回钱币,一次购买结束。若任何一阶段用户点击退出,系统也会退回钱币,一次购买结束。
具体思路简述: word文档 可自由复制编辑
投入钱(动画1),计数,按键购买。1、钱不够(动画1),蜂鸣器,可继续投钱 2、钱够(动画2),二极管发光,减数值。每次减数值进行计算,<=3时,退钱(动画3),显示钱数。>3时,维持原状态。 按7退出,显示退钱数(动画4),其他显示为0,结束。
(b)总体框图
图1、总体设计框图 如图:1:Disp5 disp4 (数码管组1) 投入的钱数,上限99 2:Disp1 disp0 (数码管组2) 退回的钱数,上限99 3: Btn2 btn1 btn0 (按钮)钱数 十元 五元 一元 4:Btn5 btn4 btn3 (按钮)甲(3元)乙(8元)丙(12元)三种商品 5:蜂鸣器 6:发光二极管 7:Btn7 (按钮)退出 8:点阵图案
1 2 3 4 7 5
6 8 word文档 可自由复制编辑 (c)模块划分(简化,未标蜂鸣器,二极管)
如上图所示,主要分为分频模块,控制模块,点阵显示模块和数码显示模块。 1)分频模块:输入50Mhz信号后分别分为clk_10(10hz),clk_50k(50khz)。其中,clk_10用来控制电路基本运算,clk_50k用于点阵及数码管的刷新显示。 2)控制模块:控制其他各个模块,使功能能得到实现。 3)点阵显示模块:对应相应的用户操作显示相应点阵动画。 4)数码管显示模块:对输入结果译码后在数码管上进行显示。 word文档 可自由复制编辑
(d)控制流程图(简化,未标蜂鸣器、二极管) (e)状态转移图 Out_A2_L:出货品,动画2 Add_A1_S:投入钱,动画1 Back_A3:退钱,动画3 Exit:退出
钱不足 钱足够
退出 退出 退出
钱不足 word文档 可自由复制编辑
2、原始基本思路的补充或改进 (a)为实现提高要求,加上提取货物这一模块,这样就会多一个状态,系统变为5个状态。此时显示货物数目也需要数码管,因而用disp3、disp2来显示数目。这样原本显示商品种类的数码管会被占用,此时考虑将这两个数码管的显示数值设成4项循环显示。 (b)同时循环显示甲乙丙三种货物数目需要加一个循环模块。 (c)为了使购买过程操作错误或其他情况导致退钱后,用户可以继续购买,设定按btn7才完全退出。即第一次错误或退出会到退钱的状态,再按一次btn7才是完全退出。一次错误或退钱后再加入货币还可继续与原货币累加并继续购买。 最后所得各个模块连接图如下 word文档 可自由复制编辑
三、仿真波形及波形分析 1、售货机主程序模块仿真分析
说明:clk:时钟(上升沿有效)。e:退出。insert:进货。 a1:投入1元。a2:投入5元。a3:投入10元。 b1:购买甲(3元)。b2:购买乙(8元)。b3:购买丙(12元)。 c1,c2,c3分别表示甲、乙、丙三种商品剩余数量。(disp3与2显示) change:剩余退回的钱数(disp1与0的显示)。 money:售货机中已投入钱数(disp5与4显示)。 goodtype:购买商品的种类。 状态:s1:表示投币成功。 s2:表示购买成功。 s3:表示退钱。 s4:表示退出。 s5:表示缺货。
(a)运行开始,先进货。为迎合中国大众的消费心理需求,设定的
是价格3元、8元、12元的货物每次分别提货数量30、20、10。第一次进货仿真如下,此时货源充足,s5=0。
注:由于加了防抖电路,所以在后一个时钟上升沿到来时,货物数才增加。具体语句如下页所示。 word文档 可自由复制编辑
(b)按键进行投币和购买,每次投币,money数会相应增加(状态s1);每次购买货物,若购买成功,则money减少、相应货物数减小、、goodtype显示商品种类,状态为s2。当选择商品价格大于投入钱币时,系统退钱,money变为0,change变为原money数,状态变为s3。 word文档 可自由复制编辑
(c)最大限额为99的限定。当投入钱数会大于99时,系统不接受该投币。
(d)剩余钱数小于3时,系统退钱,money为0,change为原来money值。s2成功的同时到s3。 word文档 可自由复制编辑
(e)退出后系统退钱,需要退钱后再加钱还可以购买的仿真。 (f)缺货提示,货物为0时,购买不成功,状态s5显示缺货。 2、分频模块仿真。 说明:该模块中实际分出了三个时钟clk_1,clk_10,clk_50k。为了仿真的便捷性,此处只仿真一个简单5分频,模块程序中的三个clk与该仿真原理相同,代码写法也相同。 word文档 可自由复制编辑
3、循环模块仿真。 如下图所示,此模块可实现三个状态的循环。
4、数码管显示模块仿真。 说明:clk:输入时钟。 m,n分别为:money和change。 c1、c2、c3分别为甲乙丙的数量。 cat控制六个数码管哪个亮(低电平有效)。 X:正在亮的数码管显示的数值。 Goodtype:商品类型。4个状态,00时分别显示甲乙丙商品数;01、10、11时分别代表购买的是甲或乙或丙。 t:4个循环状态,00,01,10分别控制显示甲乙丙的数量。11无显示。
(a)goodtype为00时,受t的控制循环显示甲乙丙的商品数。如下图所示,x显示的48,95为16,此时对应状态t3,表示其显示c3的商品数。 word文档 可自由复制编辑
(b)如下图所示,当goodtype循环变化,对应数码管显示商品种类121--3,109--2,48--1。
(c)下面x显示的为16、32、00,16、32、00,...即m,n,c1的值。此时goodtype为00,t为00(对应c1)。
5、点阵显示模块仿真。 说明:clk_1、clk_2:输入时钟。 s1、s2、s3、s4、s5:分别对应投币动画,出货动画,钱数不足动画,成功退出动画和缺货提示动画。 Col:动画或图像的点阵显示。 Row:控制哪一排的点阵可以亮。 t:循环状态。00:显示甲,01:显示乙,10:显示丙。 此处对循环显示的甲乙丙和5动画中的一个动画进行讨论。 word文档 可自由复制编辑
(a)如下,当s无明确状态,t循环变化时可循环显示甲乙丙。下图依次为两个甲、两个乙、两个丙。
形如下图 (b)下图为s1投钱时的动画。