FPGA:基础入门按键控制蜂鸣器

题目概述:
使用按键控制蜂鸣器发声。初始状态为蜂鸣器鸣叫,按下开关后蜂鸣器停止鸣叫,再次按下开关,蜂鸣器重新鸣叫。

key_debounce.v

module key_debounce(
input sys_clk,
input sys_rst_n,
input key,
output reg key_value,
output reg key_flag
);
reg [19:0] cnt;
reg        key_reg;
//按键消抖
always@(posedge sys_clk or negedge sys_rst_n)begin
     if(!sys_rst_n)begin
          cnt<=20'd0;
          key_reg<=1'b1;
     end
     else begin 
          key_reg<=key;
          if(key_reg!=key)begin
               cnt<=20'd100_0000;
          end
          else begin          
               if(cnt>20'd0)
               cnt<=cnt-1'b1;
               else
               cnt<=20'd0;
          end
     end
end
always@(posedge sys_clk or negedge sys_rst_n)begin
   if(!sys_rst_n)begin
      key_value<=1'b1;
      key_flag<=1'b0;
   end 
   else if(cnt==20'd2)begin
        key_value<=key;
        key_flag<=1'b1;
   end
   else begin
       key_value<=key_value;
       key_flag<=1'b0;
   end
end    
endmodule

beep_control.v

module beep_control(
input sys_clk,
input sys_rst_n,
input key_value,
input key_flag,
output reg beep
);    
always@(posedge sys_clk or negedge sys_rst_n)begin
   if(!sys_rst_n)begin
      beep<=1'b1;
   end
   else if(key_flag && (key_value==1'b0))
   beep<=~beep;
end          
endmodule

top_key_beep.v

module top_key_beep(
input sys_clk,
input sys_rst_n,
input key,
output beep
);
wire key_value;
wire key_flag;
key_debounce u_key_bounce(
.sys_clk(sys_clk),       
.sys_rst_n(sys_rst_n),     
.key(key),                  
.key_value(key_value),
.key_flag(key_flag)
);    
beep_control u_beep_control(
.sys_clk (sys_clk), 
.sys_rst_n(sys_rst_n),         
.key_value(key_value),
.key_flag(key_flag),         
.beep(beep)
);     
endmodule

上机实践:

QQ短视频20220805152356

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值