用STM8S做了一个触摸按键,按下按键后通过UART发送一个数据
能不能实现我手指触摸按键后,就不停的发送数据,手指离开按键的时候就停止发送呢?
我用sSCKeyInfo[1].Setting.b.DETECTED这个变量做循环控制条件好像不行
多谢
其实用sSCKeyInfo[0].Setting.b.DETECTED作为判断条件,也可以实现的
谢谢你啊
我用sSCKeyInfo[0].Setting.b.DETECTED作为判断条件的时候,串口会不停的发送数据,调试状态下sSCKeyInfo[0].Setting.b.DETECTED的值始终为1,不发生改变,循环无法停止。
如果增加变量,思路如何,请指教!多谢!
那你手指离开的时候,又没把这个变量清掉呢?
个人想法,如果有手指触发,那么等待发送完毕,检测是否还有手指按着,又继续发送数据,没有清楚这个变量状态,不知道这样说对不对
谢谢你啊
我用sSCKeyInfo[0].Setting.b.DETECTED作为判断条件的时候,串口会不停的发送数据,调试状态下sSCKeyInfo[0].Setting.b.DETECTED的值始终为1,不发生改变,循环无法停止。
如果增加变量,思路如何,请指 ...
调试状态下sSCKeyInfo[0].Setting.b.DETECTED的值始终为1,这说明触摸按键还没有正常工作?
正常情况下,手指离开后sSCKeyInfo[0].Setting.b.DETECTED的值应该变成0
也就是说sSCKeyInfo[0].Setting.b.DETECTED这个位变量初始为0
当我手指触摸按键后,就会自动变为1,手指移开就自动恢复为0
如果是这个原理,应该可以实现我想要的结果
6# IJK
也就是说sSCKeyInfo[0].Setting.b.DETECTED这个位变量初始为0
当我手指触摸按键后,就会自动变为1,手指移开就自动恢复为0
正常情况就是这样
大哥,我遇到不正常情况了
void ExtraCode_StateMachine(void)
{
if ((TSL_GlobalSetting.b.CHANGED) && (TSLState == TSL_IDLE_STATE))
{
TSL_GlobalSetting.b.CHANGED = 0;
if (sSCKeyInfo[0].Setting.b.DETECTED) /* KEY 1 touched */
{
if (Led1State == OFF)
{
LED1_ON();
}
else
{
LED1_OFF();
}
UART2_DR = key1;
while (!(UART2_SR & 0x80));
}
if (sSCKeyInfo[1].Setting.b.DETECTED) /* KEY 2 touched */
{
if (Led2State == OFF)
{
LED2_ON();
}
else
{
LED2_OFF();
}
while (sSCKeyInfo[1].Setting.b.DETECTED == 1)
{
UART2_DR = key2;
while (!(UART2_SR & 0x80));
}
}
if (sSCKeyInfo[2].Setting.b.DETECTED) /* KEY 3 touched */
{
if (Led3State == OFF)
{
LED3_ON();
}
else
{
LED3_OFF();
}
UART2_DR = key3;
while (!(UART2_SR & 0x80));
}
}
}
我的程序是上面这段,我按下key2后,就进入死循环,串口不停的输出数据key2;单步执行,发现sSCKeyInfo[1].Setting.b.DETECTED的值为1保持不变,只有经过((TSL_GlobalSetting.b.CHANGED) && (TSLState == TSL_IDLE_STATE))这行代码后才变为0;
对这个软件库不熟悉,还请指教如何实现我想要的效果,增加变量也行啊!
代码写得有问题。
不应该在 ExtraCode_StateMachine函数里面通过串口发送数据
代码写得有问题,在 ExtraCode_StateMachine函数里用while是不妥的,改成这样应该可行
if (sSCKeyInfo[1].Setting.b.DETECTED) /* KEY 2 touched */
{
if (Led2State == OFF)
{
LED2_ON();
}
else
{
LED2_OFF();
}
if(UART2_SR & 0x80) /* 如果串口2 可以发送数据 */
{
UART2_DR = key2;
}
}
让串口一直不停地发数据不是个好办法,串口太过繁忙, 有可能会影响程序的其他地方
按下按键后通过UART发送数据,其实没有必要。
调试STM8的触摸按键,有更好的方式,就是在watch窗口加入需要看的变量,比如sSCKeyInfo[1].Setting.b.DETECTED,然后点右键打开read-on-the-fly,就会不停刷新watch窗口的变量了。