自动售货机课程设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
合肥学院
课程设计报告
题目:自动售货机课程设计
系别:电子信息与电气工程系
专业:通信工程
班级:
学号:___
姓名:
导师:
日期: 2016.5.30 成绩:
一、引言
本次课程设计研究自动售货机的主要功能模块,主要包括商品选择模块、余额计算模块、退币模块,由于条件上的限制,对投币模块中的货币检测未进行处理。相应的主要功能有选择货物,购买,出货找零,显示,延时和时控功能。通过使用VHDL语言,基于FPGA可编程芯片,并通过使用QUARTUSⅡ软件进行程序设计,模拟仿真,功能验证,以更好的来理解和掌握自动售货机控制系统的工作原理和设计方法,以及学习和掌握基于EDA的电子产品设计方法,进一步加深对VHDL语言以及QUARTUSⅡ软件、FPGA可编程芯片的认识与了解。
二、项目要求
设计一个自动售货机控制程序,它的投币口每次可以投入1元、2元、5元,且规定投入1元或2元后不得再投入5元。当投入总值等于或超过设定值(4元),售货机就自动送出货物并找回多余的钱。
1、基本要求按照上面要求,编写程序,实现售单一商品的功能。
2、扩展要求:在基本要求的基础上,完善电路,实现售多个商品的功能(设定值应该相应增加)。
三、设计方案
本售货机可销售两种商品,单价分别为3元和4元。投币口每次可以投入1元、2元、5元,且规定投入1元或2元后不得再投入5元,投入总额为3元时,不能再投入2元或者5元,当投入总值超过设定值3元或者4元的情况下,选择商品一或者商品二,售货机就自动送出货物并找回多余的钱。
四、项目代码及其分析
VHDL程序代码:
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY ZDSHJ IS
PORT(CLK,RESET:IN STD_LOGIC;
DIN:IN STD_LOGIC_VECTOR(2 DOWNTO 0);
COMB_OUTPUTS,GIVE_CHANGE:OUT STD_LOGIC); END ENTITY;
ARCHITECTURE behav OF ZDSHJ IS
TYPE FSM_ST IS (S0,S1,S2,S3,S4,S5);
SIGNAL current_state,next_state:FSM_ST; BEGIN
REG:PROCESS(CLK)BEGIN
IF RESET='1' THEN current_state<=s0;
ELSIF CLK'EVENT AND CLK='1' THEN
current_state<=next_state;
END IF;
END PROCESS REG;
COM:PROCESS( DIN,current_state)
BEGIN
CASE current_state IS
WHEN s0=>COMB_OUTPUTS<='0';
GIVE_CHANGE<='0';
IF DIN="001" THEN next_state<=s1;
ELSIF DIN="010" THEN next_state<=s2; ELSIF DIN="101" THEN next_state<=s5; ELSE next_state<=s0;
END IF;
WHEN s1=>COMB_OUTPUTS<='0';
GIVE_CHANGE<='0';
IF DIN="001" THEN next_state<=s2;
ELSIF DIN="010" THEN next_state<=s3; ELSE next_state<=s1;
END IF;
WHEN s2=>COMB_OUTPUTS<='0';
GIVE_CHANGE<='0';
IF DIN="001" THEN next_state<=s3;
ELSIF DIN="010" THEN next_state<=s4; ELSE next_state<=s2;
END IF;
WHEN s3=>COMB_OUTPUTS<='0';
GIVE_CHANGE<='0';
IF DIN="001" THEN next_state<=s4;
ELSIF DIN="010" THEN next_state<=s5; ELSE next_state<=s3;
END IF;
WHEN s4=>COMB_OUTPUTS<='1';
GIVE_CHANGE<='0';
next_state<=s0;
WHEN s5=>COMB_OUTPUTS<='1';
GIVE_CHANGE<='1';
next_state<=s0;
END CASE;
END PROCESS COM;
END behav;
程序分析:
DIN=00表示未投币;
DIN=01表示投币一元;
DIN=10表示投币两元;
DIN=11表示投币五元;
Y1为货物控制信号:Y1=1表示出货,Y1=0表示不出货。
Y2为找零以及五元投币口开闭信号:
Y2=00表示不找零并打开五元投币口,允许投入五元;
Y2=01表示找零一元并打开五元投币口,允许投入五元;
Y2=11表示不找零并关闭五元投币口,不允许投入五元;
S0表示初始状态,还没有收到投币;
S1表示收到一元投币的状态;
S2表示收到两元投币的状态;
S3表示收到三元投币的状态
仿真波形:
自动售货机仿真波形(一)
分析1:通过上图波形可以看出,当DIN=1时,即投币1通过上图波形可以看出,当DIN=2时,元,前三个脉冲来临时,即投币金额为1元、2元、3元,状态分别为s1,s2,s3,COMB_OUTPUTS和GIVE_CHANGE都是显示为0。当第四个脉冲来临时,即投币金额为4元时,则COMB_OUTPUTS显示为1,GIVE_CHANGE显示为0,