专家
公告
财富商城
电子网
旗下网站
首页
问题库
专栏
标签库
话题
专家
NEW
门户
发布
提问题
发文章
FPGA
【正点原子FPGA连载】第十章 触摸按键控制LED灯实验
2020-01-30 15:49
发布
×
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮
站内问答
/
FPGA
7981
1
1
本帖最后由 正点原子 于 2019-5-22 22:54 编辑
1)实验平台:正点原子开拓者FPGA开发板2)平台购买地址:
https://item.taobao.com/item.htm?id=579749209820
2)全套实验源码+手册+视频下载地址:
http://www.openedv.com/thread-281143-1-1.html
3)本实例源码下载:
4_touch_led.rar
(2.89 MB, 下载次数: 1)
2019-5-22 22:23 上传 点击文件名下载附件
4)
对正点原子
FPGA感兴趣的同学可以加群讨论:712557122 5)关注正点原子公众号,获取最新资料更新:
第十章 触摸按键控制LED灯实验
随着电子技术的不断发展,按键的应用场景越来越广泛。触摸按键在稳定性、使用寿命、抗干扰能力等方面都优于传统的机械按键,被广泛应用于遥控器,便携电子设备,楼道电灯开关,各类家电控制面板等方面。本章将介绍触摸按键的控制方法并使用开发板上的触摸按键控制
led的亮灭。本章分为以下几个章节:1 1.1 触摸按键简介1.2 实验任务1.3 硬件设计1.4 程序设计1.5 下载验证
1.1
触摸按键简介
触摸按键主要可分为四大类:电阻式、电容式、红外感应式以及表面声波式。根据其属性的不同,每种触摸按键都有其合适的使用领域。
电阻式触摸按键由多块导电薄膜按照按键的位置印制而成,但由于耐用性较差且维护复杂,目前使用率较低;红外感应式触摸按键通过红外扫描来识别按键位置,一般在较恶劣的环境下使用;表面声波式触摸按键利用声波扫描来识别是否按下,使用寿命长,较适合公共场所的
POS机,无人售货机等处使用。
电容式触摸按键:这种按键的诞生主要是为了克服电阻式按键耐用性差的不足所提出的。电容式触摸按键采用电容量为评判标准,其感应区域可穿透绝缘外壳(玻璃、塑料等)
20mm以上。其灵敏度和可靠性不会因环境条件的改变或长期使用而发生变化,具有防水、强抗干扰能力强、适应温度范围广以及使用寿命长等优点,是现代使用最广泛,发展最迅速的一种触摸按键。接下来,我们具体的了解一下电容触摸按键的构造和工作原理。
电容触摸按键主要由按键
IC部分和电容部分构成。按键IC部分主要由元器件供应商提供,用于将电容的变化转换为电信号。电容部分指的是由电容极板,地,隔离区等组成触摸按键的电容环境。
任何两个导电的物体之间都存在着感应电容,在周围环境不变的情况下,该感应电容值是固定不变的。如图
10.1.1所示,手指接触到触摸按键时,按键和手指之间产生寄生电容,使按键的总容值增加。
图
10.1.1 触摸按键寄生电容示意图
触摸按键按下前后,电容的变化如图
10.1.2所示。电容式触摸按键IC在检测到按键的感应电容值改变,并超过一定的阈值后,将输出有效信号表示按键被按下。
图
10.1.2 触摸过程电容变化示意图
1.2
实验任务
使用触摸按键控制
LED灯亮灭,开发板上电后LED为点亮状态,手指触摸后LED熄灭,再次触摸,LED点亮。
1.3
硬件设计
开拓者开发板上的触摸按键部分的原理图如图
10.3.1所示、多功能端口原理图如图 10.3.2所示。
图
10.3.1 触摸按键电路原理图
图
10.3.2 多功能端口原理图
开发板上所使用的触摸
IC型号为AR101,它可以通过OP1和OP2两个引脚选择不同的工作模式:OP1拉低时,OUT引脚输出信号高电平有效;OP1拉高时,OUT输出信号低电平有效。
当
OP2拉低时,触摸IC工作在同步模式(类似于非自锁的轻触按键),即触摸时输出有效电平,松开后无有效电平输出;OP2拉高时触摸IC工作在保持模式(类似于自锁按键),即检测到触摸操作后输出有效电平,松开后,输出电平保持不变。当再次检测到触摸操作时,输出电平变化并继续保持。
如图
10.3.1所示,触摸IC的引脚OP1和OP2均拉低,因此当手指按在触摸按键上时,TOUT管脚输高电平,松开后输出低电平。
这里需要注意的是,由图
10.3.1和图 10.3.2所可知,TOUT引脚并没有直接连接到FPGA引脚,而是连接到P4多功能端口上,而P4上的TPAD是和FPGA的引脚相连接的,因此,我们在做触摸按键的实验时,需要使用跳帽或者杜邦线将P4上的TPAD和TOUT短接在一起。
本实验中,系统时钟、复位按键、触摸按键和
LED灯的管脚分配如下表所示。
表
10.3.1 触摸按键控制LED管脚分配图
1.4
程序设计
本次设计的模块端口及信号连接如图
10.4.1所示。通过对按键信号上升沿的识别来进行控制信号的切换,起到控制LED亮灭的效果。
图
10.4.1 模块端口及信号连接图
触摸按键控制
led代码如下:1
module
touch_led
(
2 //input3
input
sys_clk
,
//
时钟信号
50Mhz4
input
sys_rst_n
,
//复位信号5
input
touch_key
,
//按键信号67 //output8
output
reg
led //LED灯9
);
1011 //reg define12
reg
touch_key_d0
;
13
reg
touch_key_d1
;
1415 //wire define16
wire
touch_en
;
1718 //*****************************************************19 //** main code20 //*****************************************************2122 //根据按键信号的上升沿判断按下了按键23
assign
touch_en
=(~
touch_key_d1
)
&
touch_key_d0
;
2425 //对触摸按键端口接收的数据延迟两个周期26
always@
(posedge
sys_clk
ornegedge
sys_rst_n
)
begin
27
if(
sys_rst_n
==
1'b0
)begin
28 touch_key_d0
<=
1'b0
;
29 touch_key_d1
<=
1'b0
;
30
end
31
elsebegin
32 touch_key_d0
<=
touch_key
;
33 touch_key_d1
<=
touch_key_d0
;
34
end
35
end
3637 //
根据上升沿使能信号切换
led状态38
always@
(posedge
sys_clk
ornegedge
sys_rst_n
)
begin
39
if(
sys_rst_n
==
1'b0
)
40 led
<=
1'b1
;
41
elseif
(
touch_en
)
42 led
<=~
led
;
43
end
4445
endmodule
第
23行至35代码为一个经典的边沿检测电路,通过检测touch_key的上升沿来捕获按键按下的信号,一旦检测到按键按下,输出一个时钟周期的脉冲touch_en。每当检测到touch_en为高电平,led取反一次。
为了验证我们的程序,我们在
modelsim内对代码进行仿真。Test bench模块代码如下:1 `timescale 1ns
/
1ns2
module
tb_touch_led
();
3 4 //parameter define5
parameter
T
=
20
;
//时钟周期6 7 //reg define8
reg
sys_clk
;
9
reg
sys_rst_n
;
10
reg
touch_key
;
11 12 //wire define13
wire
led
;
14 15 //*****************************************************16 //** main code17 //*****************************************************18 19 //给输入信号初始值20
initial
begin
21 sys_clk
<=
1'b0
;
//时钟信号初始状态为022 sys_rst_n
<=
1'b0
;
//复位信号初始状态为023 touch_key
<=
1'b0
;
//触摸按键信号初始状态为024
#
20 sys_rst_n
<=
1'b1
;
//10ns时,将复位信号拉高25
#
20 touch_key
<=
1'b1
;
//20ns后触摸按键信号拉高26
#
30 touch_key
<=
1'b0
;
//30ns后触摸按键信号拉低27
#
110 touch_key
<=
1'b1
;
//110ns后触摸按键信号拉高28
#
30 touch_key
<=
1'b0
;
//30ns后触摸按键信号拉低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
仿真波形如图
10.4.2所示。
图
10.4.2 仿真波形图
测试代码中,第
20至29行为信号的激励,起始时sys_clk、sys_rst_n、touch_key为低电平,20ns时将复位信号拉高,10ns后将touch_key拉高并保持30ns,模拟第一次按键触摸操作,110ns后再将touch_key拉高并保持30ns,模拟第二次按键触摸操作。从图 10.4.2仿真波形图可以看出,在第一次按下按键后led由高电平变为低电平,再次按下后,led电平再次发生改变。
1.5
下载验证
首先我们打开
touch_led工程,在工程所在的路径下打开touch_led/par文件夹,在里面找到“touch_led.qpf”并双击打开。注意工程所在的路径名只能由字母、数字以及下划线组成,不能出现中文、空格以及特殊字符等。touch_led工程打开后如图 10.5.1所示。
图
10.5.1 打开触摸按键控制led工程
将
USB-Blaster下载器一端连接电脑,另一端与开发板上的JTAG下载口相连,并确保跳帽已经连接,如图 10.5.2所示。然后连接电源线并打开电源开关。
图
10.5.2 开拓者开发板实物图
硬件连接完成后通过点击工具栏中的
“Programmer”图标(图 10.5.1中红框位置)打开下载界面。
开发板电源打开后,在程序下载界面点击
“Hardware Setup”,在弹出的对话框中选择当前的硬件连接为“USB-Blaster”。然后点击“Start”将工程编译完成后得到的sof文件下载到开发板中。
图
10.5.3 下载界面
下载界面如图
10.5.3所示,查看图中红 {MOD}矩形框中是否已经加载下载文件(sof文件)。如果没有,则需要通过点击“Add File”按钮添加流水灯工程中touch_led/par/output_files目录下的“touch_led.sof”文件。
下载完成后,就可以在板卡上测试触摸按键控制
led的亮灭了,如图 10.5.2所示。
发送
看不清?
0条回答
一周热门
更多
>
相关问题
如何用FPGA驱动LCD屏?
5 个回答
请教一下各位专家如何用FPGA做eDP接口?
6 个回答
FPGA CH7301c DVI(显示器数字接口)没有数字输出
7 个回答
100颗FPGA的板子,开开眼界
6 个回答
求教自制最小系统版
10 个回答
基于FPGA的X射线安检设备控制器
2 个回答
CycolneIVGX核心板,可扩展PCIE,光纤接口,大家来鉴赏一下
6 个回答
关于VHDL或Verllog程序稳定性的问题
11 个回答
相关文章
嵌入式领域,FPGA的串口通信接口设计,VHDL编程,altera平台
0个评论
Xilinx的FPGA开发工具——ISE开发流程
0个评论
基于FPGA的详细设计流程
0个评论
干货分享,FPGA硬件系统的设计技巧
0个评论
一种通过FPGA对AD9558时钟管理芯片进行配置的方法
0个评论
×
关闭
采纳回答
向帮助了您的网友说句感谢的话吧!
非常感谢!
确 认
×
关闭
编辑标签
最多设置5个标签!
FPGA
保存
关闭
×
关闭
举报内容
检举类型
检举内容
检举用户
检举原因
广告推广
恶意灌水
回答内容与提问无关
抄袭答案
其他
检举说明(必填)
提交
关闭
×
关闭
您已邀请
15
人回答
查看邀请
擅长该话题的人
回答过该话题的人
我关注的人
一周热门 更多>