[RISC-V MCU 应用开发] 【RISC-V MCU CH32V103测评6】+ TOUCHKEY控制LED的亮灭

[复制链接]
 楼主| xyz549040622 发表于 2020-12-6 17:13 | 显示全部楼层 |阅读模式
CH32V103 系列产品触摸检测控制(TKEY_V)单元,通过将电容量变化转变为频率变化进行采样,实现触摸按键检测功能。。检测通道复用 ADC 的 16 个外部通道,通过 ADC模块的单次转换模式实现触摸按键检测。应用程序通过数字值的变化量判断触 摸按键状态。

原理图上两个TouchKey分别连接的是pa1和pa2,分别对应的是ADC1的通道一和通道二,我们需要使能ADC1的通道1和通道2,分别循环读取两个通道的ad值。这里只使用了1个通道,通道2。

  1. void Touch_Key_Init(void)
  2. {
  3.     GPIO_InitTypeDef GPIO_InitStructure;

  4.     RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE );
  5.     RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE );

  6.     GPIO_InitStructure.GPIO_Pin = AD1_CHANNEL1_PIN|AD1_CHANNEL2_PIN;
  7.     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;
  8.     GPIO_Init(GPIOA, &GPIO_InitStructure);

  9.     ADC_Cmd(ADC1, ENABLE);
  10.     TKEY_CH =0x00000002;     // TouchKey Channel
  11.     TKEY_CR |= 0x51000000;   // Enable TouchKey
  12. }
  1. *******************************************************************************/
  2. uint16_t Touch_Key_Adc(uint8_t ch)
  3. {
  4.   u16 val;

  5.   while(!(TKEY_CR & 0x08000000));
  6.   val = (u16)TKEY_SR;

  7.   return val;
  8. }
主函数中增加一个按下触摸按钮的临界值判断,小于临界值表示按下触摸按钮,大于临界值表示触摸按钮恢复。按下触摸按钮的时候翻转LED的显示。
  1. int main(void)
  2. {
  3.     u16 ADC_val;

  4.         NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
  5.         Delay_Init();
  6.         User_Led_Init();
  7.     USART1_Init();
  8.     Touch_Key_Init();
  9.     USARTx_SendStr(USART1, "This is a test data.\n");
  10.         while(1)
  11.         {
  12.         ADC_val = Touch_Key_Adc(ADC_Channel_2);
  13.         printf( "TouchKey:%04d\r\n",  ADC_val );
  14.         Delay_Ms(10);

  15.         if(Touchkey_RxOK == 0)
  16.         {
  17.             if(ADC_val < critical_value)
  18.             {
  19.                 TouchkeyCounts++;
  20.                 if(TouchkeyCounts >= 3)
  21.                 {
  22.                     Touchkey_RxOK = 1;
  23.                     Toggle_User_Led(User_LED1);
  24.                     TouchkeyCounts = 0;
  25.                 }
  26.             }
  27.         }

  28.         if(Touchkey_RxOK == 1)
  29.         {
  30.             if(ADC_val > critical_value)
  31.             {
  32.                 TouchkeyCounts++;
  33.                 if(TouchkeyCounts >= 3)
  34.                 {
  35.                     Touchkey_RxOK = 0;
  36.                     TouchkeyCounts = 0;
  37.                 }
  38.             }
  39.         }

  40.         TKEY_CR |=0x08000000;  //Clear Flag
  41.         }
  42. }
工程打包上传如下:
CH32V103-TOUCHKEY.rar (492.97 KB, 下载次数: 1)



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

本版积分规则

个人签名:qq群: 嵌入式系统arm初学者 224636155←← +→→点击-->小 i 精品课全集,21ic公开课~~←←→→点击-->小 i 精品课全集,给你全方位的技能策划~~←←

2841

主题

19330

帖子

110

粉丝
快速回复 在线客服 返回列表 返回顶部
个人签名:qq群: 嵌入式系统arm初学者 224636155←← +→→点击-->小 i 精品课全集,21ic公开课~~←←→→点击-->小 i 精品课全集,给你全方位的技能策划~~←←

2841

主题

19330

帖子

110

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