打印
[单片机芯片]

【沁恒CH579评测】触摸按键

[复制链接]
863|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
一、功能描述

官方手册描述如下:

芯片提供了电容检测模块,配合ADC模块使用,可以实现电容类触摸按键检测功能。共14个输入通道,支持触摸按键电容值范围10pF~100pF。

简单理解:触摸和不触摸,ADC采集到的电压值不一样,可以根据这个电压值来判断按键有没有按下。

二、硬件接口

板上预留了4个触摸按键,分别接在PA12,PA13,PA14,PA15.这些引脚与SD卡是共用的,通过跳线设置。如下:



三、软件编写

触摸按键的配置步骤,官方手册写的还是蛮清楚的,如下:



按照以上步骤,可以完成对触摸按键的配置,这里不做过多介绍。需要注意的是,在实际使用的过程中,需要软件启动AD转换,转换完成后读取AD值。

初始化函数:

void touch_key_init(void)
{
       
        R8_ADC_CFG|=RB_ADC_POWER_ON;//ADC模块电源使能
        R8_ADC_CFG&=~RB_ADC_DIFF_EN;//ADC单端输入
       
        ADC_SampClkCfg(2);//设置ADC采样时钟
       
        R8_ADC_CFG|=RB_ADC_BUF_EN;//ADC输入缓冲使能
       
        ADC_PGACfg(2);//设置信号增益
       
        R8_TKEY_CTRL|=RB_TKEY_PWR_ON;//keytouch使能
       
        R8_ADC_CHANNEL=2;//ADC通道2
       
       
        R8_TKEY_CNT=58;
}

main.c如下:

#include "CH57x_common.h"
#include "gpio.h"
#include "touch_key.h"

uint16_t touch_key_value=0;
uint8_t touch_flag=0;
int main()
{   
        SystemInit();//初始化系统时钟为32M
        led_init();//led端口初始化
        touch_key_init();//触摸按键初始化
        R8_ADC_CONVERT|=(1<<0);//启动转换
        touch_flag=1;
        while(1)
        {
               
                if(((R8_ADC_CONVERT&(1<<4))==0)&&(touch_flag==1))//转换完成
                {
                        touch_key_value=R16_ADC_DATA;//读取ad值
                        if(touch_key_value<500)//按下
                        {
                                R32_PB_OUT&=~(1<<1);
                        }
                        else//松开
                        {
                                R32_PB_OUT|=(1<<1);
                        }
                        touch_flag=0;
                }
                if(touch_flag==0)
                {
                        R8_ADC_CONVERT|=(1<<0);
                        touch_flag=1;               
                }
               
        }   
}

现象:

①不触摸,led灯不亮




②触摸,led亮,松手,led熄灭




使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

69

主题

245

帖子

1

粉丝