一、功能描述
官方手册描述如下:
芯片提供了电容检测模块,配合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熄灭
|