地铁售票设计Verilog代码AX301开发板Quartus

发布时间:2024年01月13日

名称:Quartus地铁售票设计Verilog代码AX301开发板

软件:Quartus

语言:Verilog

代码功能:

主要内容:

1选择1号或者2号地铁线,每条线都有3元,4元,5元二种票价

2选择买张或者两张。乘客在操作失误时,可以进行清零然后重新购买。

3投钱可以选择1元,5元,10元,

4比较投钱和票价。投钱和票价相等时,出票投钱大于票价时,找零,出票:投钱小于票价时,询问是否继续投钱,如果不继续投钱,则不出顒并且退钱。

5显示选择几号线,选择的票价,购买几张投入的钱数以及找零的钱。

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

AX301开发板照片.png

1. 工程文件

2. 程序文件

3. 程序运行

4. RTL图

5. 管脚分配

6. Testbench

7. 仿真图

7.1 按键消抖模块

7.2状态机控制模块

取消按键取消之前设置

重新设置

选择4元票价2张,投币16元,找零8元

投币不足,选择4元票价2张,投币6元,找零6元

7.3 显示模块

部分代码展示:

module?Subway_ticketing(
input?clk_50M,
input?route_price_key,//路线和票价按键,按下低电平
input?number_ticket_key,//张数按键,按下低电平,K1
input?confirm_key,//确认按键,按下低电平,K2
input?cancel_key,//取消按键,按下低电平,K3
input?coin_operated_1,//投币1元,投入低电平
input?coin_operated_5,//投币5元,投入低电平
input?coin_operated_10,//投币10元,投入低电平
output?[3:0]route_led,//线路指示灯
output?[7:0]?duanxuan,//数码管段选
output?[5:0]?weixuan//数码管位选
);
wire?route_price_en;//路线和票价按键,按下低电平
wire?number_ticket_en;//张数按键,按下低电平
wire?confirm_en;//确认按键,按下低电平
wire?cancel_en;//取消按键,按下低电平
wire?coin_1_debounce;
wire?coin_5_debounce;
wire?coin_10_debounce;
wire??[3:0]ticket_price;//票价
wire??[3:0]ticket_num;//张数
wire??[7:0]total_inmoney;//总投币
wire??[7:0]give_change_money;//退钱(找零)
key_debounce??i_route_price_key?
(
.?clk(clk_50M),?
.?rst_p(1'b0),?
.?button_in(route_price_key),
.?button_posedge(),
.?button_negedge(route_price_en),
.?button_out()
);
key_debounce??i_number_ticket_key
(
.?clk(clk_50M),?
.?rst_p(1'b0),?
.?button_in(number_ticket_key),
.?button_posedge(),
.?button_negedge(number_ticket_en),
.?button_out()
);
key_debounce??i_confirm_key
(
.?clk(clk_50M),?
.?rst_p(1'b0),?
.?button_in(confirm_key),
.?button_posedge(),
.?button_negedge(confirm_en),
.?button_out()
);
key_debounce??i_cancel_key
(
.?clk(clk_50M),?
.?rst_p(1'b0),?
.?button_in(cancel_key),
.?button_posedge(),
.?button_negedge(cancel_en),
.?button_out()
);
key_debounce??i_coin_1_debounce
(
.?clk(clk_50M),?
.?rst_p(1'b0),?
.?button_in(coin_operated_1),
.?button_posedge(),
.?button_negedge(coin_1_debounce),
.?button_out()
);
key_debounce??i_coin_5_debounce
(
.?clk(clk_50M),?
.?rst_p(1'b0),?
.?button_in(coin_operated_5),
.?button_posedge(),
.?button_negedge(coin_5_debounce),
.?button_out()
);
key_debounce??i_coin_10_debounce
(
.?clk(clk_50M),?
.?rst_p(1'b0),?
.?button_in(coin_operated_10),
.?button_posedge(),
.?button_negedge(coin_10_debounce),
.?button_out()
);
Vending_machine?i_Vending_machine(
.?clk_50M(clk_50M),
.?route_price_en(route_price_en),//路线和票价按键,按下低电平
.?number_ticket_en(number_ticket_en),//张数按键,按下低电平
.?confirm_en(confirm_en),//确认按键,按下低电平
.?cancel_en(cancel_en),//取消按键,按下低电平
.?coin_operated_1(coin_1_debounce),//投币1元,投入低电平
.?coin_operated_5(coin_5_debounce),//投币5元,投入低电平
.?coin_operated_10(coin_10_debounce),//投币10元,投入低电平
.?route_led(route_led),//led指示1线路
.?ticket_price_out(ticket_price),//票价
.?ticket_num_out(ticket_num),//张数
.?total_inmoney_out(total_inmoney),//总投币
.?give_change_money_out(give_change_money)//退钱(找零)
);
display?i_display
(
.clk(clk_50M),
.ticket_price(ticket_price),//票价
???.ticket_num(ticket_num),//张数
???.total_inmoney(total_inmoney),//总投币
???.give_change_money(give_change_money),//退钱(找零)
.duanxuan(duanxuan),?//低电平有效
.weixuan(weixuan)
);
endmodule
源代码

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

文章来源:https://blog.csdn.net/diaojiangxue/article/details/135540990
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。