hero245 发表于 2021-2-27 07:09:14

请教了下STC8H 触摸按键的原理、用法!

按例程写了一个调试的程序,但TSSTA2 返会的数值一值是0x47,TSDOV 一直为溢出状态。
想请教下:怎么调整参数?

按键的扫描数跟 TSCFG1的 开关电容工作频率有什么关系?还有放电时间的关系?参考电压的关系?

hero245 发表于 2021-3-1 16:33:24

#include "touch_key.h"

void intTouch_key()
{
        P_SW2|=0x80;
        TSRT = 0x00;//ûÓзÖʱLED
        TSCHEN1=0x0f; //ͨµÀΪ TK0---TK3
        TSCFG1= (0<<7) + 3;        // ƵÂÊF_key=fosc/(2*(TSCFG1+1)),·Åµçʱ¼ä 0(125) 1(250) 2(500) 3(1000) 4(2000) 5(2500) 6(5000) 7(7500) ×îС3
        TSCFG2= 2;                        //        //ÅäÖô¥Ãþ°´¼ü¿ØÖÆÆ÷µÄÄÚ²¿²Î¿¼µçѹ(AVCCµÄ·Öѹ±È), 0(1/4)1(1/2)2(5/8)3(3/4)
TSCTRL = (1<<7)+ 0<<6+0;                        //¿ªÊ¼×Ô¶¯É¨Ãè, ÎÞƽ¾ù, B7: TSGO,B6: SINGLE,B5: TSWAIT, B4: TSWUCS, B3: TSDCEN, B2: TSWUEN, B1 B0: TSSAMP

}


unsigned intreadkey()
{

        unsigned char keydat;
        unsigned int keycnt;

        keydat=TSSTA2;

        if(keydat&0x40)//TSDOV ÖÃ1ÓÐÒç³ö
        {
                TSSTA2|=0x40;
        }

        if(keydat&0x80)//¶ÁÈ¡Íê³É
        {
                TSSTA2|=0x80;
               
                switch (keydat&0x0f)
                {
                        case 0:{keycnt=TSDATH<<8|TSDATL;
                                     
                               
                                }break;
                        case 1:{}break;
                        case 2:{}break;
                        case 3:{}break;
                        default:break;
                }
               
        }
       
        return keycnt;


}

补充下代码、原理图,版主指教一下。谢谢!!

小李非刀 发表于 2021-3-3 22:42:43


开关电容工作频率:公用的电路,不管是一路还是多路按键,都一样。
放电时间:就是检测完毕,将参考电容的电放掉,公用的电路,不管是一路还是多路按键,都一样。
参考电压:比较器的参考电压,参考电容充电到这个电压就完成检测,一般建议取1/2、5/8或3/4。
按键的扫描数多少,以上设置都一样,公用的。
页: [1]
查看完整版本: 请教了下STC8H 触摸按键的原理、用法!