资源描述:
《自动售货机设计verilog》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、自动售货机设计一、实验目的1、实现自动售货机的功能;2、运用状态机原理设计。二、实验内容n这种自动售货机只销售听装与瓶装两种罐装可乐,售价均为1.5元。顾客只能通过两个不同的投币口分别投入五角的硬币或者一元硬币。一次交易可以买多罐,且自动找零。若钱不够,则自动退币。并且在购买之前只要一按下取消键cancel就马上无条件退币。n此机器的硬件示范电路,以二個按键电路代替二個投币孔,以两个八段数码管显示投币数量,再以4hz闪烁之led來显示退币,以两个八段数码管显示退币数量。此机器就采用1024hz的系统clock信号同步所有的买卖行为,并且作为弹跳消除电
2、路的基准参考脉冲。这个电路虽然是纯数位电路但是可作为一个自动售货机的控制核心电路加上驱动器就可以用来驱动机械装置。n下图为自动售货机的操作盘,有两个投币按钮,分別为五角硬币与一元硬币。每投入一个硬币就将下方的LED指示灯号点亮到具体数额,并且最高上限只能接受9.5元的金额。另外,每一种饮料商品都配置3个灯号(分别显示存货、选择数量与出货等三个信息)与一个选择购买的按钮。每按一次选择购买按钮,选择数量显示加1,并且存货自动计算,若没有货存,则货存灯灭,一旦选择商品与投币金额足够,就需要按下确定要购买的按键;当然也可以后悔不买而按下取消键,让机器退回已经
3、投入的硬币。如若投入的钱币不足以购所有的饮料,则退币。退币时货存更改为原状态。三、程序设计moduleauto_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);//输出inputclk,cel
4、_cola,cel_diet,reset,coin_ten,coin_five,ok_buy,cancel_buy;outputled_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;ou
5、tput[13:0]led_display;//表示投币的金额output[13:0]shu_money_return;wireok,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;assignHex=14'b111_111_111_1
6、1111;parameterIdle=2'd0,S1=2'd1,S2=2'd2;reg[1:0]state;regclk_1;regrst;reg[29:0]count;always@(posedgeclk)//shengcheng1sdeshizhongbeginif(count==30'd25000000)beginclk_1<=~clk_1;count<=0;endelsecount<=count+1;endalways@(posedgeclk_1ornegedgereset)if(!reset)beginstate<=Idle;rst<=0;
7、endelsecase(state)Idle:beginrst<=0;state<=S1;endS1:beginrst<=1;if(ok_buy
8、
9、cancel_buy)state<=Idle;endendcasewirebuyok;toubiu1(rst,clk,coin_five,coin_ten,led_display,total_count);select_drinku2(clk,rst,cel_cola,cel_diet,/*no_cola,no_diet,*/led_cola_sel,led_diet_sel,/*led_cola_ok,
10、led_diet_ok,*/total_consum);ok_or_cancelu3(clk,rst,ok_