- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
PAGE1 / NUMPAGES1
自动售货机设计
一、实验目的
1、实现自动售货机的功能;
2、运用状态机原理设计。
二、实验内容
?这种自动售货机只销售听装与瓶装两种罐装可哀,售价均为1.5元。顾客只能通过两个例外的投币口分别投入五角的硬币或者一元硬币。一次交易可以买多罐,且自动找零。若钱不够,则自动退币。并且在购买之前只要一按下取消键cancel就马上无条件退币。
?此机器的硬件示范电路,以二個按键电路代替二個投币孔,以两个八段数码管显示投币数量,再以4hz闪烁之led來显示退币,以两个八段数码管显示退币数量。此机器就采用1024hz的系统clock信号同步所有的买卖行为,并且作为弹跳消除电路的基准参考脉冲。这个电路虽然是纯数位电路但是可作为一个自动售货机的控制核心电路加上驱动器就可以用来驱动机械装置。
?下图为自动售货机的操作盘,有两个投币按钮,分別为五角硬币与一元硬币。每投入一个硬币就将下方的LED指示灯号点亮到详尽数额,并且最高上限只能接受9.5元的金额。另外,每一种饮料商品都配置3个灯号(分别显示存货、选择数量与出货等三个信息)与一个选择购买的按钮。每按一次选择购买按钮,选择数量显示加1,并且存货自动计算,若没有货存,则货存灯灭,一旦选择商品与投币金额足够,就需要按下确定要购买的按键;当然也可以后悔不买而按下取消键,让机器退回已经投入的硬币。如若投入的钱币不足以购所有的饮料,则退币。退币时货存更改为原状态。
三、程序设计
module auto_vending(clk,cel_cola,cel_diet,reset,coin_ten,coin_five,ok_buy,cancel_buy,//输入led_cola_ok,led_diet_ok,led_buy,led_cancel,led_cola_out,led_diet_out,shu_cola_sel,shu_diet_sel,
led_display,shu_money_return,Hex);//输出
input clk,cel_cola,cel_diet,reset,coin_ten,coin_five,ok_buy,cancel_buy;
output led_cola_ok,led_diet_ok,//表示还有存货
led_buy,led_cancel,//表示选择购买和取消购买
led_cola_out,led_diet_out;//显示表示已出货
//led_return;//每四秒闪烁一次代表被退之硬币
wire [10:0]led_cola_sel,led_diet_sel;////选中饮料的数量
output [6:0]shu_cola_sel,shu_diet_sel;
output [13:0]led_display;//表示投币的金额
output [13:0]shu_money_return;
wire ok,cancel,money_ok;//在ok_or_cancel出来的
//wire [10:0]no_diet,no_cola;//售货机内的饮料数量
wire [10:0]money_return;
//reg [10:0]no_sock_cola,no_sock_diet;
wire [10:0]total_count,total_consum;
output [13:0]Hex;
assign Hex=14“b111_111_111;
parameter Idle = 2“d0,
S1 = 2“d1,
S2 = 2“d2;
reg [1:0]state;
reg clk_1;
reg rst;
reg [29:0]count;
always@(posedge clk)//sheng cheng 1s de shi zhong
begin
if(count==30“d25000)
begin
clk_1=~clk_1;
count=0;
end
else
count=count+1;
end
always@(posedge clk_1 or negedge reset)
if(!reset)
begin
state =Idle;
rst=0;
end
else
case (state)
Idle:
begin
rst=0;
state=S1;
end
S1:begin
rst=1;
if(ok_buy||cancel_buy)
state=Idle;
end
endcase
wire buyok;
toubi u1(rst,clk,coin_five,coin_ten,led_display,total_count);
select_drink u2(clk,rst,cel_cola,c
文档评论(0)