基于FPGA的自动售货机控制系统Verilog代码Quartus仿真

名称:基于FPGA的自动售货机控制系统Verilog代码Quartus仿真(文末获取)

软件:Quartus

语言:Verilog

代码功能:

自动售货机控制系统

该系统能完成自身的复位。对货物信息的存储、进程控制,硬币处理、余额计算、显示等功能

a.机器只接受1元硬币和5角硬币

b机器共提供4种货物,价格分别为2元、2元,1.5元、1.5元(可通过调整代码改变每种货物的单价)

c.顾客先选择需要的一种商品,在确认所选货物后,进入投币状态。当顾客选择的货物售完时,在顾客确认货物之时,提示顾客货物卖光,并返回初始状态(顾客确认货物时,提供确认选择和重新选择俩个选项

d.若等待30s,顾客不投币,则返回初始状态;顾客投币后,系统自动计算所投钱币。若钱币够,则出货找零。若自客户确认货物之后30s,投币不够,则退币并返回初状态。也可在投币完成时按投币完成按钮快速进入计算钱币状态以及后续状态

1. 工程文件

2. 程序文件

3. 程序编译

4. RTL图

5. Testbench

6. 仿真图

整体仿真图

正常购买流程:选择2.0元商品,goods_led低电平亮,指示商品,按下确认键confirm_key后,先后投币1元,0.5元,1元,有显示投币金额input_money_BCD,价钱need_money_BCD,找钱change_money_BCD,还差金额left_money_BCD。

仿真选1.5元商品后30s没有操作,还差金额由1.5变为0,返回初始状态。

仿真选中1.5元商品,投币1元后,30s没有操作,还剩金额由0.5变为0,返回投币1元,退币指示灯coin_return_led亮。

部分代码展示:

module auto_sell(
input clk_in,//48M
input reset_n,//复位
//按键按下低电平
input coin_10_key,//投币1元
input coin_05_key,//投币0.5元
input price_20_1_key,//2元商品1
input price_20_2_key,//2元商品2
input price_15_1_key,//1.5元商品1
input price_15_2_key,//1.5元商品2
input confirm_key,//确认
output succeed_ledn,//购买成功指示灯
output coin_return_ledn,//退币指示灯
output [3:0] goods_ledn,//商品指示灯
output NO_goods_ledn,//商品缺货指示灯
output [7:0] DLA,//数码管位选,低电平选择
output [7:0] HEX//数码管段选,低亮
);
wire [7:0] input_money_BCD;//投币金额
wire [7:0] need_money_BCD;//价钱
wire [7:0] change_money_BCD;//找钱
wire [7:0] left_money_BCD;//还差金额
wire coin_10_p;//投币1元
wire coin_05_p;//投币0.5元
wire price_20_1_p;//2元商品
wire price_20_2_p;//2元商品
wire price_15_1_p;//1.5元商品
wire price_15_2_p;//1.5元商品
wire confirm_p;//确认 
//按键消抖模块
key_jitter i0_key_jitter(
. clkin(clk_in),     
. key_in(coin_10_key),//输入
. key_negedge(coin_10_p)//消抖后按键下降沿
);
//按键消抖模块
key_jitter i1_key_jitter(
. clkin(clk_in),     
. key_in(coin_05_key),//输入
. key_negedge(coin_05_p)//消抖后按键下降沿
);
//按键消抖模块
key_jitter i2_key_jitter(
. clkin(clk_in),     
. key_in(price_20_1_key),//输入
. key_negedge(price_20_1_p)//消抖后按键下降沿
);
//按键消抖模块
key_jitter i3_key_jitter(
. clkin(clk_in),     
. key_in(price_20_2_key),//输入
. key_negedge(price_20_2_p)//消抖后按键下降沿
);
//按键消抖模块
key_jitter i4_key_jitter(
. clkin(clk_in),     
. key_in(price_15_1_key),//输入
. key_negedge(price_15_1_p)//消抖后按键下降沿
);
//按键消抖模块
key_jitter i5_key_jitter(
. clkin(clk_in),     
. key_in(price_15_2_key),//输入
. key_negedge(price_15_2_p)//消抖后按键下降沿
);
//按键消抖模块
key_jitter i6_key_jitter(
. clkin(clk_in),     
. key_in(confirm_key),//输入
. key_negedge(confirm_p)//消抖后按键下降沿
);
//状态控制模块
state_ctrl i_state_ctrl(
. clk_in(clk_in),//48M
. reset_n(reset_n),//复位
. coin_10_p(coin_10_p),//投币1元
. coin_05_p(coin_05_p),//投币0.5元
. price_20_1_p(price_20_1_p),//2元商品
. price_20_2_p(price_20_2_p),//2元商品
. price_15_1_p(price_15_1_p),//1.5元商品
. price_15_2_p(price_15_2_p),//1.5元商品
源代码

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值