[单片机芯片] 【沁恒CH579评测】触摸按键

[复制链接]
1215|0
 楼主| xinmeng_wit 发表于 2020-1-4 20:00 | 显示全部楼层 |阅读模式
一、功能描述

官方手册描述如下:

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

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

二、硬件接口

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

33.png

三、软件编写

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

44.png

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

初始化函数:

  1. void touch_key_init(void)
  2. {
  3.        
  4.         R8_ADC_CFG|=RB_ADC_POWER_ON;//ADC模块电源使能
  5.         R8_ADC_CFG&=~RB_ADC_DIFF_EN;//ADC单端输入
  6.        
  7.         ADC_SampClkCfg(2);//设置ADC采样时钟
  8.        
  9.         R8_ADC_CFG|=RB_ADC_BUF_EN;//ADC输入缓冲使能
  10.        
  11.         ADC_PGACfg(2);//设置信号增益
  12.        
  13.         R8_TKEY_CTRL|=RB_TKEY_PWR_ON;//keytouch使能
  14.        
  15.         R8_ADC_CHANNEL=2;//ADC通道2
  16.        
  17.        
  18.         R8_TKEY_CNT=58;
  19. }

main.c如下:

  1. #include "CH57x_common.h"
  2. #include "gpio.h"
  3. #include "touch_key.h"

  4. uint16_t touch_key_value=0;
  5. uint8_t touch_flag=0;
  6. int main()
  7. {   
  8.         SystemInit();//初始化系统时钟为32M
  9.         led_init();//led端口初始化
  10.         touch_key_init();//触摸按键初始化
  11.         R8_ADC_CONVERT|=(1<<0);//启动转换
  12.         touch_flag=1;
  13.         while(1)
  14.         {
  15.                
  16.                 if(((R8_ADC_CONVERT&(1<<4))==0)&&(touch_flag==1))//转换完成
  17.                 {
  18.                         touch_key_value=R16_ADC_DATA;//读取ad值
  19.                         if(touch_key_value<500)//按下
  20.                         {
  21.                                 R32_PB_OUT&=~(1<<1);
  22.                         }
  23.                         else//松开
  24.                         {
  25.                                 R32_PB_OUT|=(1<<1);
  26.                         }
  27.                         touch_flag=0;
  28.                 }
  29.                 if(touch_flag==0)
  30.                 {
  31.                         R8_ADC_CONVERT|=(1<<0);
  32.                         touch_flag=1;               
  33.                 }
  34.                
  35.         }   
  36. }

现象:

①不触摸,led灯不亮


55.jpg

②触摸,led亮,松手,led熄灭
44.jpg



您需要登录后才可以回帖 登录 | 注册

本版积分规则

70

主题

279

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部