按键控制蜂鸣器
功能:按下按键的时候蜂鸣器响,再次按下的时候蜂鸣器不响,循环往复。
> module xiaodou_beep(clk,rst_n,key,beep);
> input clk,rst_n;
> input key;
> reg key_value;
> output reg beep;
> reg key_reg;
> reg [19:0] cnt;
>
> always @(posedge clk or negedge rst_n) begin
> if(!rst_n)
> key_reg <= 0;
> else
> key_reg <= key;
> end
>
> //计数功能
> always @(posedge clk or negedge rst_n)
> begin
> if(!rst_n)
> cnt <= 0;
> else
> begin
> if(key!=key_reg)
> cnt <= 20'd1000000;
> else
> begin
> if(cnt>0)
> cnt <= cnt-1;
> else
> cnt <= cnt;
> end
> end
> end
>
> //key_value
> always @(posedge clk or negedge rst_n) begin
> if(!rst_n)
> key_value <= 1;
> else begin
> if(cnt==1)
> key_value <= key;
> else
> key_value <= key_value;
> end
> end
>
> //key_flag
> always @(posedge clk or negedge rst_n)
> begin
> if(!rst_n)
> beep <= 1;
> else
> begin
> if(key_value==0)
> beep <= ~beep;
> else
> beep <= beep;
> end
> end
> endmodule