名称:Quartus地铁售票设计Verilog代码AX301开发板
软件:Quartus
语言:Verilog
代码功能:
主要内容:
1选择1号或者2号地铁线,每条线都有3元,4元,5元二种票价
2选择买张或者两张。乘客在操作失误时,可以进行清零然后重新购买。
3投钱可以选择1元,5元,10元,
4比较投钱和票价。投钱和票价相等时,出票投钱大于票价时,找零,出票:投钱小于票价时,询问是否继续投钱,如果不继续投钱,则不出顒并且退钱。
5显示选择几号线,选择的票价,购买几张投入的钱数以及找零的钱。
本代码已在AX301开发板验证,开发板如下,其他开发板可以修改管脚适配
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
?扫描文章末尾的公众号二维码