EDA课程设计-自动售货机控制系统.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
电子课程设计 ——自动售货机控制系统的设计 专业、 班级: 通信姓名: 学号 指 导 老 师: 2 0 1 5 年 1 2 月 绪论 1 一、设计任务与要求 1 二、总体框图 1 框图 1 设计思路 1 三、器件选择 1 1 1、分频器模块 1 2、数码管显示模块 1 3、取货模块 1 五、总体设计电路图 1 1、总体设计电路原理图 1 2、管脚分配表 1 3、仿真图 1 1 七、参考文献 1 自动售货机控制系统的设计 能够完成对货物信息的存储、进程控制、硬币处理、余额计算和显示等功能。 1 自动售货机可以出售四种货物,每种商品的数量和单价在初始化时设定,并存储在存储器中。 2用户可以用硬币进行购物,通过按键进行选择;售货时,能够根据用户输入的钱币数来判断钱币是否够,钱币足够时,则根据顾客要求自动售货;钱币不够时,则给出提示并推出;能够自动计算出应找钱币余额,库存数量并显示。 2 采用模拟开关分别模拟5角和1元的硬币来进行购物,并通过按键来选择商品。 3 系统能够根据用户输入的硬币,判断钱币是否够,当所投硬币达到或超过购买者所选面值时,则根据顾客的要求自动退货,并找回剩余的硬币,然后回到初始状态。当所投硬币不够时,则给出提示,并通过一个复位键退回所投硬币,然后回到初始状态。 二、总体框图 框图 设计思路 本系统由对外部投入硬币的检测来产生脉冲,并对产生的脉冲进行计数,其中a 表示投入的是0.5元的硬币,b 表示投入的是1元的硬币,每次根据投入的硬币不同而分别计数,并将投入的总金额用两位数码管显示出来,当达到了交易金额时,out产生一个正脉冲,此正脉冲控制闸门打开,饮料掉出来,当超出了交易金额,高位数码管显示找零金额找零,3秒后自动复位。 三、器件选择 分频器模块verilog设计程序如下: module fp(old_clk,clk); input old_clk; output reg clk; reg[19:0]k; always @(posedge old_clk) begin begin clk=~clk; //状态转换,从高电平跳到低电平,或从低电平跳到高电平 k=0; end else k=k+1; end endmodule 2、数码管显示模块 数码管显示模块程序如下: module xianshi(seg,sl,clk,reset,a,b,number_out,number_in); input clk,reset; input a,b; input [9:0]number_in; output[7:0]seg; output[3:0]sl; output[9:0]number_out; reg[7:0]segdat_reg; reg[7:0]seg_reg; reg[3:0]sl_reg,disp_dat; reg[1:0]count; reg[9:0]number; reg clk1; reg dot,dot1; //reg[3:0]sl; integer cnt=0; always@(posedge clk) begin if(cnt==25000) begin clk1=~clk1;cnt=0;end else begin cnt=cnt+1; end end always@(posedge clk1) begin count=count+1; end always@(posedge a or posedge b or posedge reset) begin if(reset)number=0; else number=a*5+b*10; end always@(count[1:0]) begin case(count[1:0]) 2b00:disp_dat=number%10; 2b01:begin disp_dat=number/10;dot=1b1;end 2b10:disp_dat=number_in%10; 2b11:begin disp_dat=number_in/10;dot1=1b1;end endcase case(count[1:0]) 2b00:sl_reg=4b1110; 2b01:sl_reg=4b1101; 2b10:sl_reg=4b1011; 2b11:sl_reg=4b0111; endcase end always@(disp_dat) begin if(dot)begin segdat_reg=8h80;dot=0;end if(dot1)begin segdat_reg=8h80;dot1=0;end case(disp_dat) 4h0:segdat_reg=8

您可能关注的文档

文档评论(0)

***** + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档