版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 自动售货机实验报告 一设计课程的任务要求基本要求:1. 用2个数码管(disp5,disp4)显示钱数,以元为单位。用3个按键(btn0,btn1,btn2)分别表示一元、五元、十元,每按一次按键,增加一次相应的钱数,上限99元。2. 再用3个按键(btn3,btn4,btn5)分别对应3种商品,其中,商品甲售价3元、商品乙售价8元、商品丙售价12元;3. 买东西时,先输入钱币,再按对应的商品键。每按一次商品键,钱数要相应地减少,同时有声光(蜂鸣器或发光二极管)提示购买成功。剩余钱数大于3元可继续按商品键再次购买;当剩余钱数少于3元时,表示钱数的数码管disp5,disp4显示为零,同时用数
2、码管disp0显示退出的钱数。4. 买东西时,按下商品键,若输入的钱数少于商品的价格,表示钱数的数码管disp5,disp4显示为零,同时用数码管(disp1、disp0)显示退出的钱数,并用蜂鸣器或发光二极管闪烁表示购买失败。5. 按下商品键时,用数码管disp2表示当前购买的商品,1代表商品甲,2代表商品乙,3代表商品丙。6. 用btn7做为退出功能键,退出键可以随时按下,按下后,数码管(disp5,disp4)显示为零,同时数码管(disp1、disp0)显示退出的钱数,表示结束购买,钱款全部退出。提高要求:7. 用点阵设计显示投币动画、出货动画,购买成功/失败动画;8. 允许随时输入钱
3、币,购买时,钱款不足有声光报警并等待追加钱币或选择别的商品;9. 商品数量管理,有缺货提示;10. 用点阵动态显示商品名称和库存数量等。自拟其它功能二系统设计(包括设计思路、总体框图、分块设计)1.设计思路: 本实验为设计一个自动售货机。由于本实验题目逻辑不太复杂,所以有两种设计思路可以选择。第一种是用顺序结构和if when逻辑判断来实现。第二种是用状态机来实现。我选择的使用第一种。总体来说可以将其分为两个大块。第一个是接受键盘命令并通过逻辑判断向LED灯和数码管发出命令。第二个是显示模块,通过接收命令控制灯亮与数码管显示。2.总体框图:结构框图:逻辑划分框图:ASM图:MDS图:分块设计:
4、防抖:本程序防抖功能采取延时防抖,即在按键按下后若持续时间超过一定时长才计数。计价器:计价器分为十位和个位分别计数,由两个信号控制。加减时根据补码计算的思想,先判断十位是否进位或退位,若有则对各位进行反向计算,若没有则直接修改个位。充值模块:此模块与计价器加法思想一样。并设有99的最高限。消费模块:此模块与计价器减法一样。在做减法前先判断是否减钱后余额大于零。显示模块:此模块分为两步。第一步由充值消费后的价钱通过信号赋给显示输出管脚。第二步为通过循环用cat控制数码管关与开。三. 仿真波形及波形分析 由于程序加入了大量防抖与分频器,所以无法直接进行仿真。以下仿真为拆除了防抖、分频,并且将钱数两
5、位分别输出观察结果。Money11为十位,money00为个位。1.充值1元仿真: 当bn0按下后,十位不变,个位加一。2.充值五元仿真当bn1按下后,十位不变,个位加五。3.充值十元仿真当bn2按下后,个位不变,十位加一。4.充值超过99仿真充值超过九十九时,个位十位均不变保持九十九。5.消费三元仿真总钱数为十元时,当bn3按下后,十位减一,个位加七。6.消费八元仿真总钱数为十元,当bn4按下后,十位减一,个位加二。7.消费十二元仿真总钱数为二十元,当bn5按下后,十位减2,个位加8。8.消费超出总额仿真当消费超过总额时,钱数全部置零。四. 源程序LIBRARY IEEE;USE IEEE.
6、STD_LOGIC_1164.ALL;use ieee.std_logic_unsigned.all;ENTITY cxz IS PORT(bn0,bn1,bn2,bn3,bn4,bn5,bn7:IN STD_LOGIC;clk_50M,reset:IN STD_LOGIC;DOUT7: OUT STD_LOGIC_VECTOR(6 DOWNTO 0);CatL: OUT STD_LOGIC_VECTOR(5 DOWNTO 0);led1,led2,led3,led4:OUT STD_LOGIC ); END cxz;ARCHITECTURE behave OF cxz ISSIGNAL di
7、sp0,disp1,disp2,disp4,disp5:STD_LOGIC_VECTOR(6 DOWNTO 0);SIGNAL btn0,btn1,btn2,btn3,btn4,btn5,btn7 :STD_LOGIC:=0;SIGNAL clk_1,clk_1k:STD_LOGIC;SIGNAL Q:STD_LOGIC_VECTOR(3 downto 0);SIGNAL temp1:INTEGER RANGE 0 TO 499;SIGNAL temp:INTEGER RANGE 0 TO 24999;SIGNAL money0,money1:STD_LOGIC_VECTOR(3 downto
8、 0):=0000;SIGNAL count_BTN0:INTEGER RANGE 0 TO 20;SIGNAL count_BTN1:INTEGER RANGE 0 TO 20;SIGNAL count_BTN2:INTEGER RANGE 0 TO 20;SIGNAL count_BTN3:INTEGER RANGE 0 TO 20;SIGNAL count_BTN4:INTEGER RANGE 0 TO 20;SIGNAL count_BTN5:INTEGER RANGE 0 TO 20;SIGNAL count_BTN7:INTEGER RANGE 0 TO 20;BEGINp1:PR
9、OCESS(clk_50M,reset)-分频模块BEGINIF reset=0 THENtemp=0;ELSIF clk_50Mevent AND clk_50M=1 THENIF temp=24999 THENtemp=0;clk_1k=NOT clk_1k;ELSEtemp=temp+1;END IF;END IF;END PROCESS p1;-分频结束p2:PROCESS(clk_1k,bn0)-按键防抖模块开始BEGINIF(clk_1kevent AND clk_1k = 1) THENIF(bn0 = 1) THENIF count_BTN0 = 20 THENcount_BT
10、N0 = count_BTN0;ELSEcount_BTN0 = count_BTN0+ 1;END IF;IF count_BTN0= 19 THEN btn0= 1;ELSEbtn0= 0;END IF;ELSEcount_BTN0= 0;-输出变量启动判断进程END IF;ELSEEND IF;END PROCESS p2;p3:PROCESS(clk_1k,bn1)BEGINIF(clk_1kevent AND clk_1k = 1) THENIF(bn1= 1) THENIF count_BTN1 = 20 THENcount_BTN1 = count_BTN1;ELSEcount_
11、BTN1 = count_BTN1+ 1;END IF;IF count_BTN1= 19 THEN btn1= 1;ELSEbtn1= 0;END IF;ELSEcount_BTN1= 0;END IF;ELSEEND IF;END PROCESS p3;p4:PROCESS(clk_1k,bn2)BEGINIF(clk_1kevent AND clk_1k = 1) THENIF(bn2= 1) THENIF count_BTN2= 20 THENcount_BTN2 = count_BTN2;ELSEcount_BTN2 = count_BTN2 + 1;END IF;IF count_
12、BTN2= 19 THEN btn2= 1;ELSEbtn2= 0;END IF;ELSEcount_BTN2= 0;END IF;ELSEEND IF;END PROCESS p4;p5:PROCESS(clk_1k,bn3)BEGINIF(clk_1kevent AND clk_1k = 1) THENIF(bn3 = 1) THENIF count_BTN3= 20 THENcount_BTN3 = count_BTN3;ELSEcount_BTN3 = count_BTN3 + 1;END IF;IF count_BTN3= 19 THEN btn3= 1;ELSEbtn3= 0;EN
13、D IF;ELSEcount_BTN3= 0;END IF;ELSEEND IF;END PROCESS p5;p6:PROCESS(clk_1k,bn4)BEGINIF(clk_1kevent AND clk_1k = 1) THENIF(bn4 = 1) THENIF count_BTN4 = 20 THENcount_BTN4 = count_BTN4;ELSEcount_BTN4 = count_BTN4 + 1;END IF;IF count_BTN4= 19 THEN btn4= 1;ELSEbtn4= 0;END IF;ELSEcount_BTN4= 0;END IF;ELSEE
14、ND IF;END PROCESS p6;p7:PROCESS(clk_1k,bn5)BEGINIF(clk_1kevent AND clk_1k = 1) THENIF(bn5 = 1) THENIF count_BTN5 = 20 THENcount_BTN5 = count_BTN5;ELSEcount_BTN5 = count_BTN5 + 1;END IF;IF count_BTN5= 19 THEN btn5= 1;ELSEbtn5= 0;END IF;ELSEcount_BTN5= 0;END IF;ELSEEND IF;END PROCESS p7;p8:PROCESS(clk
15、_1k,bn7)BEGINIF(clk_1kevent AND clk_1k = 1) THENIF(bn7 = 1) THENIF count_BTN7 = 20 THENcount_BTN7 = count_BTN7;ELSEcount_BTN7= count_BTN7 + 1;END IF;IF count_BTN7= 19 THEN btn7= 1;ELSEbtn7= 0;END IF;ELSEcount_BTN71000 THEN-十位有进位情况 money0=0000;money1=money1+1; ELSE money01001THEN-超出99封顶 money1=1001;m
16、oney00100 THEN money0=money0-5;money1=money1+1; ELSE money01001THEN money1=1001;money01000 THEN money0=1001;money1=1001; ELSE money10000 or money00010 THEN-钱数大于够买物品钱数 led1=1;led2=0;led3=0; disp20010THEN money0=money0-3; ELSE money1=money1-1; money0=money0+7; END IF; IF money1=0000 and money0disp0dis
17、p0disp0disp0=; END CASE; money0=0000; ELSE NULL; END IF; ELSE-钱数不够 led4disp1disp1disp1disp1disp1disp1disp1disp1disp1disp1disp1disp0disp0disp0disp0disp0disp0disp0disp0disp0disp0disp0=; END CASE; money1=0000; money0=0000; disp20000 or money01000 THEN led2=1;led1=0;led3=0; disp2=1000THEN money0=money0-
18、8; ELSE money1=money1-1; money0=money0+2; END IF; IF money1=0000 and money0disp0disp0disp0disp0=; END CASE; money0=0000; ELSE NULL; END IF; ELSE led4disp1disp1disp1disp1disp1disp1disp1disp1disp1disp1disp1disp0disp0disp0disp0disp0disp0disp0disp0disp0disp0disp0=; END CASE; money1=0000; money0=0000; di
19、sp20001 or (money1=0001 and money00001) THEN led3=1;led1=0;led2=0; disp20001THEN money0=money0-2; money1=money1-1; ELSE money1=money1-2; money0=money0+8; END IF; IF money1=0000 and money0disp0disp0disp0disp0=; END CASE; money0=0000; ELSE NULL; END IF; ELSE led4disp1disp1disp1disp1disp1disp1disp1disp
20、1disp1disp1disp1disp0disp0disp0disp0disp0disp0disp0disp0disp0disp0disp0=; END CASE; money1=0000; money0=0000; disp2=; END IF;-消费模块结束 ELSIF btn7=1THEN-结束模块 led1=0; led2=0; led3=0; led4disp1disp1disp1disp1disp1disp1disp1disp1disp1disp1disp1disp0disp0disp0disp0disp0disp0disp0disp0disp0disp0disp0=; END CASE; money1=0000; money0=0000; disp2disp5disp5disp5disp5disp5disp5disp5disp5disp5disp5disp5disp4disp4disp4disp4disp4disp4disp4disp4disp4disp4disp4=; END CASE;ELSE NULL;END IF;END PROCESS p9;p10:P
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026 年专科护理操作标准化带教流程搭建
- 2026 年高风险护理操作护生带教安全管控
- 2026年内分泌科糖尿病并发症预防护理查房
- 静脉输液专业试题及答案展示
- 11.0F-联盟网络Co-NET白皮书2.0(中文)
- 团体标准《兴隆咖啡师劳务品牌 深加工人员能力评定规范》
- 2026年《花卉学》期末考试模拟题库附答案详解(名师推-荐)
- 2026年城市公共交通优先发展实施方案
- 2026年高职(林业技术)森林培育资格考试试题及答案
- 2026年海南大学考研农艺与种业真题考卷(含答案及解析)
- 2026年国企水质化验笔试试题(含答案)
- 2026福建漳州闽投华阳发电有限公司招聘43人笔试参考题库及答案详解
- 2026海南省农业信贷担保有限责任公司招聘高层管理人员1人考试模拟试题及答案详解
- 2025版中国心肺复苏指南(完整版 含AED使用)
- GB/T 47655-2026电力电子装备和系统的构网性能要求及试验方法
- GA/T 1466.1-2026智能手机型移动警务终端第1部分:技术要求
- 2026年新高考北京政治真题含答案
- 2026年招聘消防文员笔试题库附答案
- 检验科生物安全培训内容及记录
- 【2025年】液化石油气库站工理论考试题库(含答案)
- 围手术期患者安全管理
评论
0/150
提交评论