FPGA实战篇(触摸按键控制LED灯)

1.触摸按键简介

        触摸按键主要可分为四大类:电阻式、电容式、红外感应式以及表面声波式。根据其属性的不同,每种触摸按键都有其合适的使用领域。
        电阻式触摸按键由多块导电薄膜按照按键的位置印制而成,但由于耐用性较差且维护复杂,目前使用率较低;红外感应式触摸按键通过红外扫描来识别按键位置,一般在较恶劣的环境下使用;表面声波式触摸按键利用声波扫描来识别是否按下,使用寿命长,较适合公共场所的 POS 机,无人售货机等处使用。
        电容式触摸按键:这种按键的诞生主要是为了克服电阻式按键耐用性差的不足所提出的。电容式触摸按键采用电容量为评判标准,其感应区域可穿透绝缘外壳(玻璃、塑料等)20mm 以上。其灵敏度和可靠性不会因环境条件的改变或长期使用而发生变化,具有防水、强抗干扰能力强、适应温度范围广以及使用寿 命长等优点,是现代使用最广泛,发展最迅速的一种触摸按键。
        接下来,我们具体的了解一下电容触摸按键的构造和工作原理。
        电容触摸按键主要由按键 IC 部分和电容部分构成。按键 IC 部分主要由元器件供应商提供,用于将电容的变化转换为电信号。电容部分指的是由电容极板,地,隔离区等组成触摸按键的电容环境。任何两个导电的物体之间都存在着感应电容,在周围环境不变的情况下,该感应电容值是固定不变的。
        如下图所示,手指接触到触摸按键时,按键和手指之间产生寄生电容,使按键的总容值增加。

        触摸按键按下前后,电容的变化如下图所示。电容式触摸按键 IC 在检测到按键的感应电容值改变,并超过一定的阈值后,将输出有效信号表示按键被按下。
2.实验任务
        本节的实验任务是使用触摸按键控制 LED 灯的亮灭,开发板上电后 LED 为点亮状态,手指触摸后 LED熄灭;当再次触摸时,LED 点亮。
3. 硬件设计
        启明星开发板上的触摸按键部分的原理图如图 所示。其中 TPAD 是芯片的输出引脚,连接到ZYNQ 的 IO 端口。
        开发板上所使用的触摸 IC 型号为 AR101 (或者 JL223B ,和 AR101 完全兼容),它可以通过 OP1 和 OP2 两个引脚选择不同的工作模式: OP1 拉低时, OUT 引脚输出信号高电平有效; OP1 拉高时, OUT 输出 信号低电平有效。
        当 OP2 拉低时,触摸 IC 工作在同步模式(类似于非自锁的轻触按键),即触摸时输出有效电平,松开后输出无有效电平;OP2 拉高时触摸 IC 工作在保持模式(类似于自锁按键),即检测到触摸操作后输出有效电平,松开后,输出电平保持不变。当再次检测到触摸操作时,输出电平变化并继续保持。
        图中触摸 IC 的引脚 OP1 OP2 均拉低,因此当手指按在触摸按键上时, TOUT 管脚输高电平,松开后输出低电平。
        本实验中,系统时钟、复位按键、触摸按键和 LED 灯的管脚分配如下表所示,其中时钟晶振位于核心 板上,复位按键、触摸按键和 LED 位于底板上。
4.程序设计
        本次设计的模块端口及信号连接如下图所示。通过捕获触摸按键端口的上升沿,得到一个时钟周期的脉冲信号,来控制 LED 灯的亮灭。
        触摸按键控制 led 代码如下:
1 module touch_led(
2 //input
3 input sys_clk, //时钟信号 50Mhz
4 input sys_rst_n, //复位信号
5 input touch_key, //触摸按键
6 
7 //output
8 output reg led //LED 灯
9 );
10
11 //reg define
12 reg touch_key_d0;
13 reg touch_key_d1;
14
15 //wire define
16 wire touch_en;
17
18 //*****************************************************
19 //** main code
20 //*****************************************************
21
22 //捕获触摸按键端口的上升沿,得到一个时钟周期的脉冲信号
23 assign touch_en = (~touch_key_d1) & touch_key_d0;
24
25 //对触摸按键端口的数据延迟两个时钟周期
26 always @ (posedge sys_clk or negedge sys_rst_n) begin
27 if(!sys_rst_n) begin
28 touch_key_d0 <= 1'b0;
29 touch_key_d1 <= 1'b0;
30 end
31 else begin
32 touch_key_d0 <= touch_key;
33 touch_key_d1 <= touch_key_d0;
34 end
35 end
36
37 //根据触摸按键上升沿的脉冲信号切换 led 状态
38 always @ (posedge sys_clk or negedge sys_rst_n) begin
39 if (!sys_rst_n)
40 led <= 1'b1; //默认状态下,点亮 LED
41 else begin
42 if (touch_en)
43 led <= ~led;
44 end
45 end
46
47 endmodule

5.下载验证

        编译工程并生成比特流.bit 文件。将下载器一端连接电脑,另一端与开发板上的 JTAG 下载口连接,连接电源线,并打开开发板的电源开关。
        点击 Vivado 左侧“ Flow Navigator ”窗口最下面的“ Open Hardware Manager ”,此时 Vivado 软件识别到下载器,点击“Hardware” 窗口中“ Progam Device ”下载程序,在弹出的界面中选择“ Program ”下载程序。
        程序下载完成后,可以看到底板上的 PL_LED0 处于点亮状态,触碰一次触摸按键,就可以看到 LED灯熄灭,再次触摸点亮 LED 灯。如下图所示:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/62849.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java基础概念47-ArrayList、LinkList和迭代器

一、ArrayList集合 1-1、ArrayList的两种添加信息的方式 1-2、ArrayList集合底层逻辑 1、利用空参创建的集合&#xff0c;在底层创建一个默认长度为0的数组 2、添加第一个元素时&#xff0c;底层会创建一个新的长度为10的数组 3、存满时&#xff0c;会扩容1.5倍。 4、如果…

Milvus python库 pymilvus 常用操作详解之Collection(下)

上篇博客 Milvus python库 pymilvus 常用操作详解之Collection&#xff08;上&#xff09; 主要介绍了 pymilvus 库中Collection集合的相关概念以及创建过程的代码实现&#xff0c;现在我们要在该基础上实现对于collection中插入数据的混合检索&#xff08;基于dense vector 和…

C++学习日记---第16天

笔记复习 1.C对象模型 在C中&#xff0c;类内的成员变量和成员函数分开存储 我们知道&#xff0c;C中的成员变量和成员函数均可分为两种&#xff0c;一种是普通的&#xff0c;一种是静态的&#xff0c;对于静态成员变量和静态成员函数&#xff0c;我们知道他们不属于类的对象…

Java基础之网络编程:开启网络通信的神秘之门

一、网络编程概述 网络编程是通过计算机网络进行数据传输和通信的编程技术&#xff0c;在 Java 中&#xff0c;我们可以使用丰富的网络编程功能和 API 来实现不同计算机之间的数据交互。 Java 网络编程是指在 Java 语言中使用网络协议和 API 进行网络通信的编程技术。Java 网络…

Go 语言函数编程指南:定义、调用技巧与返回值机制

&#x1f407;明明跟你说过&#xff1a;个人主页 &#x1f3c5;个人专栏&#xff1a;《Go语言探索之旅》&#x1f3c5; &#x1f516;行路有良友&#xff0c;便是天堂&#x1f516; 目录 一、引言 1、Go语言简介 2、Go语言的特点 二、函数定义 1、Go语言函数定义 2、函…

qt实现对pdf的编译、读、写、显示

PDFium 的下载和编译 PDFium 是一个开源的 PDF 渲染引擎,支持 PDF 的加载、解析和显示功能。1.1 下载 PDFium 源码 克隆 PDFium 的官方源码仓库: git clone https://pdfium.googlesource.com/pdfium.git cd pdfium 下载依赖项和工具链: gclient sync 1.2 配置编译环境 PDF…

在办公室环境中用HMD替代传统显示器的优势

VR头戴式显示器&#xff08;HMD&#xff09;是进入虚拟现实环境的一把钥匙&#xff0c;拥有HMD的您将能够在虚拟现实世界中尽情探索未知领域&#xff0c;正如如今的互联网一样&#xff0c;虚拟现实环境能够为您提供现实中无法实现的或不可能实现的事。随着技术的不断进步&#…

Springboot项目中子模块maven层级不一致的问题

&#xff08;一&#xff09;问题描述 campus-common、campus-pojo、campus-server都是campus-flower-system的子模块&#xff0c;但是只有campus-common在campus-flower-system下 &#xff08;二&#xff09;解决方法 打开父工程&#xff08;我这里是campus-flower-system&…

springboot-mybatis-plus集成篇

前言 MyBatis 最佳搭档&#xff0c;只做增强不做改变&#xff0c;为简化开发、提高效率而生。 简单用例 UserMapper.java Mapper public interface UserMapper extends BaseMapper<User> { }User.java TableName(value "user") public class User implem…

nginx配置http及https

nginx配置http及https 1.动静分离2.负载均衡3.配置https4.请求重定向5.常用参数配置介绍 现在日常工作中的项目大多数都是采用前后端分离&#xff0c;就用到了nginx进行反向代理、处理静态资源等&#xff1b;因此&#xff0c;记录整理了nginx一些常用的配置&#xff1b; 1.动静…

react学习记录

一、目录结构react优秀代码之react目录结构简洁之道React 作为一个库&#xff0c;不会决定你如何组织项目的结构。这是件好事&#xff0c;因为这样 - 掘金【React】项目的目录结构全面指南_react项目结构-CSDN博客 1、创建项目&#xff1a;开发文档 Getting Started | Create…

SpringBoot 架构下的在线家具商城:规划与实践之路

第1章 绪论 1.1选题动因 当前的网络技术&#xff0c;软件技术等都具备成熟的理论基础&#xff0c;市场上也出现各种技术开发的软件&#xff0c;这些软件都被用于各个领域&#xff0c;包括生活和工作的领域。随着电脑和笔记本的广泛运用&#xff0c;以及各种计算机硬件的完善和升…

ios上滚动条不能滑动 滚动卡住的问题

iosapp上viewweb h5不能滑动的问题 1.给滑动容器添加样式 overflow-x: hidden!important; overflow-y:scroll!important; touch-action: auto!important; -webkit-overflow-scrolling: touch!important;//惯性滑动2.html添加 <meta content"yes" name"appl…

二分搜索(二)搜索插入位置

35. 搜索插入位置 给定一个排序数组和一个目标值&#xff0c;在数组中找到目标值&#xff0c;并返回其索引。如果目标值不存在于数组中&#xff0c;返回它将会被按顺序插入的位置。 请必须使用时间复杂度为 O(log n) 的算法。 示例 1: 输入: nums [1,3,5,6], target 5 输出: …

政府大数据应用启示

数据是基础性资源&#xff0c;也是重要生产要素。如何管理政府大数据资产&#xff0c;我国各部门还缺乏统一标准&#xff0c;如何利用大数据进行精细分析&#xff0c;仍处于探索起步阶段&#xff0c;应用分散。分析我国政府大数据应用的现状和特点&#xff0c;借鉴国外的有益经…

Ubuntu 20.04中的关键文件路径符号:根目录()与用户主目录()的详细解析及应用示例

Ubuntu 20.04中的关键文件路径符号&#xff1a;根目录(/)与用户主目录(~)的详细解析及应用示例 在Ubuntu 20.04 LTS中&#xff0c;理解文件路径是进行有效文件系统导航的基础。特别地&#xff0c;/和~是两个非常重要的符号&#xff0c;它们在文件路径中扮演着关键角色。这两个…

【阅读笔记】Android广播的处理流程

关于Android的解析&#xff0c;有很多优质内容&#xff0c;看了后记录一下阅读笔记&#xff0c;也是一种有意义的事情&#xff0c; 今天就看看“那个写代码的”这位大佬关于广播的梳理&#xff0c; https://blog.csdn.net/a572423926/category_11509429.html https://blog.c…

【C++boost::asio网络编程】有关异步读写api的笔记

异步读写api 异步写操作async_write_someasync_send 异步读操作async_read_someasync_receive 定义一个Session类&#xff0c;主要是为了服务端专门为客户端服务创建的管理类 class Session { public:Session(std::shared_ptr<asio::ip::tcp::socket> socket);void Conn…

Bootstrap Blazor MAUI开发的App实现检查更新

1、开发更新服务接口 namespace UpdateApkpublic interface IUpgradeService {/// <summary>/// 检查更新/// </summary>/// <param name"url">/// 检查URL/// </param>/// <returns></returns>Task<Dictionary<string, …

mvc基础及搭建一个静态网站

mvc asp.net core mvc环境 .net8vscode * Asp.Net Core 基础* .net8* 前辈* .net 4.9 非跨平台版本 VC* 跨平台版本* 1.0* 2.0* 2.1* 3.1* 5* 语言* C#* F# * Visual Basic* 框架* web应用* asp应用* WebFrom* mvc应用* 桌面应用* Winform* WPF* Web Api api应用或者叫服务* …