本帖最后由 ddllxxrr 于 2017-11-4 17:54 编辑
我今天想用到按键,见开发板上有,就没有动别的心思,就把例程上给的HEX直接烧录到开发板。
想看下按键好用不啦。可让我吃惊的是,只有K2和k3可以串口输出,但串口输出的全是第3通道。如下面这个样子,无论按K2或K3都输出:
翻开原理更让我不解,居然是键子不是单独的而是相互连的,见下图:
上图的k1k2,没有直接接地,而是同K3,K4配合的,K3,K4是一端接地的,但我明明是K2,K3好用。
我重新建个工程,重新编译,不用中断,但是还是一样,程序也就是走查询那段程序(没用中断):
- while(1)
- {
- TouchKeyChannelQuery();
- if(KeyBuf)
- {
- printf("Query TouchKey Channel %02x \n",(UINT16)KeyBuf);
- KeyBuf = 0;
- mDelaymS(20);
- }
- // mDelaymS(100);
- }
复制代码而查询函数如下:
- /*******************************************************************************
- * Function Name : TouchKeyChannelQuery()
- * Description : 触摸按键通道状态查询
- * Input : None
- * Output : None
- * Return : None
- *******************************************************************************/
- void TouchKeyChannelQuery()
- {
- UINT8 ch;
- UINT16 KeyData;
- while((TKEY_CTRL&bTKC_IF) == 0); //bTKC_IF变为1时,本周期采样完成
- KeyData = TKEY_DAT; //保持87us,尽快取走
- ch = TKEY_CTRL&7; //获取当前采样通道
- if ( ch > KEY_LAST ){
- TKEY_CTRL = TKEY_CTRL & 0xF8 | KEY_FIRST; //从首通道开始采样
- }
- else
- {
- TKEY_CTRL ++; //切换至下一个采样通道
- }
- if ( KeyData < (KeyFree[ch-KEY_FIRST] - KEY_ACT) ) //如条件满足,代表按键按下
- {
- KeyBuf=ch; //可以在此处进行按键动作处理或者置标志通知main进行处理
- }
- }
- #endif
复制代码
我把代码下进去后,我试了下一样,但更奇葩的事发生了,我的手指偶尔碰了下,插针的P10和P30
具然出现了第一通道,截图如下:
不知大家的怎么样,我的TouckKey例程,跑起来就是这个样子。
是我的个例还是大家都这个样子????
此内容由EEWORLD论坛网友ddllxxrr原创,如需转载或用于商业用途需征得作者同意并注明出处