FPGA开发第四弹:触摸按键控制LED灯实验

FPGA开发第四弹:触摸按键控制LED灯实验

触控按键的分类

​ 电阻式、电容式、红外感应式以及表面声波式

​ 本次实验的触摸按键为电容式触摸,下图为触摸过程电容的变化示意图。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EnfbgZYx-1659582868311)(C:\Users\user\AppData\Roaming\Typora\typora-user-images\image-20220725093136940.png)]

​ 触摸按键电路原理图

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-j6nvtEkh-1659582868315)(C:\Users\user\AppData\Roaming\Typora\typora-user-images\image-20220725093239210.png)]

​ 触摸IC型号为AR101(JL223B与AR101完全兼容),可以通过OP1和OP2两个引脚选择不同的工作模式:OP1拉低时,OUT引脚输出信号高电平有效;OP1拉高时,OUT输出信号低电平有效。

​ OP2拉低时,触摸IC处于同步模式(非自锁),即触摸时输出有效电平,松开后输出无有效电平;OP2拉高时触摸IC处于保持状态(自锁),检测到触摸操作后输出有效电平,松开后,输出电平保持不变,当再次检测到触摸操作时,输出电平变化并继续保持。

​ 系统时钟、复位按键、触摸按键和LED灯的管脚分配如下表。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lNNlukpn-1659582868317)(C:\Users\user\AppData\Roaming\Typora\typora-user-images\image-20220725094400360.png)]

对应的XDC约束语句如下图所示:

#时钟约束
creat_clock -name clk -period 20[get_ports clk]

#IO约束
set_property -dict {PACKAGE_PIN R4 IOSTANDARD LVCMOS33} [get_ports clk]
set_property -dict {PACKAGE_PIN U2 IOSTANDARD LVCMOS33} [get_ports rst]
set_property -dict {PACKAGE_PIN T5 IOSTANDARD LVCMOS33} [get_ports touch_key]
set_property -dict {PACKAGE_PIN R2 IOSTANDARD LVCMOS33} [get_ports led]

模块端口及信号连接图

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dtZheSy3-1659582868318)(C:\Users\user\AppData\Roaming\Typora\typora-user-images\image-20220725095823742.png)]

触摸按键控制LED代码:

module touch_led(
	input clk,
    input rst,
    input touch_key,
    output reg led
);
    reg touch_key0;
    reg touch_key1;
    wire touch_out;//上升沿触发器
    
    assign touch_out=(~touch_key1)&touch_key0; //当touch_key1为0
    //并且touch_key0时touch_out为1,否则都为0
	
always @(posedge clk or negedge rst)
begin
if(rst==0)
	begin
	touch_key0<=1'b0;
	touch_key1<=1'b0;
	end
else
	begin
	touch_key0<=touch_key;
	touch_key1<=touch_key0;
	end
end//经典的边沿检测电路,检测touch_key的上升沿来捕获按键按下的信号
//一旦检测到按键按下,输出一个时钟周期的脉冲touch_out
	
always @(posedge clk or negedge rst)
begin
if(rst==0)
	led<=1'b1;//默认状态是高电平
else
	begin
	if(touch_out==1)//高电平led状态翻转,条件是touch_key1==0&touch_key0==1
	//就是touch_key0从0变为1,就是一个上升沿触发,只有当上升沿触发的时候才会led电平翻转
	led<=~led;
	end
end
endmodule
    

测试代码Testbentch

`timescale 1ns/1ps

module test();

reg clk;
reg rst;
reg touch_key;//需要赋值,定义为reg

wire led;

always #10 clk=~clk;

always
begin
clk=1'b0;
rst=1'b0;
touch_key=0;
#200
rst=1'b1;
#40 touch_key=1'b1;
#200 touch_key=1'b0;
#40 touch_key=1'b1;
#200 touch_key=1'b0;
#40 touch_key=1'b1;
#200 touch_key=1'b0;
#40 touch_key=1'b1;
#200 touch_key=1'b0;
end

touch_led lh(
.clk(clk),
.rst(rst),
.touch_key(touch_key),
.led(led)
);//例化程序

endmodule

仿真结果如下图所示

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hMl2pj9t-1659582868320)(C:\Users\user\AppData\Roaming\Typora\typora-user-images\image-20220726134922794.png)]

分析综合

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3E8e77AS-1659582868322)(C:\Users\user\AppData\Roaming\Typora\typora-user-images\image-20220726135558520.png)]

约束输入

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1ptIeUgX-1659582868324)(C:\Users\user\AppData\Roaming\Typora\typora-user-images\image-20220726135322435.png)]

​ 然后要设计实现

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-au9j7lOR-1659582868326)(C:\Users\user\AppData\Roaming\Typora\typora-user-images\image-20220726135257711.png)]

下载比特流

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gFnrxcnB-1659582868329)(C:\Users\user\AppData\Roaming\Typora\typora-user-images\image-20220726135455710.png)]

​ 具体操作过程可以参考FPGA开发第一弹:FPGA开发第一弹:Vivado软件安装、开发使用与工程建立_WeeHours.的博客-CSDN博客_vivado 设置顶层

​ 以上就是我进行的触摸按键实验,继续熟悉整个FPGA开发的流程,如果自己做的项目的话其实每一步基本都不能缺失,每一步都需要我们认真总结掌握,多练几次也就熟练了!欢迎大家私信我一同交流学习,也欢迎大家批评指正!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

WeeHours.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值