基于STM8的触摸按键方案

合集下载

STM8的按键程序学习笔记

STM8的按键程序学习笔记
{
key_delay_count++; //延时计数器开始计数
if(key_delay_count>=65530)
{key_delay_count=0;key_down_IF=0;} //按键按下时间过长,则是故障,不执行按键反馈
if(key_delay_count>=key_delay_long)
//#define key_1_in() {(GPIO_ReadInputPin(GPIOC, GPIO_PIN_5)==SET)? 1:0}
/*设置端口按键中断的触发方式下降沿和低电平触发*/
#define key_int_way EXTI_SetExtIntSensitivity(EXTI_PORT_GPIOC, EXTI_SENSITIVITY_FALL_ONLY);
//#define key_short 0x01; //定义短按键值,按键按下后根据按键1号按键短按最终键值为0x11,长按为0x12.类推
//#define key_long 0x02; //定义长按键值,
//#define key_short 0x01;
//#define key_short 0x01;
注意:系统中断函数中有按键扫描的部分程序INTERRUPT_HANDLER(EXTI_PORTC_IRQHandler, 4)等。
调用方法:
void key_port_init();//按键端口的定义
void scan_key();//按键的扫描程序,放在定时器中断中,定时器1ms中断。
extern unsigned char key_down_IF=0x00; //在中断函数中加入变量声明
void key_interrupt_do()

stm8s触摸按键

stm8s触摸按键

目录
目录
用于触摸感应应用的RC感应原理
1 RC 感应原理 .............................................................................................................3 2 硬件实现 ...................................................................................................................5 3 软件实现 ...................................................................................................................6
图8 触摸效果实例
3.4
多次测量以及高频噪声的去除
为了提高测量的精确度,并去除高频噪声,有必要对VIH和VIL进行多次的测量,然后再决定是否 有按键被有效“触摸”。多次测量的次数有两种办法决定:第一和MCU核有关,但是一个固定 值;另外一个就是可配置的数值(从TS固件库的配置文件可以修改)。 对STM8芯片来说,固定的多次测量的次数为8(即进行8次VIH测量和8次VIL测量)。 图9 测量的种类
C = εRε 0 A d
图1 RC网络上的压降
固定电压施加在VIN,VOUT的电压随着电容值的变化而相应增加或者降低, 如图2所示。 图2 测量充电时间
通过计算VOUT的电压达到阀值VTH所需要的充电时间(tC),来得到电容值(C)。 在触摸感应应用中,电容值(C)由两部分组成:固定电容(电极电容,CX)和当人手接触或者靠近 电极时,由人手带来的电容(感应电容,CT)。电极电容应该尽可能的小,以保证检测到人手触 摸。因为通常人手触摸与否,带来的电容变化一般就是几个pF(通常5pF)。 利用该原理,就可以检测到手指是否触摸了电极。

基于STM8的触摸按键方案

基于STM8的触摸按键方案

基于STM8的触摸按键方案引言:触摸按键已经成为现代电子产品中的一种常用的用户输入方式。

相比传统的机械按键,触摸按键不需要机械结构,大大降低了产品的故障率,并且能够提供更加灵敏的触摸交互体验。

本文将介绍基于STM8的触摸按键方案,涵盖了原理、设计要点以及实现方法等内容。

1.原理:触摸按键的原理是利用人体电容来实现电压变化的检测。

当人体接近触摸板时,人体的电容会改变触摸板上的电场分布,从而引起电压的变化。

通过测量这种电压变化,可以检测到用户的触摸行为。

2.设计要点:(1)电源管理:触摸按键需要为触摸芯片提供稳定的电源。

在设计电源管理时,需要考虑到触摸板的功耗、电源稳定性以及电池寿命等因素;(2)电容检测:电容检测是触摸按键的核心技术,需要选取合适的电容检测方案,并且能够准确地检测到用户的触摸行为;(3)噪声过滤:触摸按键会受到环境噪声的干扰,需要采取一定的噪声过滤措施,提高触摸的可靠性;(4)通信接口:触摸按键会通过通信接口与主控芯片进行数据传输,需要选择合适的通信接口,并且确保通信的可靠性和稳定性。

3.实现方法:(1)硬件设计:首先,需要设计触摸板电路,包括电容检测电路、滤波电路和通信接口电路等;其次,需要设计电源管理电路,确保为触摸芯片提供稳定的电源。

(2)软件设计:基于STM8的触摸按键方案可以采用定时器+IO口中断的方式来实现。

具体流程如下:i.初始化定时器和IO口中断;ii. 定时器中断发生时,通过IO口中断判断电容的充放电状态,将结果保存;iii. 主循环中检测保存的触摸状态,通过通信接口将其传输给主控芯片。

4.结论:。

基于单片机的电容感应式触摸按键原理与程序——C程序

基于单片机的电容感应式触摸按键原理与程序——C程序

基于单片机的电容感应式触摸按键原理与程序——C程序经过上篇文章的介绍,基于单片机的电容感应式触摸按键的实现方法也就没什么神秘的了,而且其控制程序也就呼之欲出了,核心就是用STC单片机的片内ADC实时的进行数据转换与比对判断,但虽然原理简单,但编程思路还是要啰嗦几句,想法是先设置一个空数组作为键值数据暂存器,每次上电运行时,经过短暂的等待,待电源和系统稳定后,扫描一次键盘,将无操作时的键值加以记录,而后循环扫描键盘与之对比,当差值符合条件是,判断为有键按下,同时返回键号及键控指令。

程序如下:/************************************************************** **************** STC单片机电容感应按键C程序---------原创作者wannenggong*************************************************************** ***************//*======================================== =========================应用电路见原理篇的图1,图中:PWM-IN端输入频率为380KHz、占空比75%的矩形脉冲,定义按键K1为ADC0接P1.0,K2为ADC1接P1.1;K1有指触摸时LED1亮LED2灭,K2有指触摸时LED2亮LED1灭;按键面板玻璃厚度为5mm。

程序应用时需检查STC12C2052AD.H文本文档中有无如下设置,如没有时需要加入并保存,否则ADC相关函数将报错#define ADC_POWER 0x80 //ADC模块电源控制位#define ADC_SPEEDLL 0x00 //每次转换需要1080个时钟周期#define ADC_SPEEDL 0x20 //每次转换需要810个时钟周期#define ADC_SPEEDH 0x40 //每次转换需要540个时钟周期#define ADC_SPEEDHH 0x60 //每次转换需要270个时钟周期#define ADC_FLAG 0x10 //ADC转换完成标志#define ADC_START 0x08 //ADC开始转换控制位#define ADC_CHS1 0x02 //ADC通道选择位1#define ADC_CHS0 0x01 //ADC通道选择位0ADC转换程序参照宏晶官网程序改编====================================== ============================*/#include#include#define uint unsigned int#define uchar unsigned char/***********I/O口位功能定义*****************************************/sbit LED1=P3^4;sbit LED2=P3^5;/************应用变量设置*******************************************/bit f1,f2;uint FLG[2]; //初始键值寄存uint zz,RV,R,RR;uchar ee=1,n=0,y;/************************************************************** *****/void Delay(uint x)//用于ADC转换及其它{uint y;while (x--)y = 5000;while (y--);}}/******初始模数转换寄存器函数****************************************/ void InitADC() {ADC_DA TA = 0; //ADC数据寄存器清零ADC_CONTR = ADC_POWER | ADC_SPEEDLL;Delay(2);}/****8位ADC转换执行函数***********************************************/ uint GetADCResult(uchar ch){ADC_CONTR = ADC_POWER | ADC_SPEEDLL | ch | ADC_START;_nop_(); //必要的查询等待_nop_();_nop_();_nop_();while (!(ADC_CONTR & ADC_FLAG));//等待标志位ADC_CONTR &=~ADC_FLAG; //关闭ADCreturn ADC_DA TA; //返回AD转换完成的8位数据(16进制)}/*************按键初值保存函数*****************************************/ //系统上电时更新一次void InitDA T(){uchar e;Delay(50);//延时等待系统稳定很有必要for(e=0;e<2;e++){FLG[e]=GetADCResult(e);Delay(5);}}/*****************开关控制函数****************************************/ void key_control(void) {R=0;RV=GetADCResult(ee-1);R=(FLG[ee-1]-RV);if(R>=0x17 && R<=0x1d)R=ee;{R=0;ee++;}if(ee>2)ee=1;switch(R){case 1://K1{f1=1;f2=0;}break;case 2://K2{f2=1;f1=0;}break;default : R=0;}}/******开关控制执行与显示选择函数************************************/void Auto(void){key_control();if(f1==0 && f2==0){LED1=LED2=1;}if(f1==1){LED1=0;LED2=1;}if(f2==1){LED1=1;LED2=0;}}/*********主函数*****************************************************/main(){P1M0 = 0x03; //设置P1.0/P1.1为高阻状态P1M1 = 0x00;InitADC();InitDA T();while(1){key_control();Auto();}}到此,关于电容感应按键的实验就完成了,制作是实验性质的,结果可供参考,经验仅供交流,如用于商业用途而产生的问题本人盖不负责,若欲转载(贴)请注明出处并望告知,若有用于广告引贴,本人保留追究的权力。

基于单片机STM8S103和ST05A的触摸按键设计

基于单片机STM8S103和ST05A的触摸按键设计

消 费 电子开 发 的一款 8位 微控 制器 , 拥 有 良好 的性价 比 。三 级流 水线 的 哈佛 结构 ,8 k B字节 的系 统 内可编 程F l a s h ,擦 写寿命 1 0 , 0 0 0次 ,5 1 2 B的 E E P RO M 擦 写 寿命 1 0 0 , 0 0 0次 ,l k B 字节 的片 内 R AM , 可 以对锁 定位 进 行编 程 以实现 用户 程序 的加 密 。 灵 活 的时钟控
c h i p we r e f o c u s e d o n . T h r o u g h t h e c i r c u i t d i a g r a m, o s c i l l o g r a m a n d l f o w c h a r t , t h e h a r d wa r e c i r c u i t a n d s o f t wa r e d e s i g n i d e a s we r e r e a l i z e d . A l o w- c o s t s o l u t i o n f o r t h e t o u c h — k e y wa s p r o v i d e d .
Ya n Ai - j u n , F a n H a i — Mi n g , Z h o u J u n
( T h e 7 1 8 t h Re s e a r c h I n s t i t u t e o f CS I C , Ha n d a n 0 5 6 0 2 7 , C h i n a )
机 芯片 , 通 过 C语 言编 程 技术 实现 软件 编程 设 计[ , 。
1 S T M 8 S 1 0 3单片机及触摸感应器简 介

使用普通IO口实现电容触摸感应的解决方案

使用普通IO口实现电容触摸感应的解决方案

技术背景现在电子产品中,触摸感应技术日益受到更多关注和应用,不仅美观耐用,而且较传统机械按键具有更大的灵敏度、稳定性、可靠性,同时可以大幅提高产品的品质。

触摸感应解决方案受到越来越多的IC设计厂家的关注,不断有新的技术和IC面世,国内的公司也纷纷上马类似方案。

Cpress公司的CapSense™技术可以说是感应技术的先驱,走在了这一领域的前列,在高端产品中有广泛应用,MCP推出了mTouch™,AT也推出了QTouch™技术,FSL推出的电场感应技术与MCP 的电感触摸也别具特色,甚至ST也有QST产品。

但是目前所有的触摸解决方案都使用专用IC,因而开发成本高,难度大,而本文介绍的基于RC充电检测(RC Acquisition)的方案可以在任何MCU上实现,是触摸感应技术领域革命性的突破。

首先介绍了RC充电基础原理,以及充电时间的测试及改进方法,然后详细讨论了基于STM8S单片机实现的硬件、软件设计步骤,注意要点等。

一、RC充电检测基本原理RC充电检测基本原理是对使用如PCB的电极式电容的充电放电时间进行测量,通过比较在人体接触时产生的微小变化来检测是否有‘按下’动作产生,可选用于任何单独或多按键、滚轮、滑条。

如图1(a)所示,在RC网络施加周期性充电电压Vin,测量Vout会得到如(b)的时序,通过检测充电开始到Vout到达某一门限值的时间tc的变化,就可以判断出是否有人体接触。

图2显示出有人体接触时充电时间会变长。

实现电路如图3,使用一个I/O口对PCB构成的电容充电,另一个I/O口测量电压,对于多个按键时使用同一个I/O口充电。

R1通常为几百K到几M,人体与PCB构成的电极电容一般只有几个pF,R2用于降低噪声干扰,通常为10K。

二、充电时间测量方法对充电时间的测量可以使用MCU中定时器的捕捉功能,对于多个按键一般MCU没有足够的定时器为每个按键分配一个,也可以使用软件计时的方法,这要求能对MCU的时钟精确计数,并且保证每个周期的时钟个数保持一定。

燕山大学仪表stm8实习之三个按键控制3个频率

燕山大学仪表stm8实习之三个按键控制3个频率
{
/* User can add his own implementation to report the file name and line number,
ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */
#define BUTTON_PORT (GPIOC)
#define BUTTON1_PIN (GPIO_PIN_1)
#define BUTTON2_PIN (GPIO_PIN_2)
#define BUTTON3_PIN (GPIO_PIN_3)
#define LEDS_PORT (GPIOD)
//设置外部中断为C端口, 该函数为中断响应函数
@far @interrupt void EXTI_PORTC_IRQHandler (void)
{
unsigned char i,j,k;
i=GPIO_ReadInputPin (GPIOC,BUTTON1_PIN);
j=GPIO_ReadInputPin (GPIOC,BUTTON2_PIN);
while (1)
{
int i=0;
GPIO_WriteReverse(GPIOD, LED1_PIN | LED2_PIN | LED3_PIN);
for ( i = 0; i < 2; i++)
{
Delay((u16)60000);
/**
根据按键中断《GPIOC,(GPIO_PIN_1)被设为外部中断设置。
按键改变时钟周期
注意要将按键TLI和C1相连

stm8引脚能否做成触摸输入

stm8引脚能否做成触摸输入

stm8 引脚能否做成触摸输入
我曾开发带有触摸按键功能的消费类电子产品,在起初也是不知道STM8 引脚可以实现触摸这个功能,所以这里写给大家。

1
写在前面
我们开发带有触摸功能的产品时,可能首先考虑的就是购买一个触摸芯片。

但是对于消费类电子,如果你的产量较大,可能就会考虑这1,2 块的触摸芯片的成本。

此时,使用STM8,或者STM32 作为主控的IC 可以实现触摸功能就显得比较重要了。

由于很多人不知道这个功能,这里先让大家了解并熟悉这一项触摸按键功能。

2。

STM8T141:触摸或接近检测方案

STM8T141:触摸或接近检测方案
低功耗模式 下为 1 A) 1
在暗处寻找 ( ID)应用 中采用接 FT
近 探 测
S M8 1 X E A T T . V L评估板 主要 4 特 性


片上集成 电压稳压器
环境补偿滤波器 用户可配置选项包括 :


卫生器具和白色家电
利用板载 P CB感应电极和 15 .mm
增强接近检测能力。
s M8 1 1 T T 4 主要 特 性

s M8 1 1 T T 4 应甬

S M8 1 1接 触 和 接 近 电 容 传 感 T T4
器 。 它 包 含 一 个 S M8 4 T T1 1评 估 板 MB 5 8 8以 及 一 套 即 插 即 用 型 模
接触或者接近探测 ( 几厘米 )
Fj oyH n o gL . ui l o gK n t p d


图3 TM8 1 1 S T 4 评估板( 8 8电路图 MB 5 )



。 II —I l l
lL IL— d L

利用跳线进 行电极接地或屏蔽配置
4个预先配置 即插型模块 ( 8 6) MB 5


用于危险环境中的防爆型人机接 口
设备

Hale Waihona Puke 绝缘面板进行接触检测 通过堆 叠亚 克力面板很容 易进行绝
缘调节

4个检测阈

4个输 出模式
4个低功耗模式

S TM8 x E AL评 T1 . v 4 估板
S M8 1 X E A T T 4 . V L是 一 套 评

单片机实现触摸键盘技术

单片机实现触摸键盘技术

单片机实现触摸键盘技术触摸键盘技术可以通过单片机实现,这种技术使用户能够通过触摸屏幕或触摸按键进行输入操作,替代了传统的物理按键,提供了更加便捷和灵活的输入方式。

触摸键盘技术的实现涉及到多个方面的知识,包括硬件设计和软件编程。

在硬件设计方面,我们需要选择合适的触摸屏幕或触摸按键模块,并与单片机进行连接。

在软件编程方面,需要编写相应的驱动程序和应用程序,实现触摸键盘的功能。

下面将详细介绍触摸键盘技术的实现步骤。

一、选择合适的触摸屏幕或触摸按键模块在选择触摸屏幕或触摸按键模块时,需要考虑它们的硬件接口和性能指标。

通常情况下,触摸屏幕模块使用SPI或I2C接口与单片机进行通信,触摸按键模块使用GPIO接口进行输入。

此外,还需要考虑模块的精度、灵敏度、稳定性等性能指标,以满足具体应用需求。

二、连接触摸屏幕或触摸按键模块将选定的触摸屏幕或触摸按键模块与单片机进行连接。

具体的连接方式取决于模块的硬件接口。

如果是触摸屏幕模块,可以通过SPI或I2C接口连接到单片机的相应引脚上。

如果是触摸按键模块,可以通过GPIO接口连接到单片机的输入引脚上。

三、编写触摸键盘驱动程序编写触摸键盘的驱动程序,用于与触摸屏幕或触摸按键模块进行通信,并获取用户输入的数据。

驱动程序需要实现以下功能:1.初始化模块:初始化触摸屏幕或触摸按键模块,配置相关参数。

2.检测触摸事件:周期性地检测触摸事件,包括触摸按下、触摸移动和触摸释放等事件。

3.获取坐标数据:在触摸事件发生时,获取触摸坐标数据,可以通过模块提供的接口实现。

4.处理输入数据:根据获取到的坐标数据,将其转换为具体的按键输入,可以使用坐标与按键的对应关系表进行转换。

四、编写触摸键盘应用程序在单片机上编写触摸键盘的应用程序,用于处理用户的输入和实现相应的功能。

应用程序需要实现以下功能:1.显示界面:根据应用需求,通过单片机的显示模块显示相应的界面,如按钮、菜单等。

2.响应输入:通过触摸键盘驱动程序获取用户的输入数据,并根据输入数据执行相应的操作,如按钮的点击、菜单的选择等。

触摸按键方案

触摸按键方案

触摸按键方案触摸按键技术在现代电子设备中得到了广泛的应用,从智能手机到家用电器,触摸按键为用户提供了一种直观且方便的操作方式。

本文将介绍触摸按键的原理、不同的实现方案以及其在不同领域的应用。

一、触摸按键的原理触摸按键的原理基于电容感应技术。

当手指接触触摸面板时,由于人体是导电的,触摸面板上的电场将发生变化。

传感器会检测这种变化,并将其转化为数字信号,从而实现触摸输入的功能。

二、触摸按键的实现方案1. 电阻式触摸屏电阻式触摸屏是最早应用的触摸按键技术之一。

它由两层透明导电的薄膜组成,中间隔着微小的空气间隙。

当手指触摸屏幕时,两层导电薄膜会接触到一起,形成一个电路。

控制器会通过测量电流的变化来确定触摸位置。

电阻式触摸屏具有较好的耐久性和适应性,但其精度和响应速度相对较低。

2. 电容式触摸屏电容式触摸屏是目前应用最广泛的触摸按键技术。

它采用导电涂层覆盖整个触摸面板,并搭配控制电路进行工作。

当手指接触触摸屏时,体内的电荷会改变触摸屏的电场分布,控制电路会感知到这种变化,并确定触摸位置。

电容式触摸屏具有较高的触摸精度和响应速度,支持多点触控和手写输入,适用于大多数电子设备。

3. 声表面波触摸屏声表面波触摸屏利用超声波传感器探测触摸位置,没有导电薄膜覆盖在触摸屏上。

当手指触摸屏幕时,触摸位置会引起超声波的衰减,传感器会检测到这种信号,并确定触摸位置。

声表面波触摸屏具有较高的可靠性和耐久性,但成本相对较高,应用程度相对较低。

三、触摸按键在不同领域的应用1. 智能手机和平板电脑触摸按键是智能手机和平板电脑的标配功能。

用户可以通过触摸屏幕进行各种操作,如拨打电话、发送短信、浏览网页等。

触摸屏幕的灵敏度和流畅性对用户体验至关重要。

2. 家用电器越来越多的家用电器开始采用触摸按键技术,如微波炉、冰箱、洗衣机等。

触摸按键取代了传统的物理按键,使电器的操作更加简单和直观。

同时,触摸按键也提供了更好的防水性能,增加了产品的安全性和可靠性。

单片机实现触摸键盘技术

单片机实现触摸键盘技术

单片机实现触摸键盘技术触摸键盘技术是一种常见的输入技术,它广泛应用于各种电子设备中,如计算机、智能手机、平板电脑等。

对于单片机来说,实现触摸键盘技术可以扩展其输入功能,使其更加易用和灵活。

本文将介绍如何利用单片机实现触摸键盘技术,包括工作原理、设计思路和实现方法等。

一、工作原理触摸键盘技术的核心原理是利用人体电容来检测触摸操作。

当人体接近或触摸到触摸键盘上的电极时,会发生电荷传导,从而改变触摸键盘电极上的电位。

单片机通过采集这些电位变化,就可以获得用户的输入信息。

二、设计思路实现触摸键盘技术的基本思路是通过电容传感器来检测触摸操作,并将电容传感器的输出信号转换成数字信号,以供单片机进行处理。

具体的设计步骤如下:1.选择电容传感器:根据应用需求选择适合的电容传感器。

常见的电容传感器有电容触摸开关、电容触摸按钮等,可以根据实际情况进行选择。

2.连接电容传感器:将电容传感器与单片机连接起来。

一般情况下,电容传感器会有两个电极,分别连接到单片机的输入引脚和地。

3.设置引脚模式:在单片机的软件中,将连接到电容传感器的引脚设置为输入模式。

4.采集电压数据:通过单片机的模拟输入功能,采集电容传感器引脚上的电压数据。

可以使用ADC(模拟-数字转换器)模块来实现这一功能。

5.判断触摸操作:根据采集到的电压数据,判断是否发生了触摸操作。

可以通过设定一个阈值来判断触摸与非触摸状态。

6.处理触摸信息:如果发生了触摸操作,可以通过单片机的中断功能或轮询方式来获取触摸信息。

根据具体应用需求,可以对触摸信息进行处理,如显示在LCD屏幕上或进行其他操作。

三、实现方法根据具体的单片机型号和开发环境的不同,实现触摸键盘技术的方法会有所不同。

下面以常用的单片机STM32为例,介绍一种实现方法。

1.硬件连接:将电容传感器的输出引脚连接到单片机的一个模拟输入引脚上,并连接到供电地。

可以使用一个电阻将电容传感器的输出与模拟输入引脚串联,以减小输出信号的噪声。

触摸按键方案

触摸按键方案

触摸按键方案在现代科技的发展中,触摸屏技术已经广泛应用于各种设备中,如智能手机、平板电脑、车载导航系统等。

触摸按键方案成为了人机交互领域的重要研究方向之一。

本文将介绍几种常见的触摸按键方案,包括电容触摸按键、电阻触摸按键以及声表面波触摸按键,并对其原理和应用进行详细说明。

一、电容触摸按键方案电容触摸按键方案基于电容原理,通过感应触摸对象与电容探测电极之间的电容变化来实现按键的触发。

电容触摸按键方案具有以下优点:1. 高灵敏度:电容触摸按键可以检测极小的电容变化,触摸时只需轻轻触摸即可触发。

2. 多点触控:电容触摸按键可以实现多点触控,提供更多的交互方式。

3. 高速响应:电容触摸按键的响应速度非常快,可以迅速响应用户的操作。

二、电阻触摸按键方案电阻触摸按键方案基于电阻原理,通过两个电阻层之间的接触来检测按键触发。

电阻触摸按键方案具有以下特点:1. 较低成本:电阻触摸按键的制作成本相对较低,适用于一些低成本的应用场景。

2. 耐用性强:电阻触摸按键具有较好的耐久性,可以经受长时间的使用而不容易损坏。

3. 对环境要求低:电阻触摸按键对环境的要求较低,可以在较恶劣的环境下正常工作。

三、声表面波触摸按键方案声表面波触摸按键方案利用声表面波传感器来检测按键触发,其原理是通过声波在表面传播产生的能量变化来实现按键的触发。

声表面波触摸按键方案具有以下特点:1. 高精度:声表面波触摸按键具有较高的精度,可以提供准确的触摸定位。

2. 抗干扰能力强:声表面波触摸按键具有较好的抗干扰能力,可以在噪音较大的环境下正常工作。

3. 适用范围广:声表面波触摸按键可以适用于各种表面材质,如金属、玻璃、塑料等。

综上所述,电容触摸按键、电阻触摸按键和声表面波触摸按键是目前常见的触摸按键方案。

在选择合适的方案时,可以根据应用场景的需求和预算来综合考虑各种因素。

触摸按键方案的不断创新和改进将为人机交互领域带来更多的可能性和便利性,为用户提供更好的交互体验。

基于单片机的电容感应式触摸按键原理与程序

基于单片机的电容感应式触摸按键原理与程序

基于单片机的电容感应式触摸按键原理与程序——原理近年来,电容感应式触摸按键技术已日臻成熟,在家电领域中,对于各种玻璃面板的家电产品,电容感应式触摸按键,以其高灵敏度、面板免钻孔、安装方便、使用寿命长等优点得以广泛的应用;尤其在许多小家上电诸如电磁炉、音视频设备、电茶壶等等,其应用更是随处可见,但是,毕竟目前这一技术并未完全普及,另外各种专用芯片也尚未统一标准大量上市,出现故障后往往需要更换原厂配件,这就使得业余维修无从下手,目前常见的电容感应式触摸按键的实现方法有两种,一种是专用芯片,有几种键位可选,使用方便,另一种是以单片机为基础通过编程实现,这种方式是将按键功能及其它控制功能综合设计,大大的简化了整个系统的设计,减少了原件降低了成本,应用较多;为此,本文将就玻璃面板式家电上的电容感应式按键的原理进行简单的分析,并且将用STC单片机编程实现电容感式应按键的C源程序及调试方法分享给大家。

图1:如图1所示,是电路原理图,它由两只二极管D1/D2、两只电阻R1/R2、一只充放电电容C0构成,弹簧将Φ12mm的金属片压紧到厚度为5mm的玻璃板的下方,玻璃板的另一面对应金属片的位置就是手指触摸区。

工作原理为:玻璃板接触金属片的附近,有电荷的集聚与其另一表面形成电容结构,无动作时电荷是很微量的电容值也极小,当有手指接触另一侧玻璃表面是,由于人体皮肤所带电荷的参与,使得电荷的运动发生了改变,电容值也会产生很多的变化,这就是感应电容的形成与变化过程,而感应电容的变化,又直接改变了充放电电容的充电电压值,这就给状态的检测提供了依据。

在PWM_IN的高电平段,电源电压经R2、D1给C0充电,在PWM_IN的低电平段,C0经R1、D2对地放电,充放电状态稳定后,ADC0端可以检测到一个稳定的电压值,本系统实测为2.7V左右,当有指触动作时由于感应电容相当于与C0并联了一个电容,其ADC0端检测到的电压将下降,本系统实测为2.3V左右,这个的400mV 的模拟电压量,对于8位ADC而言,是可以准确判别的。

触摸按键方案报告

触摸按键方案报告

触摸按键方案报告触摸按键方案报告一、方案简介电容触摸传感大约在50多年前就已经出现,现在已经变得越来越易于实现且应用更为广泛。

触摸灯是电容触摸开关的一个经典示例。

触摸灯的出现已有很长一段时间,它由一个简单的电容式开关来开启、关闭灯泡及调节灯的亮度。

新技术使得可以对触摸按钮实现更为复杂的控制。

其关键是要有具有混合信号外设的单片机。

单片机提供了完成电容触摸传感、决策、响应以及其他系统相关任务的能力。

目前业内已有好几种电容触摸传感技术存在,多数技术是基于测量由于人手指触摸产生额外电容而改变的频率或占空比。

有些其他的方法则使用电荷平衡或是充电上升及下降时间的测量。

在便携式媒体播放器和移动手持终端等大容量、高可视性产品的应用中,触摸按键已被广泛采用。

由于其具有方便易用,时尚和低成本的优势,越来越多的电子产品开始从传统机械按键转向触摸式按键。

触摸按键方案优点:1、没有任何机械部件,不会磨损,无限寿命,减少后期维护成本。

2、其感测部分可以放置到任何绝缘层(通常为玻璃或塑料材料)的后面,很容易制成与周围环境相密封的键盘。

以起到防潮防水的作用。

3、面板图案随心所欲,按键大小、形状任意设计,字符、商标、透视窗等任意搭配,外型美观、时尚,不褪色、不变形、经久耐用。

从根本上解决了各种金属面板以及各种机械面板无法达到的效果。

其可靠性和美观设计随意性,可以直接取代现有普通面板(金属键盘、薄膜键盘、导电胶键盘)。

4、触摸按键板可提供UART、IIC、SPI等多种接口,满足各种产品接口需求。

二、原理概述如图1所示在PCB上构建的电容器,电容式触摸感应按键实际上只是PCB 上的一小块“覆铜焊盘”,触摸按键与周围的“地信号”构成一个感应电容,当手指靠近电容上方区域时,它会干扰电场,从而引起电容相应变化。

根据这个电容量的变化,可以检测是否有人体接近或接触该触摸按键。

接地板通常放置在按键板的下方,用于屏蔽其它电子产品产生的干扰。

此类设计受PCB上的寄生电容和温度以及湿度等环境因素的影响,检测系统需持续监控和跟踪此变化并作出基准值调整。

专用8键触摸方案CMS8T07B-BWCMTY01应用说明

专用8键触摸方案CMS8T07B-BWCMTY01应用说明

专⽤8键触摸⽅案CMS8T07B-BWCMTY01应⽤说明通⽤触摸芯⽚芯⽚型号:CMS8T07B-BWCMTY011,原理图管脚说明:管脚名称管脚说明GND 接地脚VDD 电源脚SEL 模式选择:接VDD:防⽔功能接GND:组合键功能DATA_OUT 按键编码输出CAP 灵敏度电容(5%误差的涤纶电容)ADJ 按键灵敏度调节脚K1-K8 按键输⼊脚注:1,不⽤的按键可以悬空或接VDD;2,模式选择通过第4脚SEL的接地或接电源选择,芯⽚可以⼯作在防⽔模式或组合键模式下。

2.1 防⽔模式:通过使芯⽚第4脚接地,可使芯⽚进⼊防⽔模式。

在防⽔模式下,⽆论⾯板上有溅⽔、漫⽔甚⾄完全被⽔淹没,按键都可以正确快速的响应。

不同于⽬前⼀般感应按键在⾯板溅⽔、漫⽔时容易误动作,积⽔后反应迟钝或误响应的情况。

在这种模式下,当芯⽚检测到多个按键的时候,会⾃动分辨出感应电容变化最⼤的按键,并给出相应的输出。

防⽔模式的按键响应时间为少于100MS。

防⽔模式下,同⼀时间内只允许响应⼀个按键。

实际使⽤中,像电磁炉、光波炉等容易溅⽔的产品,建议选择防⽔模式。

2.2 组合键模式:通过芯⽚第4脚接电源,可使芯⽚进⼊组合键模式。

在组合键模式下,芯⽚的所有按键完全独⽴,8个按键可以任意组合输出。

在该模式下,如果⾯板漫⽔的情况下,按下⼀个按键有可能会检测到多个按键。

3,灵敏度调节可通过调节电阻或电容来调节触摸按键灵敏度 3.1 灵敏度调节电阻调节第9脚ADJ ⼝的分压电阻Rx ,可以调节按键灵敏度。

调节参数选择如表:灵敏度 1(最灵敏) 2 3 4 5 6 7 8(最不灵敏) ADJ ⼝电压范围 0--1/8VDD1/8VDD- 2/8VDD 2/8VDD- 3/8VDD 3/8VDD- 4/8VDD 4/8VDD- 5/8VDD 5/8VDD- 6/8VDD 6/8VDD- 7/8VDD 7/8VDD--VDD 典型参数Rx开路47K20K12K7.5K4.7K2.4K⼩于0.6K 或短路若要将灵敏度调节到最⾼,可以直接将ADJ ⼝接地,如图:若要将灵敏度调节到最低,可以直接将ADJ ⼝接电源,如图:3.2 灵敏度调节电容芯⽚第6脚为灵敏度调节电容,其调节范围建议选择222-103。

基于STM8的触摸按键方案

基于STM8的触摸按键方案

基于STM8的电容感应式触摸按键方案在电磁炉中的应用1、引言相较于机械式按键和电阻式触摸按键,电容式触摸按键不仅耐用,造价低廉,结构简单易于安装,防水防污,而且还能提供如滚轮、滑动条的功能。

但是电容式触摸按键也存在很多的问题,因为没有机械构造,所有的检测都是电量的微小变化,所以对各种干扰敏感得多。

ST针对家电应用特别是电磁炉应用,推出了一个基于STM8系列8位通用微控制器平台的电容式触摸感应方案,无需增加专用触摸芯片,仅用简单的外围电路即可实现电容式触摸感应功能,方便客户二次开发。

2、方案介绍ST的电容式触摸按键方案通过一个电阻和感应电极的电容CX构成的阻容网络的充电/放电时间来检测人体触摸所带来的电容变化。

如图1所示,当人手按下时相当于感应电极上并联了一个电容CT,增加了感应电极上的电容,感应电极进行充放电的时间会增加,从而检测到按键的状态。

而感应电极可以直接在PCB板上绘制成按键、滚轮或滑动条的应用样式,也可以做成弹簧件插在PCB板上,即使隔着绝缘层(玻璃、树脂)也不会对其检测性能有所影响。

图1 STM8S电容式触摸按键的工作原理电磁炉是采用磁场感应电流的加热原理对食物进行加热。

加热时,通过面板下方的线圈产生强磁场,磁力线穿过导磁体做的锅的底部时,锅具切割交变磁力线而在锅具底部产生涡流使锅底迅速发热,达到加热食物的目的。

在本解决方案中采用44pin的STM8S105S4做按键显示板的主控芯片,控制13个按键的扫描、24个LED及一个4位数码管的显示、I2C与主板的通讯,并留有一个SWIM接口方便工程师调试之用(如图2)。

图2 电磁炉按键板原理STM8S105S4采用的是ST高级STM8内核,具备3级流水线的哈佛结构,3.0~5.5V工作电压,内部16MHz RC 可提供MCU 16MHz工作频率,提供低功耗模式和外设时钟关闭功能,共有34个I/O可用。

STM8S105S4 具有2KB 的RAM和16KB的FLASH,还有可达30万次擦写次数的1KB EEPROM数据存储器。

单片机STM8按键长短按

单片机STM8按键长短按

//------------------------------------------------------------------------------unsigned char Key_Sample1=0; //Key_Sample1当前对按键采样的值unsigned char Key_Sample2=0; //Key_Sample2 上一次对按键采样的值unsigned char Key_Scan_old=0; //上一次有效的键值状态,必需连续两次的采样值相同才能载入该变量unsigned char Key_Down_flag=0; //键盘按下标识,注意是经过消抖后确认的按下标志unsigned int Key_Down_Counter=0; //用于消抖的计数器unsigned char Key_Value=0; //最终经过确认的键值unsigned char Key_flag_long=0; //长按键标识unsigned int Key_Down_Counter_l=0; //长时按键计数器unsigned char Key_flag=1; //按键标志//------------------------------------------------------------------------------void KeyScan_Service(void){Key_Sample1 =(PB_IDR&0x3E); // Key_Sample1 当前对按键采样的值if(Key_Sample1==Key_Sample2) //Key_Sample2 上一次对按键采样的值{if((PB_IDR&0x3E)!=0){if(Key_Down_flag==0){if(Key_Sample1==Key_Scan_old){Key_Down_Counter++; //用于消抖的计数器if(Key_Down_Counter>=10){Key_Down_Counter = 0;Key_Down_flag = 1; //键盘按下标识,注意是经过消抖后确认的按下标志Key_Down_Counter_l=0;Key_Value = Key_Sample1;}}else{Key_Down_Counter = 0;Key_flag_long=0;}}else{Key_Down_Counter_l++;if(Key_Down_Counter_l>=200){Key_flag_long=1; //长时按键标志Key_Down_Counter_l=0;}}}else{if(Key_Down_flag==1){Key_Down_flag = 0;Key_Down_Counter = 0;Key_flag_long = 0;Key_Down_Counter_l=0;Key_flag=1; //短按表示Key_Value=0;}}Key_Scan_old = Key_Sample1; //上一次有效的键值状态,必需连续两次的采样值相同才能载入该变量}Key_Sample2 = Key_Sample1;}/*******************************************************************************Key_flag 短按标志Key_flag_long 长按标志*******************************************************************************/void sky_answer(void){switch (Key_Value){//------------------------------------------------------------------------------case 0x10: //设置PB4 sky1{if(Key_flag==1&&set_num!=0){set_num++; skip=0;Key_flag_long=0;Key_flag=0;if(set_num==1){LED_state=3;move_num=0; //设置}else if(set_num==2){LED_state=4; move_num=0; //周长girth_buff=girth;speaData(girth_buff);if(length_buff!=length){length=length_buff;eeprom_save(1);Motorleng_close();}}else if(set_num==3){LED_state=1; //功能一speaData(SPeed);if(girth_buff!=girth){girth=girth_buff;eeprom_save(3);}}else if(set_num==4) //LED_state=5停止{LED_state=5; updat=1; set_num=0;move_num=0; run_state=0;if(OFF_ON==0)LED_state=5;else LED_state=0;}}else if(Key_flag_long==1&&set_num==0){Key_flag_long=0;Key_flag=0;LED_state=3; //设置set_num=1;length_buff=length;speaData(length_buff);run_state=0;}}break;/******************************************************************************* *******************************************************************************/ case 0x08: //长按清零PB3 sky2{if(Key_flag_long==1){Key_flag_long=0;Key_flag=0;now_length=0;updat=1; run_state=0;girth_DA=0;}else if(Key_flag==1)Key_flag=0;}break;//------------------------------------------------------------------------------case 0x02: //移位PB1 sky4{if(Key_flag==1&&set_num!=0){Key_flag_long=0;Key_flag=0;if(set_num==1) //长度移位{move_num++;if(move_num>5) move_num=0;}if(set_num==2) //周长移位{move_num++;if(move_num>3) move_num=0;}}}break;//------------------------------------------------------------------------------case 0x20: //置数PB1 sky4{if(Key_flag==1&&set_num!=0){skip=0;Key_flag_long=0;Key_flag=0;if(set_num==2){girth_data[3]=DS_data[3];girth_data[2]=DS_data[2];girth_data[1]=DS_data[1];girth_data[0]=DS_data[0];switch(move_num){case 3: {girth_data[3]++; if(girth_data[3]==10) girth_data[3]=0; }break;case 2: {girth_data[2]++; if(girth_data[2]==10) girth_data[2]=0; } break;case 1: {girth_data[1]++; if(girth_data[1]==10) girth_data[1]=0; }break;case 0: {girth_data[0]++; if(girth_data[0]==10) girth_data[0]=0; } break;default: break;}girth_buff=(uint)girth_data[3]*1000+(uint)girth_data[2]*100+girth_data[1]*10+girth_data[0];speaData(girth_buff);}//========================================================= ===============================else if(set_num==1){up_data[5]=DS_data[5];up_data[4]=DS_data[4];up_data[3]=DS_data[3];up_data[2]=DS_data[2];up_data[1]=DS_data[1];up_data[0]=DS_data[0];switch(move_num){case 5: {up_data[5]++; if(up_data[5]==10) up_data[5]=0;} break;case 4: {up_data[4]++; if(up_data[4]==10) up_data[4]=0;} break;case 3: {up_data[3]++; if(up_data[3]==10) up_data[3]=0;} break;case 2: {up_data[2]++; if(up_data[2]==10) up_data[2]=0;} break;case 1: {up_data[1]++; if(up_data[1]==10) up_data[1]=0;} break;case 0: {up_data[0]++; if(up_data[0]==10) up_data[0]=0;} break;default:break;}length_buff=(long)up_data[5]*100000+(long)up_data[4]*10000+(uint)up_data[3]*1000+(uint)up_data[2]*100+up_data[1]*10+up_data[0];speaData(length_buff);}}}break;//------------------------------------------------------------------------------case 0x04: //运行启停{if(Key_flag==1){Key_flag_long=0;Key_flag=0;sky_int();}}break;//------------------------------------------------------------------------------default:break;}}。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

基于STM8的电容感应式触摸按键方案在
电磁炉中的应用
1、引言
相较于机械式按键和电阻式触摸按键,电容式触摸按键不仅耐用,造价低廉,结构简单易于安装,防水防污,而且还能提供如滚轮、滑动条的功能。

但是电容式触摸按键也存在很多的问题,因为没有机械构造,所有的检测都是电量的微小变化,所以对各种干扰敏感得多。

ST 针对家电应用特别是电磁炉应用,推出了一个基于 STM8系列8位通用微控制器平台的电容式触摸感应方案,无需增加专用触摸芯片,仅用简单的外围电路即可实现电容式触摸感应功能,方便客户二次开发。

2、方案介绍
ST的电容式触摸按键方案通过一个电阻和感应电极的电容CX构成的阻容网络的充电/放电时间来检测人体触摸所带来的电容变化。

如图1所示,当人手按下时相当于感应电极上并联了一个电容CT,增加了感应电极上的电容,感应电极进行充放电的时间会增加,从而检测到按键的状态。

而感应电极可以直接在PCB板上绘制成按键、滚轮或滑动条的应用样式,也可以做成弹簧件插在PCB板上,即使隔着绝缘层(玻璃、树脂)也不会对其检测性能有所影响。

图1 STM8S电容式触摸按键的工作原理电磁炉是采用磁场感应电流的加热原理对食物进行加热。

加热时,通过面板下方的线圈产生强磁场,磁力线穿过导磁体做的锅的底部时,锅具切割交变磁力线而在锅具底部产生涡流使锅底迅速发热,达到加热食物的目的。

在本解决方案中采用44pin的STM8S105S4做按键显示板的主控芯片,控制13个按键的扫描、24个LED及一个4位数码管的显示、I2C与主板的通讯,并留有一个SWIM接口方便工程师调试之用(如图2)。

图2 电磁炉按键板原理
STM8S105S4采用的是ST高级STM8内核,具备3级流水线的哈佛结构,3.0~5.5V工作电压,内部16MHz RC可提供MCU 16MHz工作频率,提供低功耗模式和外设时钟关闭功能,共有34个I/O可用。

STM8S105S4 具有2KB的RAM和16KB的FLASH,还有可达30万次擦写次数的1KB EEPROM数据存储器。

3、电磁炉工作环境中的干扰
①电磁干扰
电磁炉在加热锅的同时,也会在电路板上感应电极正向或反向的电流,从而会缩短或增长按键充放电时间,会对按键的检测造成很大影响,甚至产生误动作,常见的方法采用硬件屏蔽和过零点检测来消除电磁辐射对按键的影响。

硬件屏蔽
在STM8S的解决方案中,ST提供了感应电极和走线的设计规范和如图3所示的Driven Shield功能(在Shield线上提供与按键管脚相同的驱动信号,电极与Shield之间的寄生电容就不会被充放电),能有效地减少感应电极走线的寄生电容对按键灵敏度的影响。

图3 Driven Shield
过零点检测
硬件过零点检测
过零点检测可采用硬件实现,在硬件设计中,可以增加如图4 或图5过零点的硬件检测电路,通过在B端输出为高电平时进行按键状态的判断,以期在电磁辐射最小的时候对触摸按键进行检测。

图4 硬件过零点检测电路1
图5 硬件过零点检测电路2
软件过零点检测
硬件过零点检测增加硬件电路设计的复杂性,增加方案成本,在我们的解决方案中,针对电磁炉的工作环境,我们采用软件进行过零点检测,从而降低成本,有效解决电磁炉主功率电路对触摸按键的干扰
②电网干扰
因为国内电网质量不一,在一些质量差的地区,容易影响电磁炉触摸按键的正常工作。

如果不能做电源隔离,就会看到如下图6的差别(蓝色表示无按键,红色表示键被按下),而这些图还只是在电磁炉没有开功率的情况下的,当电磁炉工作时产生的电磁辐射将会使看到的信号更加杂乱无章。

在实验中发现,采用与外界电网隔离或使用软件滤波,按键效果都能得到明显改善。

③溅水,溅油的影响
在电磁炉的使用当中,常常会出现水或油溅到触摸面板上,它可能导致按键误触发,本解决方案采用特殊软件算法可靠地将覆水溅油与手指按下的状态区分开。

④环境自适应能力
电磁炉在工作的时候,会产生大量的热量与湿气,面板温度/湿度,电路板温度/湿度都是会在一个很宽的范围浮动,而随着使用时间的推移,包括玻璃面板、 PCB板都会出现不同程序的老化,从而影响按键检测的准确度。

在ST的解决方案中,实现了自动校准功能,实时地提供环境检测,实现环境自适应的机制。

4 总结
ST提供的解决方案包含了触摸面板自校准、软件滤波、软件过零点检测及环境自适应等功能,尽可能地使用软件算法去屏蔽各种复杂环境的干扰,具有低成本及工作可靠等特点。

当然在其他产品的应用中,也会有一些与电磁炉环境不同的要求,这里只是介绍了其中一些有代表性的干扰,但只要掌握了电容式触摸的工作原理,还是有很多种方法来处理各种应用情况。

参考文献
1. ST, Guidelines for designing touch sensing applications, April 2010
2. ST, RC acquisition principle for touch sensing applications, March 2009。

相关文档
最新文档