【FPGA触摸按键控制LED灯】

FPGA触摸按键控制LED灯

一、原理:

电容触摸按键主要由按键 IC 部分和电容部分构成。按键 IC 部分主要由元器件供应商提供,用于将电容的变化转换为电信号。电容部分指的是由电容极板,地,隔离区等组成触摸按键的电容环境。任何两个导电的物体之间都存在着感应电容,在周围环境不变的情况下,该感应电容值是固定不变的。如下图1所示,手指接触到触摸按键时,按键和手指之间产生寄生电容,使按键的总容值增加。
在这里插入图片描述
触摸按键按下前后,电容的变化如图 2所示。电容式触摸按键 IC 在检测到按键的感应电容值改变,并超过一定的阈值后,将输出有效信号表示按键被按下。

在这里插入图片描述

二、实现功能:

使用触摸按键控制 LED 灯亮灭,开发板上电后 LED 为点亮状态,手指触摸后 LED 熄灭,再次触摸,LED 点亮。

三、功能模块结构:

在这里插入图片描述

四、功能代码:

1.逻辑代码:

module touch_led(
    input         clk      ,
    input         rst_n    ,
    input         touch_key,

    output  reg   led
);

//参数定义
reg   touch_key_r0;   //同步触摸按键状态
reg   touch_key_r1;   //打拍触摸按键状态

wire  touch_en    ;   //检测状态上升沿,即触摸按键有效使能

//对触摸按键数据进行同步、打拍
always @(posedge clk or negedge rst_n) begin
    if(!rst_n)begin
        touch_key_r0 <= 1'b0;
        touch_key_r1 <= 1'b0;
    end
    else begin
        touch_key_r0 <= touch_key   ;
        touch_key_r1 <= touch_key_r0;
    end
end

//检测电平的上升沿,因触摸按键按下时电平会升高
assign touch_en = (~touch_key_r1) & touch_key_r0;

//当检测到上升沿时,让LED的状态反转
always @(posedge clk or negedge rst_n) begin
    if(!rst_n)begin
        led <= 1'b1;    //led默认状态点亮
    end
    else if(touch_en)begin
        led <= ~led;    
    end
end
endmodule

2.仿真代码:

`timescale 1ns/1ps

module tb_touch_led();

reg    tb_clk      ;
reg    tb_rst_n    ;
reg    tb_touch_key;

wire   tb_led      ;

always #10 tb_clk = ~tb_clk;

initial begin
    tb_clk   <= 1'b0;
    tb_rst_n <= 1'b0;
    tb_touch_key <= 1'b0;

    #20 tb_rst_n <= 1'b1;
    #10 tb_touch_key <=1'b1;
    #30 tb_touch_key <=1'b0;
    #20 tb_touch_key <=1'b1;
    #10 tb_touch_key <=1'b0;
end

touch_led u_touch_led(
    .clk           (tb_clk      ),
    .rst_n         (tb_rst_n    ),
    .touch_key     (tb_touch_key),
    .led           (tb_led      )
);

endmodule
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值