找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1528|回复: 3
收起左侧

辉芒微单片机FT62F083RB触摸滑轮滑条滑块程序资料原创

[复制链接]
ID:370644 发表于 2023-8-31 15:39 | 显示全部楼层 |阅读模式
    辉芒微单片机FT62F083RB触摸滑轮滑条滑块这是最近亚马逊很火的产品,轻轻滑动就能实现调光调色,显得很高大尚,产品智能化档次提升了。下面就将我最近研究的分享出来。
滑轮介绍:它是一个圆盘,由4个touch触摸按键组成,它将4个touch铜泊均匀分布在一个圆形的盘上,此时这个圆形分为32等份,即32个按键,我们手触到哪个位置就会有相对应的位置。然后将触摸到的值解码出来,去做你想做得事。
滑条介绍:它是一个长方形条,也是由4个touch触摸按键组成,这一个长条将它分为16等分,即16个按键,我们手触到哪个位置就会有相对应的位置。然后将触摸到的值解码出来就行了。
注意事项:1、PCB layout时要注意均匀分布,否则解码出来的效果会不灵敏
                2、在调触摸阀值时,一定要在实际环境中调试,千万不要飞线之类的,pcb板要求要标准化。即你实际应用时是什么结构,你调试时就要用什么结构,若你调试时是用裸板,你应用时装了外壳,那是无法使用的。否则你调试时环境和使用不一样,效果完全不一样了。
3、程序算法上,要注意正反转判断及手触摸位尽量不能太精密,因为圆盘太小,手指太大,它会占用2个键值,此时你若太精密,就导致它会误判现象。来点实际的,现在把代码上上来,因为电脑是正版繁体系统,故注释都是乱码,望见谅。里面有视频效果,真实的。

滑条1.jpg 滑条2.jpg 滑条3.jpg 滑条图片.jpg

单片机源程序如下:
  1. #include "common.h"
  2. #include "syscfg.h"
  3. #include "touch.h"
  4. #define  uchar   unsigned char
  5. #define  uint      unsigned int
  6. extern volatile unsigned char WSPosition1;
  7. extern volatile unsigned char WSPosition2;
  8. extern   uint8_t                      fmd_channels;
  9. volatile  uint16_t                 readKeyNum;     
  10. uint16_t  lastkey=0;
  11. BOOL      f_lowpower=0;                                          
  12. uint16_t   TouchTimeCount;
  13. #define SENSIBILITY        2
  14. volatile  int lastKey;
  15. volatile  int currKey;
  16. volatile int delta;
  17. volatile int currOrient = 0;
  18. volatile unsigned char pwmDuty = 0;
  19. bit        flag;
  20. uchar pwm;
  21. void interrupt ISR(void)
  22. {
  23. if(T4UIE && T4UIF)                        
  24. {
  25. T4UIF = 1;                           
  26. TouchTimeCount++;
  27. }
  28. }
  29. void SysInit(void)
  30. {
  31. OSCCON = 0B01110001;               


  32. INTCON = 0;                                                  
  33. PORTB = 0B00000010;               
  34. TRISB = 0B11111101;               
  35. WPUB = 0B00000000;            
  36. ANSELA = 0B00000000;   
  37. }
  38. void WDT_Initial(void)
  39. {
  40. CLRWDT();                                             
  41. MISC0  = 0B00000000;           
  42. if(WAKEUPFREQUENCY==16)
  43. {
  44. WDTCON = 0B00001100;
  45. }
  46. else if(WAKEUPFREQUENCY==8)
  47. {
  48. WDTCON = 0B00001110;
  49. }
  50. else
  51. {
  52. WDTCON = 0B00010000;
  53. }         


  54. }
  55. void Time4Initial(void)
  56. {
  57. PCKEN |=0B00001000;      
  58. TIM4CR1        =0B00000101;
  59. TIM4IER        =0B00000001;
  60. TIM4SR        =0B00000000;
  61. TIM4EGR        =0B00000000;
  62. TIM4CNTR=0;
  63. TIM4PSCR=0B00000111;
  64. TIM4ARR        =124;
  65. INTCON |= 0B11000000;   
  66. }
  67. void Time1Initial(void)
  68. {
  69. PCKEN |= 0B00000010;   
  70. CKOCON=0B00100000;
  71. TCKSRC = 0B00000000;
  72. TIM1CR1 =0B10000101;  
  73. TIM1SMCR=0B00000000;
  74. TIM1IER = 0B00000000;
  75. TIM1SR1 =0B00000000;
  76. TIM1SR2 =0B00000000;
  77. TIM1EGR =0B00000000;
  78. TIM1CCMR1 =0B00000000;
  79. TIM1CCMR2 =0B00000000;
  80. TIM1CCMR3 =0B00000000;
  81. TIM1CCMR4 =0B01101000;
  82. TIM1CCER1 =0B00000000;
  83. TIM1CCER2 =0B00010000;
  84. AFP0=0B00001100;
  85. AFP1=0B00000000;  
  86. TIM1CNTRH = 0B00000000;               
  87. TIM1CNTRL = 0B00000000;
  88. TIM1PSCRH = 0B00000000;
  89. TIM1PSCRL = 0B00000000;
  90. TIM1ARRH = 0;               
  91. TIM1ARRL = 213;
  92. TIM1RCR = 0B00001111;           
  93. TIM1CCR1H =0;               
  94. TIM1CCR1L =14;
  95. TIM1CCR2H =0;               
  96. TIM1CCR2L = 14;
  97. TIM1CCR3H = 0;               
  98. TIM1CCR3L = 14;
  99. TIM1CCR4H =0;               
  100. TIM1CCR4L = 14;
  101. TIM1BKR = 0B11000000;           
  102. TIM1DTR = 0B00000111;           
  103. TIM1OISR =0B00000000;
  104. LEBCON =0B00000000;
  105. }
  106. void delay(uint16_t ii)
  107. {
  108. uint16_t x,y;
  109. for(x=0;x<500;x++)
  110. for(y=ii;y>0;y--);
  111. }
  112. unsigned char dealWithPositionValue(void)
  113. {
  114. unsigned char key = 0;
  115. currKey = WSPosition1;
  116. if(currKey!=0)
  117. {
  118. if(currKey != lastKey)
  119. {
  120. if((currKey != 16) && (lastKey != 16))
  121. {
  122. delta = currKey - lastKey;
  123. if((delta > 0) && (delta <= SENSIBILITY))
  124. {
  125. key = 1;
  126. }
  127. else if((delta < 0) && (delta >= (-SENSIBILITY)))
  128. {
  129. key = 2;
  130. }
  131. else
  132. {
  133. key = 0;
  134. }
  135. }
  136. else if((currKey == 16))
  137. {
  138. if(lastKey >= (16-SENSIBILITY))
  139. {
  140. key = 1;
  141. }
  142. else if(lastKey <= SENSIBILITY)
  143. {
  144. key = 2;
  145. }
  146. else
  147. {
  148. key = 0;
  149. }
  150. }
  151. else if((lastKey == 16))
  152. {
  153. if(currKey >= (16-SENSIBILITY))                        
  154. {
  155. key = 2;
  156. }
  157. else if(currKey <= SENSIBILITY)
  158. {
  159. key = 1;
  160. }
  161. else
  162. {
  163. key = 0;
  164. }
  165. }
  166. lastKey = currKey;        
  167. }

  168. }
  169. return key;
  170. }
  171. void main(void)
  172. {
  173. SysInit();
  174. Time4Initial();
  175. Time1Initial();
  176. TouchInital();
  177. WDT_Initial();
  178. while(1)
  179. {      
  180. CLRWDT();
  181. if(currOrient == 1)
  182. {
  183. if((currKey>3)&&(currKey<=6))
  184. {

  185. if(TIM1CCR4L>=42)
  186. {
  187. TIM1CCR4L= 42;
  188. }
  189. else
  190. {
  191. TIM1CCR4L++;
  192. delay(10);
  193. }
  194. }
  195. else if((currKey>6)&&(currKey<=9))
  196. {
  197. if(TIM1CCR4L>=84)
  198. {
  199. TIM1CCR4L= 84;
  200. }
  201. else
  202. {
  203. TIM1CCR4L++;
  204. delay(10);
  205. }
  206. }
  207. else if((currKey>9)&&(currKey<=12))
  208. {
  209. if(TIM1CCR4L>=126)
  210. {
  211. TIM1CCR4L= 126;
  212. }
  213. else
  214. {
  215. TIM1CCR4L++;
  216. delay(10);
  217. }
  218. }
  219. else if((currKey>12)&&(currKey<=14))
  220. {
  221. if(TIM1CCR4L>=168)
  222. {
  223. TIM1CCR4L= 168;
  224. }
  225. else
  226. {
  227. TIM1CCR4L++;
  228. delay(10);
  229. }
  230. }
  231. else if((currKey>14)&&(currKey<=16))
  232. {
  233. if(TIM1CCR4L>=210)
  234. {
  235. TIM1CCR4L= 210;
  236. }
  237. else
  238. {
  239. TIM1CCR4L++;
  240. delay(10);
  241. }
  242. }
  243. }
  244. else if(currOrient == 0)
  245. {
  246. flag=0;
  247. }
  248. else if(currOrient == 2)
  249. {
  250. if((currKey>0)&&(currKey<=3))
  251. {
  252. if(TIM1CCR4L>8)
  253. {
  254. TIM1CCR4L--;
  255. delay(10);
  256. }
  257. else
  258. {
  259. TIM1CCR4L= 8;
  260. }
  261. }
  262. else if((currKey>3)&&(currKey<=6))
  263. {
  264. if(TIM1CCR4L>42)
  265. {
  266. TIM1CCR4L--;
  267. delay(10);        
  268. }
  269. else
  270. {
  271. TIM1CCR4L= 42;

  272. }
  273. }
  274. else if((currKey>6)&&(currKey<=9))
  275. {
  276. if(TIM1CCR4L>84)
  277. {
  278. TIM1CCR4L--;
  279. delay(10);        
  280. }
  281. else
  282. {
  283. TIM1CCR4L= 84;
  284. }
  285. }
  286. else if((currKey>9)&&(currKey<=12))
  287. {
  288. if(TIM1CCR4L>126)
  289. {
  290. TIM1CCR4L--;
  291. delay(10);        
  292. }
  293. else
  294. {
  295. TIM1CCR4L= 126;
  296. }
  297. }
  298. else if((currKey>12)&&(currKey<=14))
  299. {
  300. if(TIM1CCR4L>168)
  301. {
  302. TIM1CCR4L--;
  303. delay(10);
  304. }
  305. else
  306. {

  307. TIM1CCR4L= 168;
  308. }
  309. }
  310. }
  311. if(TouchTimeCount>=(1000/SCANNINGTIME))                           
  312. {
  313. TouchTimeCount = 0;

  314. readKeyNum = TouchKeyScan();         
  315. currOrient = dealWithPositionValue();
  316. }
  317. }
  318. }
复制代码

PCB文件下载: PCB文件.7z (3.81 MB, 下载次数: 46)

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

ID:576203 发表于 2023-12-27 11:26 | 显示全部楼层
感谢楼主无私分享,最近看到有用ft62f211做的隔空触摸调光模块,和水位检测。应该也是一样原理。楼主有空了也实验一下
回复

使用道具 举报

ID:108987 发表于 2024-1-5 08:24 | 显示全部楼层
感谢楼主, 正找滑环触摸芯片呢
回复

使用道具 举报

ID:71233 发表于 2024-1-8 08:10 | 显示全部楼层
辉芒微单片机很便宜,下载器贵不贵呢?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表