网上有很多关于pos机按键设置,「正点原子FPGA连载」第十章 触摸按键控制LED灯实验的知识,也有很多人为大家解答关于pos机按键设置的问题,今天pos机之家(www.poszjia.com)为大家整理了关于这方面的知识,让我们一起来看下吧!
本文目录一览:
1、pos机按键设置
pos机按键设置
1)实验平台:正点原子开拓者FPGA开发板
2)摘自《正点原子开拓者FPGA开发指南》
关注官方微信号公众号,获取更多资料:正点原子
第十章 触摸按键控制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 moduletouch_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 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
36
37 //根据上升沿使能信号切换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
44
45 endmodule
第23行至35代码为一个经典的边沿检测电路,通过检测touch_key的上升沿来捕获按键按下的信号,一旦检测到按键按下,输出一个时钟周期的脉冲touch_en。每当检测到touch_en为高电平,led取反一次。
为了验证我们的程序,我们在modelsim内对代码进行仿真。
Test bench模块代码如下:
1 `timescale 1ns/1ns
2 module tb_touch_led();
3
4 //parameter define
5 parameter T =20 ; //时钟周期
6
7 //reg define
8 regsys_clk;
9 regsys_rst_n;
10 regtouch_key;
11
12 //wire define
13 wire led;
14
15 //*****************************************************
16 //** main code
17 //*****************************************************
18
19 //给输入信号初始值
20 initial begin
21 sys_clk <=1\'b0; //时钟信号初始状态为0
22 sys_rst_n <=1\'b0; //复位信号初始状态为0
23 touch_key <=1\'b0; //触摸按键信号初始状态为0
24 #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所示,查看图中红色矩形框中是否已经加载下载文件(sof文件)。如果没有,则需要通过点击“Add File”按钮添加流水灯工程中touch_led/par/output_files目录下的“touch_led.sof”文件。
下载完成后,就可以在板卡上测试触摸按键控制led的亮灭了,如图 10.5.2所示。
以上就是关于pos机按键设置,「正点原子FPGA连载」第十章 触摸按键控制LED灯实验的知识,后面我们会继续为大家整理关于pos机按键设置的知识,希望能够帮助到大家!
