10FPGA触摸按键控制LED

一、触摸按键
触摸按键可分为四大类:电阻式、电容式、红外感应式、和表面声波式。
电容式触摸按键主要由按键IC部分和电容部分构成;按键IC用于将电容的变化转换为电信号;电容部分指的是由电容极板、地、隔离区等组成触摸按键的电容环境。
在这里插入图片描述

二、上升沿与下降沿的采集
电容按键被按下的时候,我们需要采集它的一个上升沿或者下降沿,这里所用到的采集上升沿和下降沿的方法同样也可用于以后其他的例子中,要熟记这种采集上升沿和下降沿的方法
1.使用组合电路实现(assign)
在这里插入图片描述

其实现方式如下,由于组合逻辑没有延时,所以最后的touch_flag没有延迟一拍
在这里插入图片描述

2.使用时序电路实现
在这里插入图片描述

其采集的上升沿与下降沿如下图程序所示
在这里插入图片描述

三、实现
1.波形图
在这里插入图片描述

在本程序中采取的是组合逻辑得到的touch_en 因此touch_en的产生相比touch_key是没由延迟的
,只是将其与时钟沿对齐。

2.程序
module touch_ctrl_led
(
input wire sys_clk ,
input wire sys_rst_n ,
input wire touch_key ,

output reg led

);

reg touch_key1;
reg touch_key2;
wire touch_en;

always@(posedge sys_clk or negedge sys_rst_n)
if (sys_rst_n == 1’b0)
begin
touch_key1 <= 1’b1;
touch_key2 <= 1’b1;
end
else
begin
touch_key1 <= touch_key;
touch_key2 <= touch_key1;
end

/使用assign组合逻辑采集touch_key的下降沿*********/

assign touch_en = ((touch_key1 == 1’b0) && (touch_key2 == 1’b1));

always@(posedge sys_clk or negedge sys_rst_n)
if(sys_rst_n == 1’b0)
led <= 1’b1;
else if(touch_en == 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’b0;
sys_rst_n <= 1’b0;
#20
sys_rst_n <= 1’b1;
#200
touch_key <= 1’b1;
#1000
touch_key <= 1’b0;
#1000
touch_key <= 1’b1;
#500
touch_key <= 1’b0;

end

always #10 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、付费专栏及课程。

余额充值