自动售货机设计.docx
- 文档编号:24683399
- 上传时间:2023-05-31
- 格式:DOCX
- 页数:14
- 大小:674.18KB
自动售货机设计.docx
《自动售货机设计.docx》由会员分享,可在线阅读,更多相关《自动售货机设计.docx(14页珍藏版)》请在冰豆网上搜索。
自动售货机设计
自动售货机设计
一、实验任务
前提:
单一商品的设定值是4元,多个商品时就设定值自拟
(1)自动售货机的投币口每次可以投入1元、2元、5元,且规定投入1元或2元后不得再投入5元;
(2)当投入总值等于设定值时,售货机就自动送出货物;当投入的总值超过设定值时,售货机会显示余额,送出商品并自动找零;
(3)编写程序,实现售单一商品的功能。
按照以上要求,编写程序,实现售单一商品的功能;
二、实验内容
2。
1设计思路
图1:
自动售货机RTL实验原理图
图2:
自动售货机的状态装换图
实验原理:
本次实验是在状态机的基础上设计一个自动售货机,共分为6个状态,即S0,S1,S2,S3,S4,S5,分别表示此时的金额为0元,1元,2元,3元,4元,5元。
在时钟的控制下:
①:
当现态为S0(即0元),输出的MONEY为0元,无Y0和Y1信号,故PAYBACK为0元.若此时CIN为1元,则次态为S1(即1元);若此时CIN为2元,则次态为S2(即2元);若此时CIN为5元,则次态为S5(即5元);
②:
当现态为S1(即1元),输出的MONEY为1元,无Y0和Y1信号,故PAYBACK为0元。
若此时CIN为1元,则次态为S2(即2元);若此时CIN为2元,则次态为S3(即3元);若此时CIN为5元,则次态为S0(即0元);
③:
当现态为S2(即2元),输出的MONEY为2元,有Y0和Y1信号,故PAYBACK为0元。
若此时CIN为1元,则次态为S3(即3元);若此时CIN为2元,则次态为S4(即4元);若此时CIN为5元,则次态为S0(即0元);
④:
当现态为S3(即3元),输出的MONEY为3元,无Y0和Y1信号,故PAYBACK为0元。
若此时CIN为1元,则次态为S4(即4元);若此时CIN为2元,则次态为S5(即5元);若此时CIN为5元,则次态为S0(即0元);
⑤:
当现态为S4(即4元),输出的MONEY为4元,有Y0,无Y1信号,故PAYBACK为0元。
次态为S0;
⑥:
当现态为S5(即5元),输出的MONEY为5元,有Y0和Y1信号,故PAYBACK为1元。
次态为S0。
2.2实验流程图
图3:
单一商品时流程图
三、实验过程
3。
1实验代码
见附录
3。
2仿真波形图
1单一商品的仿真波形
图4:
仿真波形图
波形图分析如下
①:
输入金额为0元,则输出总金额为0元,无商品购买成功信号和退币信号,故输出余额也为0元;
②:
输入金额为1元,则此时的输出总金额为1元,无商品购买成功信号和退币信号,故输出的余额也为0元;
③:
输入金额为1元,但是此时有一个清零复位信号,则此时的输出总金额为0元,无商品购买成功信号和退币信号,故输出的余额为0元;
④:
输入金额为1元,则此时的输出总金额为1元,无商品购买成功信号和退币信号,故输出的余额也为0元;
⑤:
输入金额为2元,在原有的1元的基础上加上现在的2元,则此时的输出总金额为3元,无商品购买成功信号和退币信号,故输出的余额为0元;
⑥:
输入金额为2元,在原有的3元的基础上加上现在的2元,则此时的输出总金额为5元,有商品输出信号和退币信号,故输出的余额为1元;
⑦:
输入金额为5元,因为设定的输入1元,2元以后不得在输入5元,故此时输出的总金额为0元,无商品购买成功信号和退币信号,所以此时输出的余额为0元;
⑧:
输入金额为1元,则此时的输出总金额为1元,无商品购买成功信号和退币信号,故输出的余额也为0元;
⑨:
输入金额为1元,在原有的1元的基础上加上现在的1元,则此时的输出总金额为2元,无商品购买成功信号和退币信号,故输出的余额也为0元;
⑩:
输入金额为2元,在原有的2元的基础上加上现在的2元,则此时的输出总金额为4元,有商品购买成功信号,但无退币信号,故此时的余额为0元。
3。
3硬件实现
3。
3.1模式选择
选择模式1
3。
3。
2引脚锁定
1单一商品
四、实验结果
4。
1硬件实现图片
4。
1。
1单一商品时
当CIN=1时,结果及分析见下表
一个时钟脉冲来到时,输出总金额为1元,此时没有商品输出,也没有退币
两个时钟脉冲来到时,输出总金额为2元,此时没有商品输出,也没有退币
三个时钟脉冲来时,输出金额为3元,此时没有商品输出,也没有退币
四个时钟脉冲来时,输出金额为4元,此时有商品输出,没有退币
当CIN=2时,结果及分析见下表
一个时钟脉冲来时,输出的总金额为2元,此时没有商品输出,也没有退币
两个时钟脉冲来时,输出的总金额为4元,此时有商品输出,没有退币
当CIN=5元时,结果及分析见下表
一个时钟脉冲来时,输出的总金额为5元,此时有商品输出,有退币且为1元
五、实验总结
刚开始看到这个题目时,我就觉得一头雾水,不知道怎么开始设计这个项目,上网也查阅了很多资料,但收获仍是很少,无从下手,不知如何编写代码去实现项目的要求。
后经同学提醒,本次项目是需要使用状态机去实现自动售货的功能,与之前我们上机实验中的“有限状态机的实现”很类似,于是,我便开始边看边想,慢慢地编写代码。
在编写代码的时候,出现错误是很正常的,我根据QUARTUSⅡ软件平台上的错误提醒一一纠正过来了,编译无误后,开始进行波形仿真,但是出现了问题,代码没有出现编译错误,但是没有实现我想要的功能,检查了代码以后我仍然不知道问题出在哪里,于是询问同学,在同学的帮助下,找到了我代码问题所在之处,我编写的代码并不完整,也输出了很多无效状态,在本次设计要求中有,只能输入1元,2元以及5元,不得输入其他面值的钱币,我在编写代码的时候没有考虑到这一点,尽管编译没有错误,但是波形仿真不对,经修正后,得出理想的仿真波形,然后选择合适的模式,进行引脚锁定,锁定结束后开始下载测试,按照我自己设计的按键键8是时钟CLK、键1输入钱币CIN、译码器5为输入的总金额、译码器6为输出的余额,虽说,试验箱上有复位键,但是我仍然设定了一个按键作为我的RESET复位键,D1是商品购买成功的信号,D1如果亮起,则说明已经成功买到商品,反之,则没有买到,由于我所使用的试验箱的D2灯出了问题,当给了高电平以后,却没有如预期一样亮起,故换做D3作为我实验退币的信号灯,当D3亮起时,则说明此时有钱币退出,反之,则没有.经过几天的努力后,成功的完成了本次单一商品的实验,但是多个商品的实现仍然还存在一些问题,这是我的一点小小的遗憾.但总体来说,我的项目设计还算很成功
附录1:
单一商品的实验代码
LIBRARYIEEE;
USEIEEE。
STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED。
ALL;
ENTITYautomaticIS
PORT(CLK,RESET:
INSTD_LOGIC;
CIN:
INSTD_LOGIC_VECTOR(2DOWNTO0);--输入的总钱数
Y0:
OUTSTD_LOGIC;-—购买成功信号
Y1:
OUTSTD_LOGIC;--退币信号
MONEY:
OUTSTD_LOGIC_VECTOR(2DOWNTO0);—-输入的总金额数
PAYBACK:
OUTSTD_LOGIC_VECTOR(2DOWNTO0));-—显示余额
ENDautomatic;
ARCHITECTUREoneOFautomaticIS
TYPEFSM_STIS(S0,S1,S2,S3,S4,S5);-—定义了S0,S1,S2,S3,S4,S5六个状态
SIGNALCS,NS:
FSM_ST;
BEGIN
REG:
PROCESS(CLK,RESET)--一共分为两个进程,分别是REG和COM
BEGIN
IFRESET='1’THENCS<=S0;——异步清零,清零信号在CLK’EVENTANDCLK='1’之外
ELSIFCLK'EVENTANDCLK='1'THEN
CS<=NS;
ENDIF;
ENDPROCESS;
COM:
PROCESS(CS,CIN)
BEGIN
CASECSIS
WHENS0=>MONEY<="000”;Y0<='0';Y1<='0’;PAYBACK〈="000”;—-S0状态即为初状态,此时没有输出商品,也没有余额,故也没有商品输出信号,也没有余额输出信号
IFCIN="001"THENNS<=S1;-—输入1元则下一状态为S1;
ELSIFCIN=”010"THENNS〈=S2;--输入2元则下一状态为S2;
ELSIFCIN="101”THENNS〈=S5;--输入5元则下一状态为S5
ELSENS<=S0;
ENDIF;
WHENS1=〉MONEY〈=”001";Y0<=’0';Y1<='0’;PAYBACK〈=”000";--S1状态:
输入总金额为1元,余额为0元,没有商品输出信号,没有余额输出信号
IFCIN=”001”THENNS<=S2;——输入1元则下一状态为S2;
ELSIFCIN="010”THENNS<=S3;-—输入2元则下一状态为S3;
ELSIFCIN=”101"THENNS〈=S0;-—输入5元则下一状态为S0;
ELSENS<=S1;
ENDIF;
WHENS2=>MONEY<="010”;Y0〈='0’;Y1<=’0’;PAYBACK<="000";--S2状态:
输入总金额为2元,余额为0元,没有商品输出信号,没有余额输出信号
IFCIN="001”THENNS〈=S3;—-输入1元则下一状态为S3;
ELSIFCIN=”010”THENNS〈=S4;——输入2元则下一状态为S4;
ELSIFCIN=”101"THENNS<=S0;—-输入5元则下一状态为S0;
ELSENS<=S2;
ENDIF;
WHENS3=〉MONEY〈=”011”;Y0〈='0';Y1〈=’0’;PAYBACK<="000";—-S3状态:
输入总金额为3元,余额为0元,没有商品输出信号,没有余额输出信号
IFCIN=”001"THENNS〈=S4;--输入1元则下一状态为S4;
ELSIFCIN="010”THENNS<=S5;-—输入2元则下一状态为S5;
ELSIFCIN=”101”THENNS〈=S0;--输入5元则下一状态为S0;
ELSENS<=S3;
ENDIF;
WHENS4=〉MONEY<="100";Y0<='1';Y1〈=’0';PAYBACK<=”000";—-S4状态:
输入总金额为4元,余额为0元,有商品输出信号,没有余额输出信号
IFCIN=”001"THENNS〈=S1;—-输入1元则下一状态为S1;
ELSIFCIN="010"THENNS<=S2;——输入2元则下一状态为S2;
ELSIFCIN=”101”THENNS〈=S5;—-输入5元则下一状态为S5;
ELSENS〈=S0;
ENDIF;
WHENS5=〉MONEY<=”101";Y0<='1';Y1<=’1’;PAYBACK〈=”001";——S1状态:
输入总金额为5元,余额为1元,没有商品输出信号,没有余额输出信号
IFCIN=”001”THENNS〈=S1;——输入1元则下一状态为S1;
ELSIFCIN=”010”THENNS<=S2;—-输入2元则下一状态为S2;
ELSIFCIN="101"THENNS<=S5;——输入5元则下一状态为S5;
ELSENS<=S0;
ENDIF;
WHENOTHERS=〉MONEY<=”000";Y0<=’0’;Y1<=’0’;PAYBACK<=”000";——非法状态:
当输入的不是上述已经列出的状态,则输出的状态都为初状态
ENDCASE;
ENDPROCESS;
ENDone;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 自动 售货 设计