eda课程设计自动售货机的设计doc.docx

上传人:b****4 文档编号:4012376 上传时间:2023-05-06 格式:DOCX 页数:15 大小:18.99KB
下载 相关 举报
eda课程设计自动售货机的设计doc.docx_第1页
第1页 / 共15页
eda课程设计自动售货机的设计doc.docx_第2页
第2页 / 共15页
eda课程设计自动售货机的设计doc.docx_第3页
第3页 / 共15页
eda课程设计自动售货机的设计doc.docx_第4页
第4页 / 共15页
eda课程设计自动售货机的设计doc.docx_第5页
第5页 / 共15页
eda课程设计自动售货机的设计doc.docx_第6页
第6页 / 共15页
eda课程设计自动售货机的设计doc.docx_第7页
第7页 / 共15页
eda课程设计自动售货机的设计doc.docx_第8页
第8页 / 共15页
eda课程设计自动售货机的设计doc.docx_第9页
第9页 / 共15页
eda课程设计自动售货机的设计doc.docx_第10页
第10页 / 共15页
eda课程设计自动售货机的设计doc.docx_第11页
第11页 / 共15页
eda课程设计自动售货机的设计doc.docx_第12页
第12页 / 共15页
eda课程设计自动售货机的设计doc.docx_第13页
第13页 / 共15页
eda课程设计自动售货机的设计doc.docx_第14页
第14页 / 共15页
eda课程设计自动售货机的设计doc.docx_第15页
第15页 / 共15页
亲,该文档总共15页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

eda课程设计自动售货机的设计doc.docx

《eda课程设计自动售货机的设计doc.docx》由会员分享,可在线阅读,更多相关《eda课程设计自动售货机的设计doc.docx(15页珍藏版)》请在冰点文库上搜索。

eda课程设计自动售货机的设计doc.docx

eda课程设计自动售货机的设计doc

 

电子信息科学与技术专业课程设计任务书

 

学生姓名

 

题目

课题性质

 

指导教师

 

主要内容

 

任务要求

 

参考文献

 

审查意见

 

专业班级学号

 

自动售货机的设计

工程设计课题来源自拟课题

同组姓名

设计制作一个自动售货机,该自动售货机能完成货物信息存储、进程控制、硬

币处理、余额计算、显示等功能。

自动售货机可以售2种货物,每种货物的数量和单价在初始化时设入,在存储器中存储。

用户可以用硬币进行购物,按键进行选择。

系统根据用户输入的货币,判断钱币是否够,钱币足够则根据顾客

 

要求自动售货;钱币不够则给出提示并退出。

系统自动地计算出应找钱币余额、

库存数量并显示。

(提示:

钱数以5角为单位。

 

①根据设计题目要求编写相应程序代码

②对编写的VHDL程序代码进行编译和仿真

 

③总结设计内容,完成课程设计说明书

 

[1]焦素敏.EDA课程设计指导书.郑州:

河南工业大学,2008

[2]潘松,黄继业.EDA技术实用教程.北京:

科学出版社,2002

[3]王国栋,潘松等.VHDL实用教程.成都:

电子科技大学出版社,2000

[4]张亦华,延明.数字电路EDA入门.北京:

电子工业出版社,2003

 

[5]中国电子制作网网站

 

指导教师签字

 

教研室主任签字

2012年

2月20日

 

一.设计说明

根据要求可自动出售两种货物,本文设计的自动售货机可销售cola和

pepsi两种饮料:

售货机可识别1元和元的两种货币,在一次购买过程中,可购

买一个或多个商品,系统会自动计算所需钱数和找零的钱数并自动找零。

另外有

3个发光二极管、6个LCD数码管:

两个用来显示所需金额,两个用来显示已付

金额,两个用来显示找零数。

流程说明

本文设计的自动售货机当通电时,表示一次销售的开始。

顾客选择一种商品

或多种商品后就进入投币状态。

若不投币,则自动返回初始状态。

投币后,系统

自动计算所投钱数。

若投币够,则出货并找零。

若投币不够,如果顾客没有继续

投币,则退币并回到初始状态。

本系统的投币销售流程图如图所示:

 

开始

 

选择

 

投币

 

计算金额

 

综合〉物价

 

继续投币

 

出货找零

 

退币清零

 

结束

 

各模块说明

本文设计的自动售货机总体分三个模块:

总控模块,二进制译码模块、BCD

码译码模块。

总控模块:

总控模块是本系统最重要的模块,该模块大体有5个输入端口和

6个输出端口。

其输入端口包括clk、coin1(投入一元货币)、coin5(投入元货币)、

cola(选择cola)、pepsi(选择pepsi),输出端口有paid(已投入多少钱)、needed

(还需多少钱)moneyout(找零)、success(灯亮表示交易成功)、failure(灯亮

表示交易失败)、showmoneyout(灯亮表示正在找零)。

该模块实现了本系统最

重要的交易过程,包括选择商品、投入货币,计算剩余金额,找零出货等。

二进制译码模块:

该模块有一个输入端口和两个输出端口。

输入端口是一个

8位的二进制数输出端口bcd0、bcd1是两个4位的BCD码。

该模块的主要的功

能是实现将主控模块输出的二进制数(paid、needed、moneyout)转换成BCD

码,以便输出到七段数码管上显示出来。

该模块的原理是将一个8位的二进制转

换成2个4位的BCD码,分为高四位和低四位。

BCD码译码模块:

该模块有一个输入端口和一个输出端口

 

程序设计

主控模块完整程序如下:

Libraryieee;

useshouhuojiis

port(clk:

instd_logic;

coin1:

instd_logic;

coin5:

instd_logic;

cola:

instd_logic;

 

pepsi:

instd_logic;

paid:

outstd_logic_vector(7downto0);

needed:

outstd_logic_vector(7downto0);

success:

outstd_logic;

failure:

outstd_logic;

showmoneyout:

outstd_logic;

moneyout:

outstd_logic_vector(7downto0));

endshouhuoji;

architecturebehavofshouhuojiis

typestate_typeis(qa,qb,qe,qc,qg,qd,qf);--定义七个状态signalcurrent_state:

state_type:

=qa;signalq:

integerrange0to100;

begin

process(clk)

variablepaidtemp:

std_logic_vector(7downto0);--定义变量variableneededtemp:

std_logic_vector(7downto0);variablebackmoney:

std_logic_vector(7downto0);variablepricetemp:

std_logic_vector(7downto0);begin

 

ifclk'eventandclk='1'then

casecurrent_stateis

whenqa=>paidtemp:

="00000000";neededtemp:

="00000000";backmoney:

="00000000";pricetemp:

="00000000";q<=0;showmoneyout<='0';moneyout<="00000000";paid<="00000000";needed<="00000000";failure<='0';success<='0';ifcola='1'orpepsi='1'thencurrent_state<=qb;

ifcola='1'thenpricetemp:

=pricetemp+"00001111";

neededtemp:

=pricetemp;

 

Else

 

pricetemp:

=pricetemp+"00010100";

neededtemp:

=pricetemp;

 

endif;

endif;

paid<=paidtemp;

needed<=neededtemp;

whenqb=>ifcoin1='1'orcoin5='1'then

ifcoin1='1'thenpaidtemp:

=paidtemp+"00001010";

else

paidtemp:

=paidtemp+"00000101";

endif;

 

ifpaidtemp>=pricetempthenbackmoney:

=paidtemp-pricetemp;neededtemp:

="00000000";current_state<=qd;

 

elseneededtemp:

=pricetemp-paidtemp;backmoney:

="00000000";current_state<=qc;q<=0;

 

endif;

paid<=paidtemp;

needed<=neededtemp;

endif;

ifq<8thenq<=q+1;

ifcola='1'orpepsi='1'thenq<=0;

ifcola='1'thenpricetemp:

=pricetemp+"00001111";

neededtemp:

=neededtemp+"00001111";

else

pricetemp:

=pricetemp+"00010100";

neededtemp:

=neededtemp+"00010100";

 

endif;

paid<=paidtemp;

needed<=neededtemp;

endif;

elsecurrent_state<=qe;q<=0;

endif;

whenqe=>failure<='1';

ifq<4thenq<=q+1;

elsecurrent_state<=qa;q<=0;

endif;

whenqc=>ifcoin1='1'orcoin5='1'then

ifcoin1='1'thenpaidtemp:

=paidtemp+"00001010";

else

paidtemp:

=paidtemp+"00000101";

endif;

ifpaidtemp>=pricetempthen

 

backmoney:

=paidtemp-pricetemp;

neededtemp:

="00000000";current_state<=qd;

 

elseneededtemp:

=pricetemp-paidtemp;backmoney:

="00000000";

current_state<=qc;

endif;

paid<=paidtemp;

needed<=neededtemp;

endif;

ifcoin1/='1'andcoin5/='1'then

ifq<10thenq<=q+1;

elsecurrent_state<=qg;

endif;

 

elseq<=0;

endif;

whenqg=>failure<='1';

showmoneyout<='1';moneyout<=paidtemp;

current_state<=qf;q<=0;

success<='0';

whenqd=>success<='1';

ifbackmoney>"00000000"thenshowmoneyout<='1';moneyout<=backmoney;

endif;

current_state<=qf;q<=0;

whenqf=>ifq<4thenq<=q+1;

elsecurrent_state<=qa;q<=0;

endif;

endcase;

else

 

endif;

endprocess;

endbehav;

 

BCD译码模块完整程序如下:

Libraryieee;

usecode1is

port(

b:

instd_logic_vector(7downto0);

 

bcd0:

outstd_logic_vector(3downto0);

bcd1:

outstd_logic_vector(3downto0)

);

endcode1;

architectureoneofcode1is

begin

process(b)

begin

casebis

when"00000000"=>bcd0<="0000";bcd1<="0000";--译码“0”;when"00000001"=>bcd0<="0001";bcd1<="0000";--译码“1”;when"00000010"=>bcd0<="0010";bcd1<="0000";--译码“2”;when"00000011"=>bcd0<="0011";bcd1<="0000";--译码“3”;when"00000100"=>bcd0<="0100";bcd1<="0000";--译码“4”;when"00000101"=>bcd0<="0101";bcd1<="0000";--译码“5”;when"00000110"=>bcd0<="0110";bcd1<="0000";when"00000111"=>bcd0<="0111";bcd1<="0000";when"00001000"=>bcd0<="1000";bcd1<="0000";when"00001001"=>bcd0<="1001";bcd1<="0000";when"00001010"=>bcd0<="0000";bcd1<="0001";when"00001011"=>bcd0<="0001";bcd1<="0001";when"00001100"=>bcd0<="0010";bcd1<="0001";when"00001101"=>bcd0<="0011";bcd1<="0001";when"00001110"=>bcd0<="0100";bcd1<="0001";when"00001111"=>bcd0<="0101";bcd1<="0001";when"00010000"=>bcd0<="0110";bcd1<="0001";when"00010001"=>bcd0<="0111";bcd1<="0001";when"00010010"=>bcd0<="1000";bcd1<="0001";when"00010011"=>bcd0<="1001";bcd1<="0001";

 

when"00010100"=>bcd0<="0000";bcd1<="0010";译码“20”

whenothers=>null;

endcase;

endprocess;

endone;

 

顶层模块完整程序如下:

libraryIEEE;

usetopis

Port(clk1:

instd_logic;

C1,C5,P1_5,P2:

instd_logic;

paid_lcd0,paid_lcd1,needed_lcd0,needed_lcd1,Mout_lcd0,Mout_lcd1:

out

std_logic_vector(3downto0);

s,f,showout:

outstd_logic);

endtop;

architectureoneoftopis

componentshouhuoji

port(clk:

instd_logic;

coin1:

instd_logic;

coin5:

instd_logic;

cola:

instd_logic;

pepsi:

instd_logic;

paid:

outstd_logic_vector(7downto0);

needed:

outstd_logic_vector(7downto0);

success:

outstd_logic;

failure:

outstd_logic;

showmoneyout:

outstd_logic;

moneyout:

outstd_logic_vector(7downto0)

 

);

endcomponent;

componentcode1

port(

b:

instd_logic_vector(7downto0);

bcd0:

outstd_logic_vector(3downto0);

bcd1:

outstd_logic_vector(3downto0)

 

);

endcomponent;

 

signalp,n,mo:

std_logic_vector(7downto0);

--signals1,s2,s3,s4,s5,s6:

std_logic_vector(3downto0);begin

u0:

shouhuoji--各模块连接

portmap(clk=>clk1,coin1=>C1,coin5=>C5,cola=>P1_5,pepsi=>P2,success=>s,failure=>f,showmoneyout=>showout,paid=>p,needed=>n,moneyout=>mo);

u1:

code1portmap(b=>p,bcd0=>paid_lcd0,bcd1=>paid_lcd1);

u2:

code1portmap(b=>n,bcd0=>needed_lcd0,bcd1=>needed_lcd1);

u3:

code1portmap(b=>mo,bcd0=>Mout_lcd0,bcd1=>Mout_lcd1);endone;

 

各模块的连接

 

各模块的连接如图所示:

 

售货机主控系统和译码器模块图

 

售货机顶层模块

 

2、1主控模块的仿真

 

上图表示顾客选择了pepsi饮料后,且投了2个一元的硬币。

Success为高电

平,代表售货机有饮料售出。

且余额为0.

 

上图表示顾客选择了pepsi饮料后,且投1个一元的硬币和一个元的硬币。

failure为高电平,代表售货机无饮料售出。

且余额为已投的金额,将钱退还给顾

客。

.

 

码译码的仿真

 

上图表示自动售货机的译码系统,上图表示将8位数字转换成4位BCD码。

 

文件的仿真

 

上图表示顾客选择了pepsi饮料后,且投了2个一元的硬币。

Success为高电平,代表售货机有饮料售出。

且余额为0.

 

上图表示顾客选择了pepsi饮料后,且投1个一元的硬币和一个元的硬币。

Failure为高电平,代表售货机无饮料售出。

Showout为退币指示灯。

.Mout_lcd0和Mout_lcd1,显示退币的金额。

Paided_lcd0和Paided_lcd1needed_lcd0和needed_lcd1分别显示已付金额和还需要的金额数。

 

3.下载验证

在无数次的调试与修改中,下载验证能够实现题目的要求

 

4.参考文献:

[1]焦素敏.EDA课程设计指导书.郑州:

河南工业大学,2008

[2]潘松,黄继业.EDA技术实用教程.北京:

科学出版社,2002

[3]王国栋,潘松等.VHDL实用教程.成都:

电子科技大学出版社,2000

[4]张亦华,延明.数字电路EDA入门.北京:

电子工业出版社,2003

 

[5]中国电子制作网网站

 

5.心得体会

自动售货机系统的设计经过一个星期的设计已经全部完成,能按预期的效果进行多次购买、找零出货、并且在数码管上显示出已投货币的金额、还需金额、找零,同时有指示灯提示交易成功、交易失败、正在找零。

在自动售货机系统的

3个模块中,最主要的是主控模块,其次的还有二进制译码模块和BCD码译码模块。

各模块完成后,将它们组合成完整的自动售货机系统。

在设计过程中还需改进的是。

本文所用的VHDL语言虽然语法规则与其他计算机高级语言如C语言在很多方面很类似,但它毕竟是硬件描述语言,其本质作用在于描述硬件,因而会受硬件环境的限制。

因此,为了达到设计的预期效果,在代码编写前,应做到对

硬件电路心中有数,不能一味的追求代码的完美,而应该已实现的硬件电路的性能优劣为标准。

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

当前位置:首页 > 自然科学 > 物理

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

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