verilog学习笔记- 12)触摸按键控制LED灯实验

news2024/11/16 2:58:11

目录

简介:

实验任务:

硬件设计:

 程序设计:

下载验证:


简介:

触摸按键主要可分为四大类:电阻式、电容式、红外感应式以及表面声波式。根据其属性的不同,每种触摸按键都有其合适的使用领域。

电阻式触摸按键:由多块导电薄膜按照按键的位置印制而成,但由于耐用性较差且维护复杂,目前使用率较低;红外感应式触摸按键通过红外扫描来识别按键位置,一般在较恶劣的环境下使用;表面声波式触摸按键利用声波扫描来识别是否按下,使用寿命长,较适合公共场所的 POS 机,无人售货机等处使用。

电容式触摸按键:这种按键的诞生主要是为了克服电阻式按键耐用性差的不足所提出的。电容式触摸按键采用电容量为评判标准,其感应区域可穿透绝缘外壳(玻璃、塑料等)20mm 以上。其灵敏度和可靠性不会因环境条件的改变或长期使用而发生变化,具有防水、强抗干扰能力强、适应温度范围广以及使用寿命长等优点,是现代使用最广泛,发展最迅速的一种触摸按键。

电容触摸按键主要由按键 IC 部分和电容部分构成。按键 IC 部分主要由元器件供应商提供,用于将电容的变化转换为电信号。电容部分指的是由电容极板,地,隔离区等组成触摸按键的电容环境。任何两个导电的物体之间都存在着感应电容,在周围环境不变的情况下,该感应电容值是固定不变的。手指接触到触摸按键时,按键和手指之间产生寄生电容,使按键的总容值增加。

触摸按键按下前后,电容的变化如图电容式触摸按键IC在检测到按键的感应电容值改变,电容式触摸按键IC在检测到按键的感应电容值改变,并超过一定的阈值后将输出有效信号表示按键被按下。


实验任务:

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


硬件设计:

开发板上所使用的触摸 IC 型号为 AR101,它可以通过 OP1 和 OP2 两个引脚选择不同的工作模式:OP1拉低时,OUT 引脚输出信号高电平有效;OP1 拉高时,OUT 输出信号低电平有效。

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

触摸 IC 的引脚 OP1 和 OP2 均拉低,因此当手指按在触摸按键上时,TOUT 管脚输高电平,松开后输出低电平。

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

对应的 TCL 约束语句如下:

set_location_assignment PIN_M2 -to sys_clk
set_location_assignment PIN_M1 -to sys_rst_n
set_location_assignment PIN_F8 -to touch_key
set_location_assignment PIN_D11 -to led

 程序设计:

本次设计的模块端口及信号连接如图,通过对按键信号上升沿的识别来进行控制信号的切换,起到控制 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

第 23 行至 35 代码为一个经典的边沿检测电路,通过检测 touch_key 的上升沿来捕获按键按下的信号,一旦检测到按键按下,输出一个时钟周期的脉冲 touch_en。每当检测到 touch_en 为高电平,led 取反一次。

Test bench 模块代码如下:

 

1 `timescale 1ns/1ns
2 module tb_touch_led();
3 
4 //parameter define
5 parameter T =20 ;
6 
7 //reg define
8 reg sys_clk;
9 reg sys_rst_n;
10 reg touch_key;
11 
12 //wire define
13 wire led;
14 
15 //*****************************************************
16 //** main code
17 //*****************************************************
18 
19 //给输入信号初始值
20 initial begin
21 sys_clk <=1'b0;
22 sys_rst_n <=1'b0;
23 touch_key <=1'b0;
24 #20 sys_rst_n <=1'b1;
25 #10 touch_key <=1'b1;
26 #30 touch_key <=1'b0;
27 #110 touch_key <=1'b1;
28 #30 touch_key <=1'b0;
29 end
30 
31 //50Mhz 的时钟,周期则为 1/50Mhz=20ns,所以每 10ns,电平取反一次
32 always # (T/2) sys_clk <= ~sys_clk;
33 
34 touch_led u0(
35 .sys_clk(sys_clk),
36 .sys_rst_n(sys_rst_n),
37 .touch_key(touch_key),
38 .led(led)
39 );
40 endmodule

 仿真波形如图:

测试代码中,第 20 至 29 行为信号的激励,起始时 sys_clk、sys_rst_n、touch_key 为低电平,20ns 时将复位信号拉高,10ns 后将 touch_key 拉高并保持 30ns,模拟第一次按键触摸操作,110ns 后再将 touch_key拉高并保持 30ns,模拟第二次按键触摸操作。从图 11.4.2 仿真波形图可以看出,在第一次按下按键后 led由高电平变为低电平,再次按下后,led 电平再次发生改变。


下载验证:

 功能正常

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

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

相关文章

响应式与观察者模式

什么是响应式&#xff1f;响应式 是Vue 最独特的特性之一&#xff0c;是非侵入性的响应式系统。数据模型仅仅是普通的 JavaScript 对象。而当你修改它们时&#xff0c;视图会进行更新。我们也叫他双向绑定。如果想要更改视图&#xff0c;只要直接更改对应属性的值即可&#xff…

从隔壁老王开始的信号处理入门

诸神缄默不语-个人CSDN博文目录 我是从GNN被扔到NLP然后又做起了GNN现在又被喊去搞时间序列分类&#xff0c;所以现在才开始看信号处理&#xff08;因为我开始做GNN以来&#xff0c;GNN就以图域而非谱域为主了&#xff0c;所以那时我没怎么看过信号处理&#xff09;。 所以写个…

RabbitMQ消息队列(三):任务分发机制

在上篇文章中&#xff0c;我们解决了从发送端&#xff08;Producer&#xff09;向接收端&#xff08;Consumer&#xff09;发送“Hello World”的问题。在实际的应用场景中&#xff0c;这是远远不够的。从本篇文章开始&#xff0c;我们将结合更加实际的应用场景来讲解更多的高级…

jetson nano上编译与使用西门子PLC通讯库snap7

文章目录一.西门子snap7介绍二.西门子S7通讯介绍三.jetson nano编译snap7库四.Qt Cmake导入snap7库五.snap7主要函数说明1.与PLC建立连接2.读写PA区变量3.读写MK区变量六.通讯程序示例一.西门子snap7介绍 Snap7 是一个基于以太网与S7系列的西门子PLC通讯的开源库。支持包括S7系…

2023美赛数学建模ABCDEF题思路模型代码

占个位置吧&#xff0c;开始在本帖实时更新赛题思路代码&#xff0c;文章末尾获取&#xff01; 持续为更新参考思路 赛题思路 会持续进行思路模型分析&#xff0c;下自行获取。 A题思路&#xff1a; &#xff08;比赛开始后第一时间更新&#xff09; B题思路&#xff1a;…

《算法分析与设计》复习笔记

目录 一、算法的基本概念 1.1 算法的定义 1.2 算法的“好坏”如何衡量&#xff1f; 1.3 描述算法的时间复杂度 ⭐ 1.4 如何评价算法 二、 分治法 2.1 分治法的求解步骤 2.2 平衡的概念 2.3 递归式解法 2.3.1 主定理法 ⭐ 2.4 分治法的使用条件 2.5 分治法实例 2.5…

助力安全作业生产,基于轻量级YOLOv6s开发实践反光衣检测识别分析系统

在很多实际作业生产场景中&#xff0c;出于对安全的考虑&#xff0c;施工作业等操作都是要求穿戴反光衣的&#xff0c;这个主要是为了保护人身安全&#xff0c;但是很多时候工程作业场景下因为实际种种的原因工人实际作业操作的时候很多人并没有按照要求穿戴反光衣这就给安全生…

OPTEE安全存储

本文主要介绍OPTEE的安全存储技术&#xff0c;翻译自官方文档&#xff1a;Secure storage — OP-TEE documentation documentation (optee.readthedocs.io) 一、背景 OP-TEE中的安全存储是根据GlobalPlatform的TEE Internal Core API&#xff08;这里称为可信存储&#xff09;…

2023/1/13总结

今天学习了链式向前星和唯一分解定理&#xff08;数论&#xff09;。 链式向前星 链式向前星是一种存储图的方法&#xff0c;在此之前我们学到过存储图的方式&#xff1a;邻接表以及邻接矩阵&#xff0c;邻接矩阵浪费了很大的空间&#xff0c;而邻接表 写起来的代码有一点点…

微信小程序wxml的数据和事件的绑定,以及条件和列表的渲染

文章目录1.数据绑定的基本原则在data中定义页面的数据2.事件绑定bingtap的语法格式:在事件处理函数中为data中的数据赋值事件传参bindinput的语法格式实现文本框和data之间的数据同步1.定义数据2.渲染结构3.美化样式4.绑定input事件处理函数3.条件渲染hiddenwx:if与hidden的对比…

数据库 表设计 MySQL

表设计 约束 为了保证入库数据的合理性&#xff0c;添加的各种规则。 约束的分类 准备测试用的表格&#xff1a; CREATE TABLE emp ( id INT, -- 员工id&#xff0c;主键且自增长 ename VARCHAR(50), -- 员工姓名&#xff0c;非空且唯一 joindate DATE, -- 入职日期&…

【uniapp】渲染列表数据删除项导致每项数据重置的问题解决方案

开发uniapp项目&#xff0c;使用的是JavaScript Vue写法&#xff0c;操作wList数组列表更新的时候&#xff0c;如果每一项都带input 或 radio组件&#xff0c;要操作移除的话&#xff0c;那么组件的输入数据会被清除重置&#xff0c;若不希望这样&#xff0c;那应该怎么做才好呢…

设计模式相关内容介绍—软件设计原则(六个)

在软件开发中&#xff0c;为了提高软件系统的可维护性和可复用性&#xff0c;增加软件的可扩展性和灵活性&#xff0c;程员要尽量根据6条原则来开发程序&#xff0c;从而提高软件开发效率、节约软件开发成本和维护成本。 目录 1.开闭原则 2.里氏代替原则 3.依赖倒转原则 4.接…

dvwa中的文件包含攻击

环境&#xff1a;dvwa: 192.168.11.135 dvwa版本&#xff1a; Version 1.9 (Release date: 2015-09-19)kail机器&#xff1a;192.168.11.156一、什么是文件包含漏洞?为简化代码&#xff0c;会把重复的code内容单独写到一个页面文件&#xff0c;然后再需要调用重复内容的页面中…

C语言:初识C语言

目录前言1. 什么是c语言呢2. 第一个c语言程序2. 数据类型3. 变量和常量3.1 变量3.1.1 变量的定义3.1.2 变量的分类3.1.3 变量的使用3.1.4 变量的作用域和生命周期3.2 常量4. 字符串、转义字符、注释4.1 字符串4.2 转义字符4.3 注释5. 选择语句6. 循环语句7. 函数8. 数组9. 操作…

学习笔记——keep-alive缓存组件,再次返回组件data数据重置

前言&#xff1a;使用keep-alive缓存组件&#xff0c;当再次返回该组件后&#xff0c;希望其组件中的数据或状态&#xff0c;保持上次离开该组件时的情况。 一、当前组件树 希望缓存HomeMain组件的状态。 二、错误处理 我在HomeMain的祖先组件HomeLayout中&#xff0c;写了如下…

sqlplus 连接数据库

终端直连 Oracle 数据库 ORA-12162 错误 出于各种网络原因&#xff0c;无法直连数据库&#xff0c;但又必须查询数据库数据 我们只能选择直连数据库的服务器 然后通过 sqlplus 连接 Oracle 从配置文件里获取这样一段信息 urljdbc:oracle:thin:192.168.1.3:1521:testdb use…

【SpringCloud08】SpringCloud Consul服务注册与发现

1.Consul简介 1.1是什么 官网 Consul 是一套开源的分布式服务发现和配置管理系统&#xff0c;由 HashiCorp 公司用Go 语言开发 提供了微服务系统中的服务治理、配置中心、控制总线等功能。这些功能中的每一个都可以根据需要单独使用&#xff0c;也可以一起使用以构建全方位…

基于MPLS-V**多分部互访的ensp企业网络规划与设计_ensp综合实验

作者&#xff1a;BSXY_19计科_陈永跃BSXY_信息学院注&#xff1a;未经允许禁止转发任何内容基于MPLS-V**多分部互访的ensp企业网络规划与设计_ensp综合实验前言及技术/资源下载说明&#xff08; **未经允许禁止转发任何内容** &#xff09;插曲&#xff1a;基于eNSP中大型校园/…

卡特加特数字中控主机,数字家庭控制中心!没它智能家居就是智障!

数字中控主机是数字家庭的核心&#xff0c;承担着“协调各方、总揽全局”的作用&#xff0c;是打造未来数字家庭空间必不可少的设备。区别于传统家居智能&#xff0c;它真正意义上告别了过去以设备为中心的架构&#xff0c;而是以人的个性化需求为中心&#xff0c;以数据作为资…