Verilog语言的自动售货机.docxVIP

  • 49
  • 0
  • 约4.86千字
  • 约 15页
  • 2020-03-09 发布于江西
  • 举报
Verilog 课程设计 ------自动售货机 一、实验目的 设计一个自动售货机,此机能出售 1 元、2 元、5 元、10 元的四种商品。 出售哪种商品可有顾客按动相应的一个按键即可,并同时用数码管显示出此商 品的价格。 顾客投入硬币的钱数也是有 1 元、2 元、5 元、10 元四种,但每次只能投 入其中的一种硬币,此操作通过按动相应的一个按键来模拟,并同时用数码管 将投币额显示出来。 顾客投币后,按一次确认键,如果投币额不足时则报警,报警时间 3 秒 (可用点阵模拟报警)。如果投币额足够时自动送出货物(送出的货物用相应不 同的指示灯显示来模拟),同时多余的钱应找回,找回的钱数用数码管显示出来。 顾客一旦按动确认键 3 秒后,自动售货机即可自动恢复到初始状态,此 时才允许顾客进行下一次购货操作。 售货机还应具有供商家使用的累加卖货额的功能,累加的钱数要用数码管 显示,显示 2 位即可。此累加器只有商家可以控制清零。 此售货机要设有一个由商家控制的整体复位控制。 二、实验原理 首先应搭建识别模块,将代表每种硬币的拨码开关信号转变为 BCD 码进 行累加。当累加完成后,将累加结果与代表商品的 BCD 码相比较。如果大于 售出商品并对两个 BCD 码求差,求差的结果作为找钱信号;如果等于直接售 出商品;小于则报警。至于统计卖钱额,则是对售出的商品进行累加。 三、分析与设计思路 可分为以下模块 1)分频模块。 计时模块。用于控制确认键后到恢复初始化的 3 秒计时。 识别模块。将每种硬币、货品的拨码开关信号转变为编码 。 清零模块 。用于销售总额的清零。 初始化模块 控制模块。用于数据读入、投币不足、交易成功状态的控制及转化。 显示模块 四、程序代码段 module autoseller(clk,g,m,yes,read,zero,led_dig,led_seg,led_c,led_r,led); input clk,yes,read,zero;//确定键,商家读取键,清零键 input [3:0] g , m; //货品及投币选择键 output led_dig,led_seg,led_c,led_r,led;//数码管输出及点阵输出 reg f_100;//分频时钟 reg f_1; reg [3:0] goods,money,led,change,g_c; integer r,a,b, a_tmp2,a_tmp1; integer ret=0;//用于控制各状态间的转换 reg [9:0]count; reg [7:0] led_c,led_r,led_dig,led_seg; reg [1:0]state; integer i; reg x; always @ (posedge clk) //分频模块 begin if(a_tmp2==999) begin f_100=~f_100; a_tmp2=0; end else a_tmp2=a_tmp2+1; end always @ (posedge clk) begin if(a_tmp1==9999999) begin f_1=~f_1; a_tmp1=0; end else a_tmp1=a_tmp1+1; end always @ (posedge f_1) begin if(ret!=0) //用于按确认键后的计时 begin a=a+1; end else begin a=0; end end always @ (posedge f_100) begin if(zero==0) //清零 =0; end if(read!=0) //非商家读取模式(普通读写模式) begin // 识别模块 case(g) //表每种货品的拨码开关信号转变为编码 4b0001:begin goods=1;end 4b0010:begin goods=2;end 4b0100:begin goods=5;end 4b1000:begin goods=10;end :begin goods=0;end case(m) //表每种硬币的拨码开关信号转变为编码 4b0001:begin money=1;end 4b0010:begin money=2;end 4b0100:begin money=5;end 4b1000:begin money=10;end :begin money=0;end if(a==3) //初始化 begin ret=0; led=4b0000; led_c=8b0000_0000;led_r=8b1111_1111; x=0; end if(yes==0) //按确定键 begin if(moneygoods) //金钱不足 begin change=0; r

文档评论(0)

1亿VIP精品文档

相关文档