单片机实现触摸按键

合集下载

单片机高低电平实现电容触摸的原理

单片机高低电平实现电容触摸的原理

单片机高低电平实现电容触摸的原理
单片机实现电容触摸的原理可以简述为以下几个步骤:
1. 创建一个电容传感器电路:通过一个电容传感器电路将电容传感器与单片机连接起来。

该电路一般由一个电容触摸键与一个固定的参考电容组成。

2. 输出引脚设置为输出模式:将单片机的一个IO引脚设置为输出模式,将电容触摸键的控制电压输出到该引脚。

3. 创建一个短路:将输出引脚与接地进行短路,使得电容触摸键与参考电容形成一个带有电荷的电容电路。

4. 引脚设置为输入模式:将IO引脚设置为输入模式,停止输出控制电压。

5. 监测电压变化:开始监测IO引脚上的电压变化,由于电容触摸键的引脚与参考电容电路共享一个电容,当有物体触摸电容键时,电容的电荷将被改变,从而导致IO引脚上的电压变化。

6. 判断触摸:通过动态地监测IO引脚上电压的变化,可以判断是否有物体触摸了电容触摸键。

当监测到电压变化时,即可认为有物体触摸了电容触摸键,并进一步进行相应的处理。

总结来说,单片机实现电容触摸的原理是通过监测IO引脚上电压的变化,来判断是否有物体触摸了电容触摸键。

单片机按键工作原理

单片机按键工作原理

单片机按键工作原理
单片机按键是单片机常用的一种输入设备,它可以将人类的输入信息转化为数字信号,供单片机进行数据处理,实现各种功能。

那么单片机按键是如何工作的呢?
一般来说,单片机按键通常由按键本身、按键连接电路和单片机引脚组成。

按键本身是一个机械式开关,通常有两个触点,通过按键上的物理按下或松开触点来实现输入操作。

按键连接电路一般由电阻、电容、二极管等元件组成,它们的作用是为按键提供稳定的电源和信号滤波,防止按键接触不良或噪声干扰。

单片机引脚则是将按键的输入信号引入到单片机内部,供程序处理。

在单片机按键使用过程中,按键的状态通常分为两种:按下和松开。

当按键按下时,按键上的触点会短接,电阻值发生变化,形成一个低电平信号,此时单片机引脚上的电压值会降低。

当按键松开时,触点断开,电阻值恢复原状,电压值也会回升,形成一个高电平信号。

单片机根据引脚电平状态的变化来判断按键状态,进而进行相应的处理。

由于单片机引脚本身具有一定的电容,当按键状态变化时,引脚上的电容也会发生变化,从而引起信号的抖动。

为了避免这种抖动对程序造成影响,我们通常会在按键连接电路中添加一个二极管,利用其单向导通的特性,将信号滤波,使其变得更加稳定。

单片机按键是一种常见的输入设备,通过按键本身、按键连接电路和单片机引脚组成,将人类的输入信息转化为数字信号,供单片机进行数据处理。

在使用过程中,我们需要注意按键状态的变化及其对信号的影响,以保证程序的正确性和稳定性。

基于单片机的电容感应式触摸按键原理与程序——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单片机及触摸感应器简 介

单片机 电容触摸按键 报告

单片机 电容触摸按键 报告

任务:MSP-EXP430G2 板上P1.0 上接了一个LED,而在配套的LaunchPad 扩展板上,将MSP430G2553 的P2.0 和P2.5 引出作为电容触摸按键。

要求按下P2.0 后LED 亮,按下P2.5 后LED 灭,程序运行过程中不阻塞CPU,并且实现低功耗运行。

硬件连接:如图所示程序代码:TouchIN.c:#include "MSP430G2553.h"#define KEY_NUM 2 /*触摸按键数目,根据需要修改*/ //=============具体触摸按键IO宏定义,根据需要添加代码===============#define KEY0_INIT P2DIR &= ~BIT0; P2SEL &= ~ BIT0; P2SEL2 |= BIT0 /*按键1开启振荡*/ #define KEY1_INIT P2DIR &= ~BIT5; P2SEL &= ~ BIT5; P2SEL2 |= BIT5 /*按键2开启振荡*/ #define ALL_OSC_OFF P2SEL2 &= ~(BIT0 + BIT5) /*关闭全部触摸振荡*/ /*门限频率的取值取决于定时扫描的时长,3300对应的是1.9ms定时情况,实际定时可取1ms~20ms*/const unsigned int FREQ_THRESHOLD[KEY_NUM]={3300,3300}; /*参考值,需用仿真器查看后调整*///-----静态局部变量----static unsigned int Freq[KEY_NUM]={0}; //当前测频值static unsigned char Key_Buff[KEY_NUM][4]={0}; // 软件FIFOstatic unsigned char Key_Num=0; //按键编号//-----全局变量,复杂程序中可以移植到Global.h统一管理-----unsigned char TouchIN=0; //相当于PxIN寄存器作用,支持8个触摸按键void Key_Measure_Freq(){Freq[Key_Num]=TAR; //当前编号按键的频率被测得ALL_OSC_OFF; //关闭所有振荡IOKey_Num++; //切换下一振荡IOif (Key_Num>=KEY_NUM) Key_Num=0; //各触摸按键循环交替switch (Key_Num){case 0 : KEY0_INIT; break; //振荡IO初始化case 1 : KEY1_INIT; break;default: break;}TA0CTL = TASSEL_3+MC_2+TACLR; //增计数清0,并开始计数}void Key_FIFO() //存储连续4次测量数据{Key_Buff[Key_Num][0]=Key_Buff[Key_Num][1];Key_Buff[Key_Num][1]=Key_Buff[Key_Num][2];Key_Buff[Key_Num][2]=Key_Buff[Key_Num][3];if( Freq[Key_Num]<FREQ_THRESHOLD[Key_Num]) //判断是否识别为按键Key_Buff[Key_Num][3]=1;elseKey_Buff[Key_Num][3]=0;}void Key_Judge() //按键仲裁,只有连续4次测量结果一致,才算数{if( (Key_Buff[Key_Num][0]==0)&&(Key_Buff[Key_Num][1]==0)&&(Key_Buff[Key_Num][2]==0)&&(Key_Buff[Key_Num][3]==0) )// TouchIN=0<<Key_Num; //按键松开(错误代码)TouchIN &=~(1<<Key_Num); //按键松开(正确代码)if( (Key_Buff[Key_Num][0]==1)&&(Key_Buff[Key_Num][1]==1)&&(Key_Buff[Key_Num][2]==1)&&(Key_Buff[Key_Num][3]==1) )// TouchIN =1<<Key_Num; //按键按下(错误代码)TouchIN |=1<<Key_Num; //按键按下}void TouchIN_Dect() //触摸输入检测{Key_Measure_Freq(); //测频Key_FIFO(); //软件FIFO缓存最近4次测量数据Key_Judge(); //仲裁按键是否按下或松开}TouchIN.h:/***** TouchIN.h******/#ifndef TOUCHIN_H_#define TOUCHIN_H_extern void TouchIN_Dect() ; //WDT中断事件extern unsigned char TouchIN; // 相当于PxIN寄存器作用,支持8个触摸按键#endif /* TOUCHIN_H_ */main.c:#include "MSP430G2553.h"#include "TouchIN.h" /*触摸按键检测库函数*/void WDT_Ontime(void);//-----对硬件相关代码进行宏定义处理-----#define LED_ON P1OUT |= BIT0 /*宏定义LED所在IO*/#define LED_OFF P1OUT &= ~BIT0 /*宏定义LED所在IO*/void main(void) {WDTCTL = WDTPW+WDTHOLD; //关狗//-----初始化GPIO-----P1DIR |= BIT0; //LED所连IO口P1.0设为输出P1OUT &= ~BIT0;//-----初始化WDT定时中断为16ms-----WDTCTL = WDT_ADLY_16; // “超级”宏定义IE1 |= WDTIE; //使能WDT中断_EINT(); // 使能总中断__bis_SR_register(LPM3_bits); //等同LPM3}#pragma vector=WDT_VECTOR // Watch dog Timer interrupt service routine__interrupt void WDT_ISR(void){WDT_Ontime();}void WDT_Ontime(void){ //-----首先必须定时扫描触摸按键检测函数-----TouchIN_Dect();if(TouchIN & BIT0) LED_ON;if(TouchIN & BIT1) LED_OFF;}调试情况:第一次调试:TouchIN_Dect函数重复定义第二次调试:正常调试结果:按下P2.0 后LED 亮,按下P2.5 后LED 灭,任务达成。

单片机与人机交互触摸屏按键和显示屏的应用

单片机与人机交互触摸屏按键和显示屏的应用

单片机与人机交互触摸屏按键和显示屏的应用现代科技的迅速发展,使得人机交互成为了当下热门的领域之一。

作为人类与电子设备之间的桥梁,触摸屏按键和显示屏的应用在我们的日常生活中扮演着越来越重要的角色。

而单片机则作为嵌入式系统中最为常见的控制器,与触摸屏按键和显示屏的结合,不仅提升了用户交互体验,也为我们的生活带来了便利。

本文将深入探讨单片机与人机交互触摸屏按键和显示屏的应用。

一、触摸屏按键的应用触摸屏按键是一种新型的人机交互界面,它通过电容或者压力等方式感应用户的点击动作,并将点击位置信号转换为电信号输入,从而实现对设备的控制。

单片机通过与触摸屏按键的连接,可以实现多种功能。

1.1 触摸屏按键在智能手机中的应用随着智能手机的普及,触摸屏按键已经成为了目前手机最常见的操作方式之一。

通过单片机与触摸屏的连接,我们可以轻松实现对手机屏幕的触摸操作,包括滑动、点击、放大缩小等。

这不仅提高了手机的操控性,也为用户带来了更好的使用体验。

1.2 触摸屏按键在工业控制领域的应用在工业控制领域,触摸屏按键的应用也越来越广泛。

通过与单片机的连接,我们可以将触摸屏作为控制设备的输入端口,实现对各种设备的控制和监控。

例如,在一些工厂中,工人可以通过触摸屏按键来控制生产线的开关、调整设备参数等,大大提高了生产效率。

二、显示屏的应用显示屏作为人机交互的重要组成部分,具有信息输出的功能,将数据以人类可读的形式展示出来。

单片机通过与显示屏的连接,可以实现对数据的显示和处理,提升用户交互的体验。

2.1 显示屏在计算机领域的应用在计算机领域,显示屏是我们与计算机最直接的交互方式之一。

通过单片机与显示屏的连接,我们可以输出文字、图像、视频等多种形式的信息。

这不仅使得计算机的操作更加直观,也为我们提供了更方便的信息交流方式。

2.2 显示屏在仪器仪表领域的应用在仪器仪表领域,显示屏的应用也非常广泛。

通过单片机与显示屏的连接,我们可以将各种测量数据以数字或者图形的形式显示出来,方便用户进行实时监测和数据分析。

单片机与触摸按键的交互设计

单片机与触摸按键的交互设计

单片机与触摸按键的交互设计在单片机应用中,触摸按键技术是一种常见的交互方式。

通过触摸按键,用户可以方便地与单片机进行交互,实现各种功能。

本文将探讨单片机与触摸按键的交互设计,从硬件设计和软件设计两个方面进行讨论。

一、硬件设计触摸按键的硬件设计主要包括触摸传感器和按键控制电路两部分。

1. 触摸传感器触摸传感器是用来感知用户触摸行为的装置。

常见的触摸传感器有电容触摸传感器和电阻触摸传感器两种类型。

- 电容触摸传感器:基于电容原理,通过感应人体的电容变化来检测用户的触摸行为。

它具有高灵敏度、易于集成等特点,但对环境的干扰较大。

- 电阻触摸传感器:基于电阻原理,通过感应用户的电阻变化来检测触摸行为。

它相对于电容触摸传感器来说,对环境的干扰较小。

在选择触摸传感器时,需根据具体的应用场景和性能要求进行合理选择,并按照厂商提供的设计指南进行布局和连接。

2. 按键控制电路按键控制电路主要用于检测触摸按键的信号并将其转换为数字信号,以供单片机进行处理。

按键控制电路一般由按键和按键检测电路组成。

- 按键:可以选择机械按键或触摸按键,其具体选择取决于应用需求。

机械按键相对来说操作感更好,但功耗和使用寿命较触摸按键较差。

- 按键检测电路:主要用于检测按键的开关状态,将按键的状态转换为数字输出。

可以采用行列式检测电路、编码器检测电路等方式进行设计。

二、软件设计单片机与触摸按键的软件设计主要包括按键扫描、触摸检测和交互逻辑处理三个部分。

1. 按键扫描按键扫描是指对触摸按键进行周期性扫描,并根据扫描结果判断按键的状态。

可以采用轮询扫描和中断扫描两种方式。

- 轮询扫描:通过在主循环中逐一检测各个按键的状态,实时响应用户操作。

适用于小规模按键的应用,实现简单。

- 中断扫描:通过外部中断或定时器中断来触发按键扫描,提高扫描效率。

适用于大规模按键的应用,具有较好的实时性。

2. 触摸检测触摸检测是指通过对触摸传感器的采样和处理,判断用户是否触摸按键。

单片机触摸按键原理

单片机触摸按键原理

单片机触摸按键原理
单片机触摸按键是一种新型的按键方式,它采用了电容感应原理。


传统的机械按键相比,它具有灵敏度高、使用寿命长、外观美观等优点,因此被广泛应用于电子产品中。

单片机触摸按键的原理是利用人体和电极之间的电容变化来检测是否
有操作。

当手指接近电极时,会改变电极周围的电场分布,从而改变
电容值。

单片机通过检测这种电容变化来判断是否有操作发生。

具体来说,单片机触摸按键由两个主要部分组成:传感器和处理器。

传感器通常由金属板或导电材料制成,并与处理器相连。

当手指接近
传感器时,会形成一个微小的电容耦合,在处理器中产生微弱的信号。

处理器通过对这个信号进行放大、滤波和数字化处理,最终将其转换
为一个可识别的操作信号。

在实际应用中,单片机触摸按键通常需要进行校准以确保其准确性和
稳定性。

校准过程一般包括两个步骤:首先将传感器置于空气中以获
取基准值,然后将手指放在传感器上以获取操作值。

通过比较这两个
值的差异,可以确定操作的发生。

除了基本的单点触摸按键外,还有一些高级的多点触摸按键。

这种按
键可以同时检测多个手指的操作,并根据这些操作来执行不同的功能。

多点触摸按键通常需要更复杂的电路和算法来实现,但它们也提供了
更强大、更灵活的用户体验。

总之,单片机触摸按键是一种先进、实用的按键方式。

它利用电容感
应原理检测人体操作,并通过数字化处理将其转换为可识别的信号。

在未来,随着技术的不断发展,单片机触摸按键将会得到更广泛、更
深入地应用。

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

感应按键电路分析
感应按键电路分析:
感应按键是刚刚在电磁炉上运用的一种新技术,其主要特点是使电磁炉易清洁,防水性能好。

目前在电磁炉上用的感应按键主要有天线感应式及电容式,我们目前用的是利用人体电容的电容式感应按键
感应按键原理如下面的图式;
感应按键电路包括信号产生、信号整形2个单元:首先由信号产生单元产生约几百KHz的高电平占空比约50%的信号;然后信号整形单元对所产生的信号进行整形,整形过程类似于开关电源工作过程;最后将信号送至MCU 的AD口。

当有人体靠近感应按键时,将会形成一个对地的电容在信号整形的高电平期间分流一部分电流,致使整形后的信号下降,并在人体离开前一直维持在下降的电位上;而当人体离开后,整流后的信号又会上升到原来的电位水平。

由于存在电路耦合及寄生电容,所以一般用下降沿和上升沿来识别感应按键的响应动作。

*************************************************************************************************** *************************************************************************************************** *************************************************************************************************** *************************************************************************************************** *************************************************************************************************** *************************************************************************************************** *************************************************************************************************** ************************************************************************************************** 原理图:示意图1,按键AD每个单独检测,不用切换
*************************************************************************************************** ***************************************************************************************************
软件识别感应按键的步骤:
—,加热及非加热情况下的静态测试:
电磁炉的在加热情况下磁场对周边的电路影响比较大,尤其对感应按键电路;对于感应按键的测试,软件尤其要注意测试步骤,假如不按下列步骤测试,否则以后的生产会出现问题;测试时最好以客户最后的安装位置来进行测试,若没有拿到整机,灯板的摆放位置,要以实际的安装位置来模拟,一定要紧挨线圈盘,这样干扰最大;在火锅档状态下把功率调到最大,记录下每一个按键值在加热情况下的A.D值,同时记录抖动的值有多少个,然后再提起锅具(系统停止加热),记录一下按键的A.D值,记录下与加热情况下的差值有多少;注意:在最大档加热情况下,按键的抖动值就在+/-2个之内,加热与非加热状态下,两者的差值也就在+/-2个;若没有满足+/-2个内,则说明布板不合理或者A.D采集的次数还不够;按键的A.D值采集次数越多,越稳定;但注意,最长64MS一定要弹出一次按键平均值;否则按键的反应灵敏度不够;
二,加上玻璃下的按键动态测试:
在系统以最大档加热情况下,放上一块6MM厚的玻璃(注意一定要用6MM的玻璃,由于6MM的玻璃为最通用,否则用薄的玻璃测试会在生产上会出现按键失灵现象),注意按键的A.D值不能超5V,(0FFH),不过尽量保持每个按键的A.D值在0D0H以上,0F5H以下,A.D值太小灵敏度估计不够,抗干扰不是很强;
若A.D值超过5V,换一下稳压管的值或者调整一下PCB布板;记录一下在加热及非加热两种情况下,每一个按键没按下的值及有按下的A.D值,记录好每一个按键的变化差值;
三,按键的防水测试:
我们采用5PF/15PF电容隔离的电路全部都有防水功能,最后要在玻璃表面用热熔胶围住按键的区域,防止水溢出,水的区域要把所有的按键都连在一起;然后在水中,记录好每一个按键在最大档加热及非加热情况下的变化值,以最小变化值的按键值作为按键识别的值;系统要做到有水不会有按键误动作,在水中能识别到有按键;在按键的其它地方按,只有最靠近的键键可动作,其它的按键不能动作;
四,程序说明:
*************************************************************************************************** *************************************************************************************************** *************************************************************************************************** ***************************************************************************************************。

相关文档
最新文档