打印
[RISC-V MCU 应用开发]

【RISC-V MCU CH32V103测评6】+ TOUCHKEY控制LED的亮灭

[复制链接]
536|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
xyz549040622|  楼主 | 2020-12-6 17:13 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
CH32V103 系列产品触摸检测控制(TKEY_V)单元,通过将电容量变化转变为频率变化进行采样,实现触摸按键检测功能。。检测通道复用 ADC 的 16 个外部通道,通过 ADC模块的单次转换模式实现触摸按键检测。应用程序通过数字值的变化量判断触 摸按键状态。

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

void Touch_Key_Init(void)
{
    GPIO_InitTypeDef GPIO_InitStructure;

    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE );
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE );

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

    ADC_Cmd(ADC1, ENABLE);
    TKEY_CH =0x00000002;     // TouchKey Channel
    TKEY_CR |= 0x51000000;   // Enable TouchKey
}
*******************************************************************************/
uint16_t Touch_Key_Adc(uint8_t ch)
{
  u16 val;

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

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

        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
        Delay_Init();
        User_Led_Init();
    USART1_Init();
    Touch_Key_Init();
    USARTx_SendStr(USART1, "This is a test data.\n");
        while(1)
        {
        ADC_val = Touch_Key_Adc(ADC_Channel_2);
        printf( "TouchKey:%04d\r\n",  ADC_val );
        Delay_Ms(10);

        if(Touchkey_RxOK == 0)
        {
            if(ADC_val < critical_value)
            {
                TouchkeyCounts++;
                if(TouchkeyCounts >= 3)
                {
                    Touchkey_RxOK = 1;
                    Toggle_User_Led(User_LED1);
                    TouchkeyCounts = 0;
                }
            }
        }

        if(Touchkey_RxOK == 1)
        {
            if(ADC_val > critical_value)
            {
                TouchkeyCounts++;
                if(TouchkeyCounts >= 3)
                {
                    Touchkey_RxOK = 0;
                    TouchkeyCounts = 0;
                }
            }
        }

        TKEY_CR |=0x08000000;  //Clear Flag
        }
}
工程打包上传如下:
CH32V103-TOUCHKEY.rar (492.97 KB)



使用特权

评论回复

相关帖子

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

本版积分规则

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

2810

主题

19297

帖子

104

粉丝