按例程,我写了一个调试的程序,但TSSTA2 返会的数值一值是 0x47,TSDOV 一直为溢出状态。
想请教下:怎么调整参数?
按键的扫描数跟 TSCFG1的 开关电容工作频率有什么关系?
还有放电时间的关系?参考电压的关系?
先谢过了!
我的电路和代码分别如下:
#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[6:4]+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 int readkey()
{
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;
}