自动售邮票机的控制电路设计.docx

上传人:b****2 文档编号:1356146 上传时间:2023-04-30 格式:DOCX 页数:17 大小:30.75KB
下载 相关 举报
自动售邮票机的控制电路设计.docx_第1页
第1页 / 共17页
自动售邮票机的控制电路设计.docx_第2页
第2页 / 共17页
自动售邮票机的控制电路设计.docx_第3页
第3页 / 共17页
自动售邮票机的控制电路设计.docx_第4页
第4页 / 共17页
自动售邮票机的控制电路设计.docx_第5页
第5页 / 共17页
自动售邮票机的控制电路设计.docx_第6页
第6页 / 共17页
自动售邮票机的控制电路设计.docx_第7页
第7页 / 共17页
自动售邮票机的控制电路设计.docx_第8页
第8页 / 共17页
自动售邮票机的控制电路设计.docx_第9页
第9页 / 共17页
自动售邮票机的控制电路设计.docx_第10页
第10页 / 共17页
自动售邮票机的控制电路设计.docx_第11页
第11页 / 共17页
自动售邮票机的控制电路设计.docx_第12页
第12页 / 共17页
自动售邮票机的控制电路设计.docx_第13页
第13页 / 共17页
自动售邮票机的控制电路设计.docx_第14页
第14页 / 共17页
自动售邮票机的控制电路设计.docx_第15页
第15页 / 共17页
自动售邮票机的控制电路设计.docx_第16页
第16页 / 共17页
自动售邮票机的控制电路设计.docx_第17页
第17页 / 共17页
亲,该文档总共17页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

自动售邮票机的控制电路设计.docx

《自动售邮票机的控制电路设计.docx》由会员分享,可在线阅读,更多相关《自动售邮票机的控制电路设计.docx(17页珍藏版)》请在冰点文库上搜索。

自动售邮票机的控制电路设计.docx

自动售邮票机的控制电路设计

公司内部档案编码:

[OPPTR-OPPT28-OPPTL98-OPPNN08]

 

自动售邮票机的控制电路设计

题目:

自动售邮票机的控制电路设计

用两个发光二极管分别模拟售出面值为6角和8角的邮票,购买者可以通过开关选择一种一种面值的邮票,灯亮表示邮票售出,用开关分别模拟1角、5角和1元硬币投入,用发光二极管分别代表找回的剩余的硬币,每次只能售出一枚邮票,当所投硬币达到或超过购买者所选面值时,售出一枚邮票,并找回剩余的硬币,回到初始状态;当所投硬币值不足面值时,可以通过一个复位键退回所投硬币,回到初始状态。

 

EDA

实验设计报告

 

题目:

自动售邮票机的控制电路设计

班级:

姓名:

指导教师:

完成时间:

2011-5-30

 

1、设计目标与要求

用两个发光二极管分别模拟售出面值为6角和8角的邮票,购买者可以通过开关选择一种一种面值的邮票,灯亮表示邮票售出,用开关分别模拟1角、5角和1元硬币投入,用发光二极管分别代表找回的剩余的硬币,每次只能售出一枚邮票,当所投硬币达到或超过购买者所选面值时,售出一枚邮票,并找回剩余的硬币,回到初始状态;当所投硬币值不足面值时,可以通过一个复位键退回所投硬币,回到初始状态。

 

2、设计方案

1、整体方框图

 

售出邮票

2、设计原理

利用状态机模拟输入累加的钱的总数,通过判决电路对输入的钱的总值进行判断,根据判断结果做出售票、找零、复位等相应的动作。

而对状态机得应用应注意其设计步骤:

a.逻辑抽象。

分析给定的逻辑问题,搞清楚输入和输出,通常取原因或者条件为输入,结果为输出。

然后定义输入输出逻辑状态和每个电路状态的含义,并对电路各个状态进行排序和它们之间的转换关系搞清楚。

这个过程非常需要严谨务实的作风,因为定义电路的状态的优劣会影响你的整个设计。

如果大方向都没有搞好,接下来的设计会变得艰难,甚至走入死角。

到时候又回过头来重新定义分析。

b.通过从实际问题分析出来的时序问题,通过画出状态图一目了然搞清楚它们之间的转换关系。

并对状态图进行化简优化。

对在相同的输入下有相同输出,并转换到同样一个次态的。

要进行合并,这样设计出来的状态机会更简单,高效。

3、设计思路

利用状态机,分别模拟所输入的钱的累积值,根据输入的钱的面值的不同,进入不同的次态,在各个不同的状态下,又通过比较所输入的钱的总值与所选邮票的面值,做出售出邮票并找出相应的零钱。

在下述实验原理中,进程一为脉冲发生电路,不断的通过脉冲变化来扫描是否有相应的输入。

进程二是状态转换,将次态的值重新付给现态,不断的改变现有状态。

进程三中,首先判断了是选择的何种面值的邮票,而且在复位信号没有被按下的情况下对所售面值为六毛的邮票进行了分析处理,从刚开始输入为零时,根据输入不同的面值的钱来判断下一个状态是什么,并且对在每个相应状态下应该做什么进行了指明,例如如果刚开始输入了一毛,则由初始状态转到输入了一毛的这个状态,如果此时继续输入钱,根据输入的面值进入下一个对应状态,而如果此时按下复位信号,则找出这一毛钱,当然这时是不会售出邮票的,同时现态恢复为初始状态

在选购六毛邮票的情况下,设投币初始状态为ST0,如果投入一枚一毛硬币为(累积一毛)ST1,如果投入一枚五毛硬币为(累积五毛)ST5,如果投入一枚一元硬币则输出一枚邮票并且找零四毛且次态重新定义为初始状态ST0;在ST1状态下如果再次输入一枚一毛硬币(累计两毛)为ST2,如果投入一枚五毛硬币(累计六毛)则输出一枚邮票且次态重新定义为初始状态ST0,如果投入一枚一元硬币(累计一块一)则输出一枚邮票并且找零五毛且次态重新定义为初始状态ST0;在ST2状态下如果再次输入一枚一毛硬币(累计三毛)为ST3,如果投入一枚五毛硬币(累计七毛)则输出一枚邮票并且找零一毛且次态重新定义为初始状态ST0,如果投入一枚一元硬币(累计一块二)则输出一枚邮票并且找零六毛且次态重新定义为初始状态ST0;在ST3状态下如果再次输入一枚一毛硬币(累计四毛)为ST4,如果投入一枚五毛硬币(累计八毛)则输出一枚邮票并且找零两毛且次态重新定义为初始状态ST0,如果投入一枚一元硬币(累计一块三)则输出一枚邮票并且找零七毛且次态重新定义为初始状态ST0;在ST4状态下如果再次输入一枚一毛硬币(累计五毛)为ST5,如果投入一枚五毛硬币(累计九毛)则输出一枚邮票并且找零三毛且次态重新定义为初始状态ST0,如果投入一枚一元硬币(累计一块四)则输出一枚邮票并且找零八毛且次态重新定义为初始状态ST0;在ST5状态下如果再次输入一枚一毛硬币(累计六毛)则输出一枚邮票并且态重新定义为初始状态ST0,如果投入一枚五毛硬币(累计一元)则输出一枚邮票并且找零四毛且次态重新定义为初始状态ST0,如果投入一枚一元硬币(累计一块五)则输出一枚邮票并且找零九毛且次态重新定义为初始状态ST0。

如果选择的邮票面值为八毛,七基本原理和六毛面值邮票的一样,在这里就不赘述了。

如果在累计钱数小于邮票面值的情况下按下复位键,这时找零端口的输出为此时的钱的总和,能够实现退钱是通过在每个状态下定义了两个找零信号,在为按复位键的情况下是将信号SIG_ZHAO赋值给找零信号端口,而在按下复位键的情况下,找零信号端口的输出为ZHAORE这个信号的值,而这两个信号的值在不同状态下有相应的不同的值,根据以上思路我们便可以进行程序的编写了。

4实验程序

LIBRARYIEEE;

USEZIDONGIS

PORT(RESET:

INSTD_LOGIC;--复位信号

CLK,LIU,BA:

INSTD_LOGIC;--

INYM,INWM,INYY:

INSTD_LOGIC;--钱输入端口

YOU:

OUTSTD_LOGIC;--邮票出口

ZHAO:

OUTSTD_LOGIC_VECTOR(3DOWNTO0));--找钱出口

ENDZIDONG;

ARCHITECTUREBEHAVOFZIDONGIS

TYPESTATESIS(ST0,ST1,ST2,ST3,ST4,ST5,ST6,ST7);--状态定义

SIGNALYIMAO,WUMAO,YIKUAI:

STD_LOGIC;--钱输入信号

SIGNALSIG_YOU:

STD_LOGIC;--输出对应信号

SIGNALSIG_ZHAO:

STD_LOGIC_VECTOR(3DOWNTO0);--找零对应信号

SIGNALZHAORE:

STD_LOGIC_VECTOR(3DOWNTO0);--复位时的找零

SIGNALCURRENT_STATE:

STATES;--现态

SIGNALNEXT_STATE:

STATES;--次态

BEGIN

P1:

PROCESS(CLK)--将输入送相应的信号

BEGIN

IFCLK'EVENTANDCLK='1'THEN

YIMAO<=INYM;

WUMAO<=INWM;

YIKUAI<=INYY;

ENDIF;

ENDPROCESSP1;

p2:

PROCESS(RESET,CLK)--次态给现态

BEGIN

IFRESET='1'THEN

CURRENT_STATE<=ST0;

ELSIFCLK'EVENTANDCLK='1'THEN

CURRENT_STATE<=NEXT_STATE;

ENDIF;

ENDPROCESSp2;

p3:

PROCESS(CLK,CURRENT_STATE,NEXT_STATE,YIMAO,WUMAO,YIKUAI)--状态转换

BEGIN

IFRESET='1'THENSIG_ZHAO<=ZHAORE;NEXT_STATE<=ST0;--复位找钱

ELSIFLIU='1'THEN

CASECURRENT_STATEIS

WHENST0=>ZHAORE<="0000";--状态S0

IFYIMAO='1'THEN--输入1毛

SIG_YOU<='0';--不出邮票

SIG_ZHAO<="0000";--不找钱

NEXT_STATE<=ST1;--次态为ST1

ELSIFWUMAO='1'THEN--输入5毛

SIG_YOU<='1';--出邮票

SIG_ZHAO<="0000";--不找钱

NEXT_STATE<=ST5;--次态为ST5

ELSIFYIKUAI='1'THEN--输入1块

SIG_YOU<='1';--出邮票

SIG_ZHAO<="0100";--找4毛

NEXT_STATE<=ST0;--次态为ST0

ELSE

SIG_YOU<='0';

SIG_ZHAO<="0000";--不输入都不变

NEXT_STATE<=ST0;

ENDIF;

WHENST1=>ZHAORE<="0001";

IFYIMAO='1'THEN

SIG_YOU<='0';

SIG_ZHAO<="0000";

NEXT_STATE<=ST2;

ELSIFWUMAO='1'THEN

SIG_YOU<='1';

SIG_ZHAO<="0000";

NEXT_STATE<=ST0;

ELSIFYIKUAI='1'THEN

SIG_YOU<='1';

SIG_ZHAO<="0101";

NEXT_STATE<=ST0;

ELSE

SIG_YOU<='0';

SIG_ZHAO<="0000";

NEXT_STATE<=ST1;

ENDIF;

WHENST2=>ZHAORE<="0010";

IFYIMAO='1'THEN

SIG_YOU<='0';

SIG_ZHAO<="0000";

NEXT_STATE<=ST3;

ELSIFWUMAO='1'THEN

SIG_YOU<='1';

SIG_ZHAO<="0001";

NEXT_STATE<=ST0;

ELSIFYIKUAI='1'THEN

SIG_YOU<='1';

SIG_ZHAO<="0110";

NEXT_STATE<=ST0;

ELSE

SIG_YOU<='0';

SIG_ZHAO<="0000";

NEXT_STATE<=ST2;

ENDIF;

WHENST3=>ZHAORE<="0011";

IFYIMAO='1'THEN

SIG_YOU<='0';

SIG_ZHAO<="0000";

NEXT_STATE<=ST4;

ELSIFWUMAO='1'THEN

SIG_YOU<='1';

SIG_ZHAO<="0010";

NEXT_STATE<=ST0;

ELSIFYIKUAI='1'THEN

SIG_YOU<='1';

SIG_ZHAO<="0111";

NEXT_STATE<=ST0;

ELSE

SIG_YOU<='0';

SIG_ZHAO<="0000";

NEXT_STATE<=ST3;

ENDIF;

WHENST4=>ZHAORE<="0100";

IFYIMAO='1'THEN

SIG_YOU<='0';

SIG_ZHAO<="0000";

NEXT_STATE<=ST5;

ELSIFWUMAO='1'THEN

SIG_YOU<='1';

SIG_ZHAO<="0011";

NEXT_STATE<=ST0;

ELSIFYIKUAI='1'THEN

SIG_YOU<='1';

SIG_ZHAO<="1000";

NEXT_STATE<=ST0;

ELSE

SIG_YOU<='0';

SIG_ZHAO<="0000";

NEXT_STATE<=ST4;

ENDIF;

WHENST5=>ZHAORE<="0101";

IFYIMAO='1'THEN

SIG_YOU<='1';

SIG_ZHAO<="0000";

NEXT_STATE<=ST0;

ELSIFWUMAO='1'THEN

SIG_YOU<='1';

SIG_ZHAO<="0100";

NEXT_STATE<=ST0;

ELSIFYIKUAI='1'THEN

SIG_YOU<='1';

SIG_ZHAO<="1001";

NEXT_STATE<=ST0;

ELSE

SIG_YOU<='0';

SIG_ZHAO<="0000";

NEXT_STATE<=ST5;

ENDIF;

WHENOTHERS=>NULL;--其他状态空操作

ENDCASE;

ELSIFBA='1'THEN--选择8毛的邮票

CASECURRENT_STATEIS

WHENST0=>ZHAORE<="0000";--状态S0

IFYIMAO='1'THEN--输入1毛

SIG_YOU<='0';--不出邮票

SIG_ZHAO<="0000";--不找钱

NEXT_STATE<=ST1;--次态为ST1

ELSIFWUMAO='1'THEN--输入5毛

SIG_YOU<='0';--不出邮票

SIG_ZHAO<="0000";--不找钱

NEXT_STATE<=ST5;--次态为ST5

ELSIFYIKUAI='1'THEN--输入1块

SIG_YOU<='1';--出邮票

SIG_ZHAO<="0010";--找2毛

NEXT_STATE<=ST0;--次态为ST0

ELSE

SIG_YOU<='0';

SIG_ZHAO<="0000";--不输入都不变

NEXT_STATE<=ST0;

ENDIF;

WHENST1=>ZHAORE<="0001";

IFYIMAO='1'THEN

SIG_YOU<='0';

SIG_ZHAO<="0000";

NEXT_STATE<=ST2;

ELSIFWUMAO='1'THEN

SIG_YOU<='0';

SIG_ZHAO<="0000";

NEXT_STATE<=ST6;

ELSIFYIKUAI='1'THEN

SIG_YOU<='1';

SIG_ZHAO<="0011";

NEXT_STATE<=ST0;

ELSE

SIG_YOU<='0';

SIG_ZHAO<="0000";

NEXT_STATE<=ST1;

ENDIF;

WHENST2=>ZHAORE<="0010";

IFYIMAO='1'THEN

SIG_YOU<='0';

SIG_ZHAO<="0000";

NEXT_STATE<=ST3;

ELSIFWUMAO='1'THEN

SIG_YOU<='0';

SIG_ZHAO<="0000";

NEXT_STATE<=ST7;

ELSIFYIKUAI='1'THEN

SIG_YOU<='1';

SIG_ZHAO<="0100";

NEXT_STATE<=ST0;

ELSE

SIG_YOU<='0';

SIG_ZHAO<="0000";

NEXT_STATE<=ST2;

ENDIF;

WHENST3=>ZHAORE<="0011";

IFYIMAO='1'THEN

SIG_YOU<='0';

SIG_ZHAO<="0000";

NEXT_STATE<=ST4;

ELSIFWUMAO='1'THEN

SIG_YOU<='1';

SIG_ZHAO<="0000";

NEXT_STATE<=ST0;

ELSIFYIKUAI='1'THEN

SIG_YOU<='1';

SIG_ZHAO<="0101";

NEXT_STATE<=ST0;

ELSE

SIG_YOU<='0';

SIG_ZHAO<="0000";

NEXT_STATE<=ST3;

ENDIF;

WHENST4=>ZHAORE<="0100";

IFYIMAO='1'THEN

SIG_YOU<='0';

SIG_ZHAO<="0000";

NEXT_STATE<=ST5;

ELSIFWUMAO='1'THEN

SIG_YOU<='1';

SIG_ZHAO<="0001";

NEXT_STATE<=ST0;

ELSIFYIKUAI='1'THEN

SIG_YOU<='1';

SIG_ZHAO<="0110";

NEXT_STATE<=ST0;

ELSE

SIG_YOU<='0';

SIG_ZHAO<="0000";

NEXT_STATE<=ST4;

ENDIF;

WHENST5=>ZHAORE<="0101";

IFYIMAO='1'THEN

SIG_YOU<='0';

SIG_ZHAO<="0000";

NEXT_STATE<=ST6;

ELSIFWUMAO='1'THEN

SIG_YOU<='1';

SIG_ZHAO<="0010";

NEXT_STATE<=ST0;

ELSIFYIKUAI='1'THEN

SIG_YOU<='1';

SIG_ZHAO<="0111";

NEXT_STATE<=ST0;

ELSE

SIG_YOU<='0';

SIG_ZHAO<="0000";

NEXT_STATE<=ST5;

ENDIF;

WHENST6=>ZHAORE<="0110";

IFYIMAO='1'THEN

SIG_YOU<='0';

SIG_ZHAO<="0000";

NEXT_STATE<=ST7;

ELSIFWUMAO='1'THEN

SIG_YOU<='1';

SIG_ZHAO<="0011";

NEXT_STATE<=ST0;

ELSIFYIKUAI='1'THEN

SIG_YOU<='1';

SIG_ZHAO<="1000";

NEXT_STATE<=ST0;

ELSE

SIG_YOU<='0';

SIG_ZHAO<="0000";

NEXT_STATE<=ST6;

ENDIF;

WHENST7=>ZHAORE<="0111";

IFYIMAO='1'THEN

SIG_YOU<='1';

SIG_ZHAO<="0000";

NEXT_STATE<=ST0;

ELSIFWUMAO='1'THEN

SIG_YOU<='1';

SIG_ZHAO<="0100";

NEXT_STATE<=ST0;

ELSIFYIKUAI='1'THEN

SIG_YOU<='1';

SIG_ZHAO<="1001";

NEXT_STATE<=ST0;

ELSE

SIG_YOU<='0';

SIG_ZHAO<="0000";

NEXT_STATE<=ST7;

ENDIF;

WHENOTHERS=>NULL;--其他状态空操作

ENDCASE;

ENDIF;

ENDPROCESSp3;

p4:

PROCESS(CLK,SIG_YOU,SIG_ZHAO)--将输出信号送输出端

BEGIN

IFCLK'EVENTANDCLK='1'THEN

YOU<=SIG_YOU;

ZHAO<=SIG_ZHAO;

ENDIF;

ENDPROCESSp4;

ENDBEHAV;

三、电路的连接调试与问题

在程序编写完毕后按照编译仿真后的下载图正确连接电路,通过高低电平开关模拟钱的输入,通过在实验箱上的模拟仿真,发现在输入端存在输入一次而模拟机却扫描到有多次输入这一问题,后来我们将扫描脉冲与输入端的脉冲进行了分离,也就是定义了两个脉冲,扫描脉冲依旧频率很快,不断对输入信号进行扫描,另外将输入端得脉冲频率调低,经过这样的改进有所进步,不再是输入一次而被多次的扫描,但是这样的改进也并没有彻底解决问题,经过我们的讨论我们发现,我们的设计最适合弹片式的输入端,那样在一次输入的情况下,弹片只可能被压下一次,这样脉冲也只能在弹片被压下的那一刻扫描到有输入存在,在很短的时间内弹片又恢复原有状态,这样就避免了一次输入被误认为有多次输入的这一问题。

四、自我评价与心得体会

这是一次有意义的EDA实验设计课题,也是一次综合性很强的实验,通过这次实验课题设计,不仅加深了我们对EDA设计思路的理解,更重要的是对VHDL语言以及其中的状态机的设计与应用有了更进一步的了解,使我们的设计思路有了进一步的提高,而且进一步的回顾并巩固了以前所学的知识。

也让我们尝到一步步将问题克服收获到成功的喜悦,坚定了我们克服困难解决问题的意志,在这一次实验中,我们小组也充分发挥了小组的力量,认识到合作的精神所在,通过集体的合作,培养了我们每个人实际动手、分析问题、解决问题的能力,让我们每个人都受益匪浅!

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 求职职场 > 简历

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2