VIVADO售货机verilog代码Nexys4开发板

名称:VIVADO售货机verilog代码Nexys4开发板(文末获取)

软件:VIVADO

语言:Verilog

代码功能:

要求如下

(1)售货机有两个进币孔,一个是输入硬币,一个是输入纸币,硬币的识别范围是1元的硬币,纸币的识别范围是5元,10元,20元,50元。乘客可以连续多次投入钱币。

(2)顾客可以选择的商品种类有16 种,分别为A11-A44;价格如下表所示

A11:3A12: 4A13:6A14:3

A21:10A22: 8A23:9A24: 7

A31: 4A32:6A33:15A34: 8

A41: 9A42: 4A43:5A44: 5

顾客可以通过输入商品的编号来实现商品的选择。比如依次按下2和1后,数码管显示商品A21的价格。

(1)顾客选择完商品后,可以选择需要的数量,数量为1-3件

(2)顾客可以继续选择商品及其数量,最多可选择两种商品。

(3)选择完货品,按确认键确认。如果没有按确认键,可以更改商品的种类和数量。

(4)系统计算并显示出所需金额。

(5)顾客此时可以投币,并且显示已经投币的总币值。当投币值达到或超过所需币值后,售货机出货,并扣除所需金额,并找出多余金额。

(6)找零时需要手动找零,按一次退一张纸币或硬币,钱币按从大到小的顺序退出。比如需找零46元,则需要按四次手动找零键,每次退出的分别是20元(纸币)、20元(纸币)、5元(纸币)、1元(硬币)。

在投币期间,顾客可以按取消键取消本次操作,可以按手动找零键退出硬币。如果没有退出,可以重新选择货品进行交易。

本代码已在Nexys4开发板验证,Nexys4开发板如下,其他开发板可以修改管脚适配:

nexys4_ddr开发板.png

部分代码展示:

//售货机
//空闲状态下,按下BTNR,进入商品1状态,设置SW567(种类第一位),和SW8910(种类第二位),选择种类。
//再设置SW11,12设置数量。然后按BTNL进入第二种商品的设置。
//进入商品2状态,设置SW567(种类第一位),和SW8910(种类第二位),选择种类。
//再设置SW11,12设置数量。
//再按BTNR进入投币状态。按键SW0~SW4对应金额。金额满足后自动出货,进入找零状态。
//按下BTNU找零
//按下BTND取消
module auto_sell(
input clk,//100MHz
input reset_p,//复位--BTNC
input goods_btn_in,//商品1/2按键--BTNL
input confirm_btn_in,//确认--BTNR
input change_btn_in,//找零按键--BTNU
input cancel_btn_in,//取消--BTND
input coin_1_in,//1元硬币--SW0
input notes_5_in,//5元纸币--SW1
input notes_10_in,//10元纸币--SW2
input notes_20_in,//20元纸币--SW3
input notes_50_in,//50元纸币--SW4
input [2:0] type_SW1,//输入商品的编号1--SW5,6,7
input [2:0] type_SW2,//输入商品的编号2--SW8,9,10
input [1:0] num_SW,//输入商品的数量--SW11,12
output [3:0] btn_LED,//按键指示灯
output [5:0] state_LED,//LD0~7
output [7:0] bit_select,//数码管位选
output [7:0] seg_select//数码管段选
);
assign btn_LED={goods_btn_in,confirm_btn_in,change_btn_in,cancel_btn_in};
wire [7:0] need_money;//所需金额
wire [7:0] input_money;//投币的总币值
wire [7:0] change_money;//找出多余金额
wire goods_btn;//商品1/2按键确认
wire confirm_btn;//确认
wire change_btn;//找零按键
wire cancel_btn;//取消
wire coin_1;//1元硬币
wire notes_5;//5元纸币
wire notes_10;//10元纸币
wire notes_20;//20元纸币
wire notes_50;//50元纸币
key_jitter i0_key_jitter(
. clkin(clk),
. key_in(goods_btn_in),//输入
. key_posedge(goods_btn)//消抖后按键上升沿
);
key_jitter i1_key_jitter(
. clkin(clk),
. key_in(confirm_btn_in),//输入
. key_posedge(confirm_btn)//消抖后按键上升沿
);
key_jitter i2_key_jitter(
. clkin(clk),
. key_in(change_btn_in),//输入
. key_posedge(change_btn)//消抖后按键上升沿
);
key_jitter i3_key_jitter(
. clkin(clk),
. key_in(cancel_btn_in),//输入
. key_posedge(cancel_btn)//消抖后按键上升沿
);
key_jitter i4_key_jitter(
. clkin(clk),
. key_in(coin_1_in),//输入
. key_posedge(coin_1)//消抖后按键上升沿
);
key_jitter i5_key_jitter(
. clkin(clk),
. key_in(notes_5_in),//输入
. key_posedge(notes_5)//消抖后按键上升沿
);
key_jitter i6_key_jitter(
. clkin(clk),
. key_in(notes_10_in),//输入
. key_posedge(notes_10)//消抖后按键上升沿
);
key_jitter i7_key_jitter(
. clkin(clk),
. key_in(notes_20_in),//输入
. key_posedge(notes_20)//消抖后按键上升沿
);
key_jitter i8_key_jitter(
. clkin(clk),
. key_in(notes_50_in),//输入
. key_posedge(notes_50)//消抖后按键上升沿
);
//控制模块
sell_ctrl i_sell_ctrl(
. clk(clk),//100MHz
. reset_p(reset_p),//复位
. goods_btn(goods_btn),//商品1/2按键确认
. confirm_btn(confirm_btn),//确认
. change_btn(change_btn),//找零按键
. cancel_btn(cancel_btn),//取消
. coin_1(coin_1),//1元硬币
. notes_5(notes_5),//5元纸币
. notes_10(notes_10),//10元纸币
. notes_20(notes_20),//20元纸币
. notes_50(notes_50),//50元纸币
. type_SW1(type_SW1),//输入商品的编号1
. type_SW2(type_SW2),//输入商品的编号2
. num_SW(num_SW),//输入商品的数量
. need_money(need_money),//所需金额
. input_money(input_money),//投币的总币值
. change_money(change_money),//找出多余金额
. state_LED(state_LED)
);
//显示模块
display i_display
(
. clk(clk),
. need_money(need_money),//所需金额
. input_money(input_money),//投币的总币值
. change_money(change_money),//找出多余金额
. bit_select(bit_select),//数码管位选
. seg_select(seg_select)//数码管段选
);
endmodule

 源代码

 扫描文章末尾的公众号二维码

  • 22
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值