明月清风 发表于 7 天前

请教梁工。使用自己的板子,烧录了“03-16键简单应用-触摸按键唤醒-外中断唤醒”,串口(每秒发出1次"W”)和指示灯都正常。经打印相关信息,按下和未按下,触摸值到的值,有明显变化。 按下的阈值也低于设置的TSTH,但是无法执行到下面的代码里,不知道怎么回事?

                if(B_KeyPress)
                {
                        B_KeyPress = 0;
                        if(WakeUpkey == 0)        P_K0_LED = ~P_K0_LED;        //键触摸操作
                        if(WakeUpkey == 1)        P_K1_LED = ~P_K1_LED;
                        if(WakeUpkey == 2)        P_K2_LED = ~P_K2_LED;
                        if(WakeUpkey == 3)        P_K3_LED = ~P_K3_LED;
                        if(WakeUpkey == 4)        P_K4_LED = ~P_K4_LED;
                        if(WakeUpkey == 5)        P_K5_LED = ~P_K5_LED;
                        if(WakeUpkey == 6)        P_K6_LED = ~P_K6_LED;
                        if(WakeUpkey == 7)        P_K7_LED = ~P_K7_LED;
                        if(WakeUpkey == 8)        P_K8_LED= ~P_K8_LED;
                        if(WakeUpkey == 9)        P_K9_LED= ~P_K9_LED;
                        if(WakeUpkey == 10)        P_K10_LED = ~P_K10_LED;
                        if(WakeUpkey == 11)        P_K11_LED = ~P_K11_LED;
                        if(WakeUpkey == 12)        P_K12_LED = ~P_K12_LED;
                        if(WakeUpkey == 13)        P_K13_LED = ~P_K13_LED;
                        if(WakeUpkey == 14)        P_K14_LED = ~P_K14_LED;
                        if(WakeUpkey == 15)        P_K15_LED = ~P_K15_LED;
                }

梁工 发表于 7 天前

明月清风 发表于 2025-6-10 16:11
请教梁工。使用自己的板子,烧录了“03-16键简单应用-触摸按键唤醒-外中断唤醒”,串口(每秒发出1次"W”) ...

判断按键部分有问题吧?不按键读数多少?按键后读数多少?

明月清风 发表于 6 天前

梁工 发表于 2025-6-10 18:12
判断按键部分有问题吧?不按键读数多少?按键后读数多少?

谢谢回复。之前理解的不对,由于自己的板子 不是16键触摸。个别通道一直读出来是0,相当于一直触发了。加了打印函数,发现一直是通道3触发。

梁工 发表于 6 天前

明月清风 发表于 2025-6-11 11:03
谢谢回复。之前理解的不对,由于自己的板子 不是16键触摸。个别通道一直读出来是0,相当于一直触发了。加 ...

未启动的按键,不要做处理即可。

明月清风 发表于 5 天前

梁工,遇到一个新问题,折腾了半天没搞懂,程序始终无法运行。我正常运行的程序,包含初始化,使用了TSCTRL = 0x80; 在MCU准备进入休眠时,代码如下,               
      X32KCR = 0x80 + 0x40;   //启动外部32K晶振, 低增益+0x00, 高增益+0x40.
      while (!(X32KCR & 0x01));//等待时钟稳定
                  printf("进入休眠\n\r");
                        TSCTRL = 0x00;
                        TSCTRL = (1<<4) + (1<<3) + (1<<2) + 0;      
                  //关闭触摸模块, 允许16位数字比较器, 允许低功耗唤醒。 B7: TSGO,B6: SINGLE,B5: TSWAIT, B4: TSWUCS, B3: TSDCEN, B2: TSWUEN, B1 B0: TSSAMP
                  DelayXms(1);
                        PCON |= 0x02;      //睡眠
                        NOP(5);
                        printf("WAKE..\n\r");
                  TSCTRL = (1<<7) + (1<<6) + (1<<3) + (1<<2) + 0;      //开始扫描, 无平均, B7: TSGO,B6: SINGLE,B5: TSWAIT, B4: TSWUCS, B3: TSDCEN, B2: TSWUEN, B1 B0: TSSAMP
                         if(B_KeyPress)
                        {
                              B_KeyPress = 0;
                              if(WakeUpkey == 0)      
                              {
                                        P20 = ~P20;
                                        TSCTRL = 0x80;                        //开始自动扫描, 无平均, B7: TSGO,B6: SINGLE,B5: TSWAIT, B4: TSWUCS, B3: TSDCEN, B2: TSWUEN, B1 B0: TSSAMP
                                       return; //退出睡眠
      }
                              if(WakeUpkey == 1)      P21 = ~P21;
                              if(WakeUpkey == 2)      P42 = ~P42;
                              printf("WakeUpkey = %bd \n\r",WakeUpkey);
                        }      

现在的现象和问题就是:我只要在其他地方调用过 TSCTRL = 0x80;这句,包含初始化阶段,也就是TSGO=1,等到我再回到上述进入休眠的流程。就无法通过触摸按键从休眠中唤醒。实在不知道问题出在哪?{:weiqu:}

梁工 发表于 5 天前

明月清风 发表于 2025-6-12 09:11
梁工,遇到一个新问题,折腾了半天没搞懂,程序始终无法运行。我正常运行的程序,包含初始化,使用了TSCTRL ...

请参考我主楼的程序。

明月清风 发表于 5 天前

梁工 发表于 2025-6-12 09:24
请参考我主楼的程序。

关于触摸低功耗的部分基本上跟你的一样的了。这个问题始终存在,懵了

明月清风 发表于 5 天前

梁工 发表于 2025-6-12 09:24
请参考我主楼的程序。
梁工,你好,我直接用你的代码跑,只要 加上 TSCTRL = 0x80; 这句,后面的唤醒功能就完全失效了。我认为这是一个BUG。C:\Users\yang.xingyuan\Desktop\1749709885494.jpg

梁工 发表于 5 天前

明月清风 发表于 2025-6-12 14:33
梁工,你好,我直接用你的代码跑,只要 加上 TSCTRL = 0x80; 这句,后面的唤醒功能就完全失效了。我认为这 ...

你启动扫描,马上又进入睡眠,可能不行。你这样试下:
TSCTRL = 0x00;
delay_ms(50);        //延时一下
TSCTRL = (1<<3) + (1<<2) + 0; //关闭触摸模块, 允许16位数字比较器, 允许低功耗唤醒。 B7: TSGO,B6: SINGLE,B5: TSWAIT, B4: TSWUCS, B3: TSDCEN, B2: TSWUEN, B1 B0: TSSAMP

明月清风 发表于 4 天前

梁工 发表于 2025-6-12 14:48
你启动扫描,马上又进入睡眠,可能不行。你这样试下:
TSCTRL = 0x00;
delay_ms(50);        //延时一下


感谢回复。这里加上延时,确实有效果{:baoquan:}
页: 1 2 [3]
查看完整版本: 触摸按键唤醒,1uA/1个键/1秒唤醒,STC触摸MCU, 唤醒【主时钟停振/省电模式】