超快速开发基于PIC芯片的触摸按键识别_sed

(一)开发准备

前言:

    该系列将教你超快速实现触摸按键的开发,而你并不需要过多过硬的软硬件细节基础。不夸张的说,实现基础的触摸按下检测开发只需30分钟。

 

    开发前,需要知道以下内容或准备好相关设备。

     触摸原理:分布在芯片端口的电容因为手指的接触,使电容发生了改变,经芯片处理后能将微小的电容变化转化成电压信号的变化,再通过软件AD采集端口电压,根据电压的变化实现触摸的识别。说白了,就是芯片AD读端口电压,经软件处理后识别是否按下,就这么简单,当然之所以这么简单,得益于芯片的设计之外,还得益后期软件算法的处理。

1、芯片:芯片使用PIC的PIC16F18876-E/PTVAO型号芯片,这是PIC专门针对触摸按键开发的芯片,集成度很高。

超快速开发基于PIC芯片的触摸按键识别_官网_02

2、开发环境:

本人使用MPLAB X IDE v5.20

超快速开发基于PIC芯片的触摸按键识别_主函数_03


3、编译工具:

选择使用XC8(2.05),这里必须要用2.0以上的,因为之后的配置工具MCC的mtouch模块需要2.0以上的编译工具支持,否则编译通不过。

超快速开发基于PIC芯片的触摸按键识别_官网_04

4、配置工具:

MPLAB Code Configurator 简称MCC,版本v3.75,一个配置工具,之所以快,就因为它的存在。

超快速开发基于PIC芯片的触摸按键识别_仿真器_05

超快速开发基于PIC芯片的触摸按键识别_sed_06

 


5、仿真器:

使用ICD3,烧写口是5线的。当然PIC的其他仿真器也可,如PICkit3。

超快速开发基于PIC芯片的触摸按键识别_主函数_07


 

这样基本的所有工具都齐了。以上相关软件下载均在官网PIC官网可以下载。


(二)硬件设计

1、左边为触摸膜的排线接口,右边就是将接口接到芯片的IO口上。


超快速开发基于PIC芯片的触摸按键识别_sed_08

 


 


2、芯片的8个触摸按键的输入,一个按键对应一个IO口,对应关系如下:为(RC0 RA6 RA7 RE2 RE1 RE0 RA5 RA4)


超快速开发基于PIC芯片的触摸按键识别_d3_09

 


3、为了能够在PC上显示触摸按键状态,我专门使用了UART将触摸信息反馈在串口工具上,使用了如下一个通信脚(LIN_TXD RC6脚),当然你没有TTL转USB的设备也可以直接仿真打断点看触摸是否触发,或者使用led指示灯。

超快速开发基于PIC芯片的触摸按键识别_仿真器_10

而芯片其他的电路设计只要最小系统就好了,就是芯片能工作就可以了。


(三)工程创建

1、打开MPLAB X IDE

2、创建工程 FileàNew Project,如图选择后点击Next

超快速开发基于PIC芯片的触摸按键识别_官网_11

3、如图选择PIC16F18876,点击Next

超快速开发基于PIC芯片的触摸按键识别_仿真器_12

4、烧写工具选择你自己的工具,我是使用了ICD3。点击Next

超快速开发基于PIC芯片的触摸按键识别_d3_13

 

5、编译器就选XC8,这里必须2.0以上,否则后期编译通不过。点击Next


超快速开发基于PIC芯片的触摸按键识别_d3_14

6、给工程命名以及工程位置,点击Finish,这样工程就建完了。

超快速开发基于PIC芯片的触摸按键识别_d3_15


(四)MCC配置 1、如图打开MCC

超快速开发基于PIC芯片的触摸按键识别_d3_16

2、如图选择配置系统参数

超快速开发基于PIC芯片的触摸按键识别_sed_17

3、双击mtouch

超快速开发基于PIC芯片的触摸按键识别_d3_18

打开如下界面

超快速开发基于PIC芯片的触摸按键识别_官网_19

 

按下图数据配置端口,因为在硬件设计我们知道触摸输入口有RC0 RA6 RA7 RE2 RE1 RE0 RA5 RA4这8个口,将这几个口锁住(绿色),如下

超快速开发基于PIC芯片的触摸按键识别_官网_19

4、ButtonsàCreate New Button,填8个,最后点击Add

超快速开发基于PIC芯片的触摸按键识别_d3_21

5、选择对应的IO口

超快速开发基于PIC芯片的触摸按键识别_官网_22

 

6、以上完成后,点击Generate生成代码

超快速开发基于PIC芯片的触摸按键识别_仿真器_23

 

7、为了将触摸信号显示在PC上,本人多配置一个USART,波特率9600,当然这个不是必须的。 配置如下:同样需要再次点击Generate

超快速开发基于PIC芯片的触摸按键识别_仿真器_24

这样整个代码的配置就完成了,不要惊讶,就是这么简单。当然下一章教你怎么调函数,才能真正实现


(五)触摸验证


我们需要的函数很简单,只有2个

1、bool MTOUCH_Service_Mainloop(void),运行主函数


超快速开发基于PIC芯片的触摸按键识别_官网_25

 


2、bool MTOUCH_Button_isPressed(enum mtouch_button_names name) 获取触摸状态函数


超快速开发基于PIC芯片的触摸按键识别_sed_26

 


主函数设计如下:

超快速开发基于PIC芯片的触摸按键识别_主函数_27


注意:最上面的2个箭头的中断必须打开。之后就是调用主函数,调用触摸状态,2个中文注释就是相应功能触发时,你需要的处理,比如你可以点灯之类的,而我这里选择发送数据到PC上显示触发状态。

 

本人的代码如下,即触摸触发时,发出触发的端口标号,否则发出0x00;代码如下
#include "mcc_generated_files/mcc.h"/*                         Main application */static unsigned int xx = 2000;static unsigned int y = 5;void main(void){    // initialize the device    SYSTEM_Initialize();    // When using interrupts, you need to set the Global and Peripheral Interrupt Enable bits    // Use the following macros to:    // Enable the Global Interrupts    INTERRUPT_GlobalInterruptEnable();    // Enable the Peripheral Interrupts    INTERRUPT_PeripheralInterruptEnable();    // Disable the Global Interrupts    //INTERRUPT_GlobalInterruptDisable();    // Disable the Peripheral Interrupts    //INTERRUPT_PeripheralInterruptDisable();    while (1)    {        MTOUCH_Service_Mainloop();        xx--;        if(xx==0)        {            y--;            xx=2000;        }        if(y==0)        {            xx=2000;            y=5;            {                unsigned char i;                for(i=0;i<=7;i++)                {                    if(MTOUCH_Button_isPressed(i)==true)                    {                        //触摸触发处理                        EUSART_Write(0xaa);                        EUSART_Write(i);                        EUSART_Write(0xaa);                    }                    else                    {                              //触摸未触发处理                        EUSART_Write(0x00);                    }                 }            }        }        // Add your application code    }}/** End of File*/


串口打印数据:

超快速开发基于PIC芯片的触摸按键识别_主函数_28


--------------------END---------------

超快速开发基于PIC芯片的触摸按键识别_sed