这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界» 论坛首页» 嵌入式开发» MCU» 哪位知道国产89位单片机STC8H触摸按键的原理和用法?

共4条 1/1 1 跳转至

哪位知道国产89位单片机STC8H触摸按键的原理和用法?

工程师
2021-03-04 09:53:41 打赏

按例程,我写了一个调试的程序,但TSSTA2 返会的数值一值是 0x47,TSDOV 一直为溢出状态。
想请教下:怎么调整参数?
按键的扫描数跟 TSCFG1的 开关电容工作频率有什么关系?

还有放电时间的关系?参考电压的关系?

先谢过了!


我的电路和代码分别如下:


  1. #include "touch_key.h"


  2. void intTouch_key()

  3. {

  4. P_SW2|=0x80;

  5. TSRT = 0x00;//ûÓзÖʱLED

  6. TSCHEN1=0x0f; //ͨµÀΪ TK0---TK3

  7. 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

  8. TSCFG2 = 2; // //ÅäÖô¥Ãþ°´¼ü¿ØÖÆÆ÷µÄÄÚ²¿²Î¿¼µçѹ(AVCCµÄ·Öѹ±È), 0(1/4) 1(1/2) 2(5/8) 3(3/4)

  9. TSCTRL = (1<<7)+ 0<<6+0; //¿ªÊ¼×Ô¶¯É¨Ãè, ÎÞƽ¾ù, B7: TSGO, B6: SINGLE, B5: TSWAIT, B4: TSWUCS, B3: TSDCEN, B2: TSWUEN, B1 B0: TSSAMP


  10. }



  11. unsigned int readkey()

  12. {


  13. unsigned char keydat;

  14. unsigned int keycnt;


  15. keydat=TSSTA2;


  16. if(keydat&0x40)//TSDOV ÖÃ1 ÓÐÒç³ö

  17. {

  18. TSSTA2|=0x40;

  19. }


  20. if(keydat&0x80)//¶ÁÈ¡Íê³É

  21. {

  22. TSSTA2|=0x80;


  23. switch (keydat&0x0f)

  24. {

  25. case 0:{keycnt=TSDATH<<8|TSDATL;



  26. }break;

  27. case 1:{}break;

  28. case 2:{}break;

  29. case 3:{}break;

  30. default:break;

  31. }


  32. }


  33. return keycnt;



  34. }





关键词: 国产MCU STC8H 触摸按键

工程师
2021-03-04 21:25:14 打赏
2楼

开关电容工作频率:公用的电路,不管是一路还是多路按键,都一样。
放电时间:就是检测完毕,将参考电容的电放掉,公用的电路,不管是一路还是多路按键,都一样。
参考电压:比较器的参考电压,参考电容充电到这个电压就完成检测,一般建议取1/2、5/8或3/4。
按键的扫描数多少,以上设置都一样,公用的。


工程师
2021-03-04 21:38:43 打赏
3楼

都是充放电的原理,或者检测频率是否变化来判断电容按键是否有效。


工程师
2021-03-04 21:41:44 打赏
4楼

现在自带触摸功能的MCU不少,这个功能挺方便和实用.


共4条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册]