基于8位MCU的触摸按键解决方案
- 格式:doc
- 大小:619.50 KB
- 文档页数:7
基于单片机的电容感应式触摸按键原理与程序——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();}}到此,关于电容感应按键的实验就完成了,制作是实验性质的,结果可供参考,经验仅供交流,如用于商业用途而产生的问题本人盖不负责,若欲转载(贴)请注明出处并望告知,若有用于广告引贴,本人保留追究的权力。
松翰科技推出触摸屏方案及内建嵌入式开发平台MCU
佚名
【期刊名称】《《中国集成电路》》
【年(卷),期】2010(019)005
【摘要】松翰科技近日于深圳及顺德举办新品发表会,为历年来公司所举办规模最盛大的一次技术研讨会议。
此次新品发表会议最主要系推出目前最火爆的电阻式触摸屏技术与电容式触控按键及内建嵌入式开发平台的8位单片机以及无线摄像头影音方案与智能家电方案等。
【总页数】1页(P8-8)
【正文语种】中文
【中图分类】TP311.56
【相关文献】
Scope嵌入式仿真开发平台讲座(17)TKScope与TKStudio联手推出高端ARM11仿真解决方案 [J], 广州致远电子有限公司
Scope嵌入式仿真开发平台讲座(18)TKScope推出多ARM器件仿真解决方案 [J], 广州致远电子有限公司
3.松翰推出高速USB2.0双核心摄像头方案SN9C201 [J], 无
4.Silicon Labs推出内建高速16位ADC的8位MCU系列 [J],
5.松翰推出触摸屏方案及内建嵌入式开发平台MCU [J], 志永
因版权原因,仅展示原文概要,查看原文内容请购买。
单片机按键的解决解决方案1、单片机上的按键控制一般采用两种控制方法:中断和查询。
中断必须借助中断引脚,而查询按键可用任何IO端口。
按键较少时,一个按键占用一个端口,而按键较多时,多采用矩阵形式(如:经常用4个端口作为输出,4个端口作为输入的4X4矩阵来获得16个按键);还可以用单片机的AD转换功能一个引脚接多个按键,根据电阻分压原理判断是哪个按键按下。
2、中断形式STM32可支持68个中断通道,已经固定分配给相应的外部设备,每个中断通道都具备自己的中断优先级控制字节PRI_n(8位,但是STM32中只使用4位,高4位有效),每4个通道的8位中断优先级控制字构成一个32位的优先级寄存器。
68个通道的优先级控制字至少构成17个32位的优先级寄存器.4bit的中断优先级可以分成2组,从高位看,前面定义的是抢占式优先级,后面是响应优先级。
按照这种分组,4bit一共可以分成5组第0组:所有4bit用于指定响应优先级;第1组:最高1位用于指定抢占式优先级,后面3位用于指定响应优先级;第2组:最高2位用于指定抢占式优先级,后面2位用于指定响应优先级;第3组:最高3位用于指定抢占式优先级,后面1位用于指定响应优先级;第4组:所有4位用于指定抢占式优先级。
所谓抢占式优先级和响应优先级,他们之间的关系是:具有高抢占式优先级的中断可以在具有低抢占式优先级的中断处理过程中被响应,即中断嵌套。
当两个中断源的抢占式优先级相同时,这两个中断将没有嵌套关系,当一个中断到来后,如果正在处理另一个中断,这个后到来的中断就要等到前一个中断处理完之后才能被处理。
如果这两个中断同时到达,则中断控制器根据他们的响应优先级高低来决定先处理哪一个;如果他们的抢占式优先级和响应优先级都相等,则根据他们在中断表中的排位顺序决定先处理哪一个。
每一个中断源都必须定义2个优先级。
有几点需要注意的是:1)如果指定的抢占式优先级别或响应优先级别超出了选定的优先级分组所限定的范围,将可能得到意想不到的结果;2)抢占式优先级别相同的中断源之间没有嵌套关系;3)如果某个中断源被指定为某个抢占式优先级别,又没有其它中断源处于同一个抢占式优先级别,则可以为这个中断源指定任意有效的响应优先级别。
电子信息工程学院电子设计应用软件训练任务【训练任务】:1、熟练掌握PROTEUS软件的使用;2、按照设计要求绘制电路原理图;3、能够按要求对所设计的电路进行仿真;【基本要求及说明】:1、按照设计要求自行定义电路图纸尺寸;2、设计任务如下:利用51单片机,8个按键,8路发光二级管构成一个独立式键盘系统,按下8个按键,点亮对应的灯。
3、按照设计任务在Proteus 6 Professional中绘制电路原理图;4、根据设计任务的要求编写程序,在Proteus下进行仿真,实现相应功能。
【按照要求撰写总结报告】指导教师年月日负责教师年月日学生签字年月日成绩评定表电子设计应用软件训练总结报告一.任务说明本次任务是利用51单片机、按键以及发光二极管设计一个独立式键盘系统,要求独立简单可控。
首先要明确51单片机的工作原理,在此基础上编写单片机程序,再载入到所连电路原理图中实现按键控制二极管亮灭。
此次任务需要完成电路原理图的绘制、单片机汇编语言的编程。
目的是通过本次设计熟悉Proteus软件的工作环境,掌握基本的操作及流程以及对单片机汇编语言的进一步学习,使之前的学习得到巩固。
二.原理图绘制说明总体而言,一个完善的系统最重要的是稳定,精确,设计简单,修护容易,成本低,体积小。
满足以上条件的系统我们都可以说是完善的系统。
因此,我在设计中选用了一些比较成熟的器件,这些器件都经过时间的考验,能稳定的工作,同时,价格也相对便宜。
下面对原理图中主要的硬件进行简单介绍。
2.1 AT89C51的基本概述AT89C5l单片机,是一种低功耗、高性能的、片内含有4KB Flash ROM的8位CMOS 单片机,工作电压范围为2.7~6V(实际使用+5V供电),8位数据总线。
它有—个可编程的全双工串行通信接口,能同时进行串行发送和接收。
AT89C51具有4K并行可编程的非易失性FLASH程序存储器,可实现对器件串行在系统编程ISP和在应用中编程(IAP)。
1 图1HT45R36在触控滑条式按键中的应用文件编码:HA0158S简介以HT45R36 8-Bit MCU 控制滑条触摸式按键面板。
HT45R36滑条触摸式显示控制板包含触摸按键 (Touch Switch) 和触摸式滑条 (Touch slider) 。
滑条是无极性滚动条,手在上面来回滑动,显示的数值会相应地加或减。
调到最大值时,则固定显示最大值,数值不再往上加;调到最小值也不再往下减。
两个按键分别实现单步加1和减1。
HT45R36 基本特征• 工作电压:f SYS = 4MHz : 2.2V ~ 5.5V f SYS = 8MHz : 3.3V ~ 5.5V• 25个双向输入/输出口• 2个与输入/输出共享引脚的外部中断输入• 8位可程序定时/计数器,具有溢出中断和8级预除频器 • 外部RC 振荡转换电路 • 内置晶体和RC 振荡电路 • 看门狗定时器• 16个触控按键SENSOR • 2048x14程序内存ROM • 128x8数据存储器RAM • HALT 和唤醒功能可降低功耗• 在VDD=5V ,系统时钟为8MHz 时,指令周期为0.5µs • 所有指令在1或2个指令周期内完成 • 查表指令,表格内容字长14位 • 4层硬件堆栈•位操作指令•强大的指令: 63条•低电压重置功能•44/52-pin QFP package硬件方块图硬件方块图图2方块图说明•电源:由2节干电池提供3V电压•MCU:HT45R36•显示:为2个7段LED数码管2硬件电路及说明电路图说明•电源输入电压为3V,由电池供电,供给整个电路。
•HT45R36采用外部晶振振荡。
•K1~K10为触摸感应式滑条,K11、K12位触摸按键。
Touch工作原理外部RC振荡器HT45R36提供一个外部RC振荡的功能。
外部RC振荡器包含有两个16位可编程向上计数器Timer A (其时钟来源于系统时钟或系统时钟四除频) 和Timer B (其时钟来源于外部RC振荡器)。
触摸MCU方案开发引言触摸MCU(Microcontroller Unit,微控制器单元)是一种集成了触摸控制功能的微控制器芯片。
它可以通过触摸面板实现人机交互,广泛应用于电子设备、家电、工业控制等领域。
本文将介绍触摸MCU方案开发的基本流程和注意事项,以帮助开发人员快速上手开发触摸MCU应用。
1. 硬件选型在开始触摸MCU方案的开发之前,首先需要选择合适的硬件平台。
市面上有多种常用的触摸MCU芯片可供选择,例如常见的Cypress、STMicroelectronics、Microchip等品牌。
开发人员需要根据项目需求和预算等方面考虑,选择性能稳定、功能丰富的触摸MCU芯片。
2. 硬件设计在硬件设计阶段,需要根据项目需求绘制电路原理图,并进行PCB布局设计。
以下是一些常见的硬件设计要点:•触摸板设计:根据应用场景,确定触摸板的类型和材质,例如玻璃、塑料等。
同时,需要确定触摸板的尺寸、形状和触摸区域。
•电源设计:为触摸MCU提供稳定的电源供电,通常采用直流电源或者电池供电。
•外设接口设计:根据项目需求,确定需要的外设接口,例如串口、SPI、I2C 等。
同时,为外设接口设计相应的电路。
•防静电设计:触摸MCU对静电敏感,因此需要在设计中采取合适的接地和防静电措施,以提高稳定性和可靠性。
3. 软件开发触摸MCU的软件开发主要包括固件开发和驱动开发两个方面。
以下是软件开发的基本步骤和注意事项:•选择开发环境:根据硬件平台和开发人员的熟悉程度,选择合适的开发环境,例如Keil MDK、IAR Embedded Workbench等。
•编写固件:根据项目需求,编写触摸MCU的固件程序。
这包括初始化触摸控制器、处理触摸事件、发送数据到外设等功能。
•编写驱动程序:针对具体的外设,编写相应的驱动程序,以实现与外设的通信和控制。
这需要根据外设的特性和接口协议进行具体的开发。
•测试和调试:在开发过程中,需要进行软硬件的联调测试和功能验证。
兼容PIC16C87的8位MCU设计8位MCU 是针对小型应用程序的设计的最常见的微控制器。
它们通常用于家用电器,汽车电子设备,医疗设备,安全系统等小型设备中。
兼容 PIC16C87 的 8 位 MCU 的设计,是从最小化电路设计,减少噪音和功耗,以及优化内部架构等方面着手的。
兼容 PIC16C87 MCU 相应的设计,需要对芯片内部的各种特性进行深入的研究。
在最小化电路设计方面,可以考虑使用尽可能少的元器件,以便缩小整个电路的规模。
例如,在选择电阻和电容时,建议使用擅长精度和温度变化的器件。
在安全性方面,建议使用高品质的电容,避免可能的破裂和其他问题。
接下来,是减少噪音和功耗方面的设计。
在微控制器中,噪音是一个常见的问题。
为了减少噪音,可以使用低噪声电源,例如开关电源,以及设计包含分立电源的电路板。
还可以使用电容来降低噪音。
另外,功耗也是一个重要因素。
在兼容PIC16C87 的 8 位 MCU 设计中,我们需要考虑如何将功耗降到最低。
例如,可以使用节能的停机模式,将芯片的运行时间缩短。
最后,是优化内部架构。
在兼容 PIC16C87 的 8 位 MCU 设计中,最主要的任务之一是保证处理器可以高效运算。
在这方面,需要对内部架构进行优化,从而减少功耗和噪音,提高处理器性能。
例如,优化架构可以采用一些技术,例如集成指令缓存、高速缓存器等等,从而提高处理器的运算速度。
总之,兼容 PIC16C87 的 8 位 MCU 的设计是需要深入研究和各种技术知识的。
在设计时,需要考虑尽可能多的因素,以便最大程度地优化微控制器的安全性、功耗和处理器性能。
通过对电路板和处理器内部架构设计的改进,MCU 设计人员可以获得更好的设计体验以及最佳的性能。
前言
在需要用户界面的应用方案中,传统的机电开关正在被电容式触摸感应控制所替代。
Sino wealth已经开发了一套触摸感应软件,使得任意一款8位的中颖微控制器都可以作为一个电容式触摸按键控制器使用。
通过对由一个电阻和触摸电极电容组成的RC充放电时间的控制,该触摸感应软件可以检测到人手的触摸。
由于电极电容的改变,导致的RC充放电时间的改变,能够被检测出来,然后经过滤波等,最终通过专用的I/O端口,或者I2C/SPI 接口发送给主机系统。
该软件库所需的元器件BOM表,成本低廉,因为每个通道只需要两个电阻就可以实现触摸检测功能
RC感应原理
RC采样原理就是通过测量触摸电极电容的微小变化,来感知人体对电容式触摸感应器(按键、滚轮或者滑条)的触摸。
电极电容(C)通过一个固定的电阻(R)周期性地充放电。
电容值取决于以下几个参数:电极面积(A),绝缘体相对介电常数,空气相对湿度,以及两个电极之间的距离(d)。
电容值可由下列公式得出:
图1:RC电压检测。
固定电压施加在,的电压随着电容值的变化而相应增加或者降低,如图2所示。
图2:测量充电时间。
通过计算V OUT的电压达到阀值V TH所需要的充电时间(T C),来得到电容值(C)。
在触摸感应应用中,电容值(C)由两部分组成:固定电容(电极电容,C X)和当人手接触或者靠近电极时,由人手带来的电容(感应电容,C T)。
电极电容应该尽可能的小,以保证检测到人手触摸。
因为通常人手触摸与否,带来的电容变化一般就是几个pF(通常5pF)。
利用该原理,就可以检测到手指是否触摸了电极。
图3:触摸感应。
这就是用于检测人手触摸的触摸感应软件中感应层所采用的基本原理。
硬件实现
图4显示了一个实现的实例。
由R1,R2以及电容电极(C X)和手指电容(C T)并联的电容(大约5pF) 形成一个RC网络,通过对该RC网络充放电时间的测量,可以检测到人手的触摸。
所有电极共享一个“负载I/O”引脚。
电阻R1和R2尽量靠近MCU放置。
电容R1(阻值在几百欧到几兆欧之间)是主要电容,用于调节触摸检测的灵敏度。
电容R2(10KΩ)是可选的,用于减少对噪声影响。
图4:电容触摸感应实现实例。
3 软件实现
本章描述了触摸感应RC原理的实现。
3.1充电时间测量原理
为了保证健壮的电容触摸感应的应用,充电时间的测量需要足够的精确。
采用一个简单的定时器(无需IC功能)和一系列简单的软件操作,即定时地检查感应I/O端口上的电压是否达到阀值。
这样的话,时间测量的精确度就取决于执行一次完整软件查询需要的CPU周期数。
这种测量方法会由于多次测量带来一些抖动,但是由于没有硬件限制,这种方法适用于需要很多电极的场合。
基本测量
使用普通定时器进行充电时间的测量。
对电容充电开始之前,定时器的计数器数值被记录下来。
当采样I/O端口上的电压达到某个阀值(V TH)时,再次记录定时器计数器的值。
二者之差就是充电或者放电的时间。
图5:定时器计数器值。
过采样
过采样的目的是以CPU时钟的精度,对输入电压达到高电平和低电平(V IH和V IL)的时间测量。
为了跨越所有的取值范围,每次测量都比上一次测量延迟一个CPU时钟周期的时间。
为了跨越所有的取值范围,测量的次数是和MCU核相关的。
图6说明了这个概念的应用情况。
图6:输入电压测量。
输入电压测量的原理
为了提高在电压和温度变动情况下的稳定性,对电极会进行连续两次的测量:第一次测量对电容的充电时间,直到输入电压升至V IH。
第二次测量电容的放电时间,直到输入电压降至V IL。
下图以及以下的表格详细说明了对感应电极(感应I/O)和负载I/O引脚上的操作流程。
图7:电容充放电时间测量。
表2 电容充放电测量步骤
触摸的效果
电极的电容值(C X)取决于以下几个主要因素:电极的形状、大小,触摸感应控制器到电极之间的布线(尤其是地耦合),以及介电面板的材料和厚度。
因此,RC充放电时间直接和C X 有关。
图8说明了这种“触摸的效果”。
时间(即达到了V IH电平的时刻)比长;同样对于降至V IL电平的时间也比长。
图8:触摸效果实例。
多次测量以及高频噪声的去除
为了提高测量的精确度,并去除高频噪声,有必要对V IH和V IL进行多次的测量,然后再决定是否有按键被有效“触摸”。
图9:测量的种类。
注意:下图说明了去除噪声的实例。
如果测量次数(N)设置为4,那么对一个电极的完整测量将包括4次正确的“连续组测量”(BGs)。
这些实例展示了不同噪声影响下的测量。
绿色线条表示正确的V IH/V IL测量;而红色线条表示不正确的V IH/V IL测量。
图10 显示了没有噪声的影响,所有测量都有效的情况。
这个例子中,每个连续组测量中的测量都有效,使得一个完整的测量很快就可以完成。
图10:实例1。
图11 显示了有一些噪声使得某些测量无效的情况(即r1和r2)。
在这个例子中,连续组测量BG3重复了好几次,直到其中的所有测量都有效,该次组测量才算通过。
这样就需要较多的时间来完成一次完整的测量。
图11:实例2。
图12显示了有很多噪声,使得无效的组测量次数达到了最大限制(比如20)。
这样的话,整个电极测量都无效。
这个例子中,达到了无效的组测量次数的最大限制,因此停止对该电极的测量。
图12:实例3。