打字测试网站源码分享是多少 在线测试打字速度网站

大家好,关于打字测试网站源码分享是多少很多朋友都还不太明白,今天小编就来为大家分享关于在线测试打字速度网站的知识,希望对各位有所帮助!

触摸按键输入检测

实验目的

掌握STM32GPIO输入检测原理。掌握触摸按键检测电路的设计:触摸芯片的工作原理。掌握触摸按键检测的程序设计及算法。

实验内容

编写程序实现对触摸按键的检测。

硬件电路设计

开发板触摸按键硬件电路

触摸按键是电路中常用的一种开关元器件,也是一种常用的人机接口。因触摸按键具有坚固耐用、反应速度快、节省空间、易于操作等优点,而得到广泛的应用。

根据工作原理不同,触摸按键可以分为四大类:电阻式、电容式、红外线式和表面声波式。电阻式、红外线式和表面声波式触摸按键主要应用于触摸屏上,单个按键很少使用。

IK-ZET6开发板上设计了1个电容式触摸按键,该触摸按键电路采用专门触摸按键检测芯片JR223B,检测电路如下图。

图1:开发板触摸按键检测电路

1个触摸按键占用的单片机的引脚如下表:

表1:触摸按键引脚分配

KEY

形状

引脚

说明

触摸按键

白色环纹

PE1

独立GPIO

注:独立GPIO表示开发板没有其他的电路使用这个GPIO。

触摸按键检测IC

JR223B是电容式单键触摸按键IC,电压输入范围为2.0V~5.5V。JR223B利用操作者的手指与触摸按键焊盘之间产生电荷电平来进行检测,通过监测电荷的微小变化来确定手指接近或者触摸到感应表面。没有任何机械部件,不会磨损,其感测部分可以放置到任何绝缘层(通常为玻璃或塑料材料)的后面,很容易制成与周围环境相密封的键盘。

下面介绍下JR223B电容式单键触摸芯片的引脚图和引脚定义。

图2:触摸芯片引脚图

表2:触摸芯片引脚定义

引脚号

引脚名称

类型

详细说明

1

OUT

OutPut

电平输出脚

2

GND

POWER

负电源,地

3

S0

InPut

传感器输入检测脚

4

SLH

I-PL

输出高低电平选择,系统内置上拉电阻

5

VDD

POWER

正电源

6

STG

I-PL

模式选择脚,系统内置上拉电阻

SLH引脚用于设置JR223B的输出方式。

1)SLH=0:触摸时,JR223B的OUT引脚输出高电平,即高电平有效。

2)SLH=1:触摸时,JR223B的OUT引脚输出地电平,即低电平有效。

STG引脚用于设置JR223B的工作模式。

1)STG=0:JR223B工作在LEVELHold模式。

2)STG=1:JR223B工作在ON/OFF模式。

表3:触摸芯片模式输出控制

STG

SLH

详细说明

0

0

LEVELHold模式,高电平有效,CMOS输出

0

1

LEVELHold模式,低电平有效,CMOS输出

1

0

ON/OFF模式,上电状态为CMOS低电平输出

1

1

ON/OFF模式,上电状态为CMOS高电平输出

灵敏度调节:

1)触摸芯片S0引脚上会外接一个外部电容,该电容称为灵敏度调节电容。

2)可通过选择不同容值的灵敏度调节电容实现对触摸灵敏度的调节。

3)灵敏度调节电容的容值必须在(0~50pF)范围内。

4)灵敏度调节电容的容值越大,灵敏度就越低,感应面板的厚度就越薄,反之,灵敏度调节电容的容值越小,灵敏度就越高,感应面板的厚度就越厚。

触摸芯片供电:触摸芯片VDD引脚供电需稳定,必要时可加LDO芯片实现。

选择哪种模式输出控制方式

用户可以根据自己项目应用的需要,来设置触摸芯片的STG和SLH引脚,实现对触摸芯片模式输出控制的选择。艾克姆科技IK-ZET6开发板将触摸芯片的STG和SLH引脚均通过下拉电阻置低,这样,触摸时,JR223B的OUT引脚输出高电平,不触摸时,JR223B的OUT引脚输出高电平。这样设计的原因是:

实现触摸按键的输出和轻触按键的电路输出刚好是反的,作为开发板,要方便用户测试,2种不同类型的输出方式更方便我们使用,另外在后续的实验中我们我们还会用到按键信号的上升沿和下降沿,这时就可以通过轻触键和触摸按键来获取,而不需要另外接线。选择LEVELHold模式,可保证单片机对触摸按键的检测引脚电平是恒定的,有利于检测。注:开发板轻触按键电路是按键按下时,电路输出低电平,无按键按下时电路输出高电平。

软件设计

GPIO寄存器汇集

STM32F103提供了10个用于操作GPIO的寄存器,如下表所示:

表4:GPIO相关寄存器

序号

寄存器名

读/写

功能描述

1

GPIOx_CRL

读/写

端口配置低寄存器。

2

GPIOx_CRH

读/写

端口配置高寄存器。

3

GPIOx_IDR

只读

端口输入数据寄存器。

4

GPIOx_ODR

读/写

端口输出数据寄存器。

5

GPIOx_BSRR

只写

端口位设置/清除寄存器。

6

GPIOx_BRR

只写

端口位清除寄存器。

7

GPIOx_LCKR

读/写

端口配置锁定寄存器。

8

AFIO_EVCR

读/写

事件控制寄存器。

9

AFIO_MAPR

读/写

复用重映射和调试I/O配置寄存器。

10

AFIO_EXTICRy

读/写

外部中断线路0-15配置寄存器。

注:x取值:A、B、C、D、E、F、G,y取值:1、2、3、4。

每一种寄存器详细的描述在这里不做具体的介绍,大家可以参考目录:“第1部分:开发板硬件资料”—>“2-芯片资料”中“STM32英文参考手册_V15”或“STM32中文参考手册_V10”对应的GPIO章节的寄存器部分认真研读。

GPIO库函数版本编写程序

官方提供的最终库函数版本是V3.5版本,该版本库函数提供了17个与GPIO操作有关的库函数,如下表所示:

表5:GPIO相关库函数汇集

序号

函数名

功能描述

1

GPIO_DeInit

将外设GPIOx寄存器重设为缺省值。

2

GPIO_AFIODeInit

将复用功能(重映射事件控制和EXTI设置)重设为缺省值。

3

GPIO_Init

将GPIO_InitStruct中指定参数初始化外设GPIOx寄存器。

4

GPIO_StructInit

把GPIO_InitStruct中的每一个参数按缺省值填入。

5

GPIO_ReadInputDataBit

读取指定端口管脚的输入。

6

GPIO_ReadInputData

读取指定的GPIO端口输入。

7

GPIO_ReadOutputDataBit

读取指定端口管脚的输出。

8

GPIO_ReadOutputData

读取指定的GPIO端口输出。

9

GPIO_SetBits

设置指定的数据端口位。

10

GPIO_ResetBits

清除指定的数据端口位。

11

GPIO_WriteBit

设置或者清除指定的数据端口位。

12

GPIO_Write

向指定GPIO数据端口写入数据。

13

GPIO_PinLockConfig

锁定GPIO管脚设置寄存器。

14

GPIO_EventOutputConfig

选择GPIO管脚用作事件输出。

15

GPIO_EventOutputCmd

使能或者失能事件输出。

16

GPIO_PinRemapConfig

改变指定管脚的映射。

17

GPIO_EXTILineConfig

选择GPIO管脚用作外部中断线路。

注:x取值:A、B、C、D、E、F、G。

每一种寄存器详细的描述在这里不做具体的介绍,大家可以参考目录:“第1部分:开发板硬件资料”—>“2-芯片资料”中“STM32固件库使用手册的中文翻译版”对应的GPIO章节的库函数部分认真研读。

触摸按键的输入检测

注:本节对应的实验源码是:“实验4:触摸按键输入检测”。

工程需要用到的库文件

在使用库函数建“实验4:触摸按键输入检测”工程时,需要用到的c文件如下表所示。

表6:实验需要用到的C文件

序号

文件名

后缀

功能描述

1

stm32f10x_rcc

.c

复位与时钟控制器。

2

stm32f10x_gpio

.c

通用输入输出。

注:所建工程必须添加上面c文件。

可按下图所示在新建工程时添加需要的c文件。

图3:在新建工程中添加所需库函数c文件

表7:实验需要用到的H文件

序号

文件名

后缀

功能描述

1

stm32f10x_rcc

.h

复位与时钟控制器。

2

stm32f10x_gpio

.h

通用输入输出。

注:所建工程必须添加上面h文件所在的目录:..\\..\\Lib\\F10x_FWLIB\\inc。

在使用该实验工程时,需要用到的h文件如表5所示。需要在MDK中点击魔术棒,打开工程配置窗口,按照下图所示添加头文件包含路径。

图4:如何添加头文件包含路径

编写代码

首先是调用库函数完成用户指示灯D1和触摸按键的初始化配置,初始化代码如下。

代码清单:初始化用户指示灯D1的GPIO引脚

/****************************************************************************描述:初始化单片机控制D1的引脚PG6,并将D1的初始状态设置为熄灭*参数:无*返回值:无**************************************************************************/voidled_init(void){//定义IO初始化配置结构体GPIO_InitTypeDefGPIO_InitStructure;//打开PG端口时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOG,ENABLE);//配置的IO是PG6GPIO_InitStructure.GPIO_Pin=GPIO_Pin_6;//配置为通用推挽输出GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;//IO口速度为50MHzGPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;//调用库函数GPIO_Init()配置IOGPIO_Init(GPIOG,&GPIO_InitStructure);//设置D1初始化状态为熄灭GPIO_SetBits(GPIOG,GPIO_Pin_6);}

代码清单:初始化触摸按键的GPIO引脚

/****************************************************************************描述:初始化单片机检测触摸按键的引脚PE1*参数:无*返回值:无**************************************************************************/voidtouchkey_init(void){//定义IO初始化配置结构体GPIO_InitTypeDefGPIO_InitStructure;//打开PE端口时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE,ENABLE);//配置的IO是PE1GPIO_InitStructure.GPIO_Pin=GPIO_Pin_1;//配置为上拉输入GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPU;//调用库函数GPIO_Init()配置IOGPIO_Init(GPIOE,&GPIO_InitStructure);}

然后,在主函数中加入对触摸按键GPIO口PE1检测的函数,一旦检测到PE1为高电平,先软件上进行按键消抖设计,再将用户指示灯D1点亮。若人手不触摸触摸按键,则检测到PE1为低电平,则将用户指示灯D1熄灭。

代码清单:主函数

intmain(void){//初始化用于驱动指示灯D1的引脚PG6led_init();//初始化用于检测触摸按键的引脚PE1touchkey_init();//主循环while(1){//调用库函GPIO_ReadInputDataBit()检测触摸按键对应引脚PE1的电平是否为低电平//(可参考开发板原理图易知当手指触摸触摸按键感应区域时,PE1会有高电平信号)if(GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_1)==1){//软件延时10ms,如果延时后按键S1的电平依然没有变化,说明按键确实被有效操作,简称按键防抖动sw_delay_ms(10);//检测触摸按键对应引脚PE1的电平依然为低电平,即手指触摸触摸按键if(GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_1)==1){//驱动LED指示灯D1的引脚(PG6)输出低电平,即点亮D1GPIO_ResetBits(GPIOG,GPIO_Pin_6);//等待触摸按键释放,即如果PE1一直为高电平,会一直执行空命令while(GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_1)==1){;//条件GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_1)==1成立,会执行这个空命令}//触摸按键释放,会执行下一行语句,即驱动LED指示灯D1的引脚(PG6)输出高电平,熄灭D1GPIO_SetBits(GPIOG,GPIO_Pin_6);}}}}

实验步骤

解压“…\\第3部分:标准库教程和实验源码\\1-基础实验程序\\”目录下的压缩文件“实验4:触摸按键输入检测”,将解压后得到的文件夹拷贝到合适的目录,如“D\\STM32F103ZET6”。启动MDK5.23。在MDK5中执行“Project→OpenProject”打开“…\\TOUCH_KEY\\projec”目录下的工程“TOUCH_KEY.uvproj”。点击编译按钮编译工程。注意查看编译输出栏,观察编译的结果,如果有错误,修改程序,直到编译成功为止。编译后生成的HEX文件“TOUCH_KEY.hex”位于工程目录下的“Objects”文件夹中。点击下载按钮下载程序。如果需要对程序进行仿真,点击Debug按钮,即可将程序下载到STM32F103ZET6中进行仿真。程序运行后,可观察到用手触摸开发板右下角的触摸按键对应用户指示灯D1状态会亮,否则用户指示灯D1状态会灭。

如果你还想了解更多这方面的信息,记得收藏关注本站。

Published by

风君子

独自遨游何稽首 揭天掀地慰生平