第十七讲 触摸按键

和机械按键结果一样,按下电平发生变化,松开恢复原状

module touch_ctrl_led
(
    input       wire        sys_clk,
    input       wire        sys_rst_n,
    input       wire        touch_key,

    output       reg       led
);

reg          touch_key_1 ;
reg          touch_key_2 ;
wire         touch_flag ;
//边沿检测
always @(posedge sys_clk or negedge sys_rst_n) 
begin
    if (sys_rst_n == 1'b0)
        begin
            touch_key_1 <= 1'b1;
            touch_key_2 <= 1'b1;    
        end
    else
        begin
            touch_key_1 <= touch_key;
            touch_key_2 <= touch_key_1; //此时touch_key_2比touch_key_1慢一拍 这样更容易产生标志信号        
        end   
end

assign  touch_flag = ((touch_key_1 == 1'b0)&&(touch_key_2 == 1'b1));

always@(posedge sys_clk or negedge sys_rst_n)
    if(sys_rst_n == 1'b0)
        led <= 1'b1;
    else if(touch_flag == 1'b1)
        led <= ~led;
    else
        led <= led;
   
endmodule


`timescale 1ns/1ns
module  tb_touch_ctrl_led();

reg     sys_clk;
reg     sys_rst_n;
reg     touch_key;

wire    led;

initial 
    begin
        sys_clk <= 1'b1;
        sys_rst_n <= 1'b0;
        touch_key <= 1'b1;
        #20
        sys_rst_n <= 1'b1;
        #200
        touch_key <= 1'b0;
        #2000
        touch_key <= 1'b1;
        #1000
        touch_key <= 1'b0;
        #3000
        touch_key <= 1'b1;   
    end

always   #20  sys_clk = ~sys_clk;

touch_ctrl_led touch_ctrl_led_inst
(
            .sys_clk        (sys_clk),
            .sys_rst_n      (sys_rst_n),
            .touch_key      (touch_key),

            .led            (led)
);

endmodule

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值