我正在使用按钮进行练习。当LED开始闪烁时按下按钮,再次按下按钮时停止按钮。当我尝试时,LED在第一次按下时闪烁,但它没有在第二次停止。我正在使用PIC16F877A MCU和HiTech C编译器。我的代码是:
#include<pic.h>
#define _XTAL_FREQ 20000000
void main()
{
TRISB = 0x01;
PORTB = 0x00;
while(1){
if(RB0 == 1){
while(1){
PORTB = 0xff;
__delay_ms(250);
PORTB = 0x00;
__delay_ms(250);
if(RB0 == 1){
break;
}
}
}
}
}
答案 0 :(得分:0)
我认为这是一个“太短”的循环。
使用double while来捕获输入会导致两个IF在释放按钮之前有效数千次。
建议您在按钮释放时进行管理,这意味着您可以触发按钮并在释放按钮时有效按下。
一个简单的解决方案可以是:
func setSineAction()
{
let scene = self.parent as! SKScene
let y42 = scene.size.height/2
let x1 = scene.size.width
let x2 = scene.size.width * 0.875
let x3 = scene.size.width * 0.750
let x4 = scene.size.width * 0.625
let x5 = scene.size.width * 0.500
let x6 = scene.size.width * 0.375
let x7 = scene.size.width * 0.250
let x8 = scene.size.width * 0.125
let x9 = 0.0 as CGFloat
let path = CGPathCreateMutable();
CGPathMoveToPoint(path, nil, x1, y42)
CGPathAddQuadCurveToPoint(path, nil, (x1/2)+(x2/2), scene.size.height*0.7, x2, y42)
CGPathAddQuadCurveToPoint(path, nil, (x2/2)+(x3/2), scene.size.height*0.3, x3, y42)
CGPathAddQuadCurveToPoint(path, nil, (x3/2)+(x4/2), scene.size.height*0.7, x4, y42)
CGPathAddQuadCurveToPoint(path, nil, (x4/2)+(x5/2), scene.size.height*0.3, x5, y42)
CGPathAddQuadCurveToPoint(path, nil, (x5/2)+(x6/2), scene.size.height*0.7, x6, y42)
CGPathAddQuadCurveToPoint(path, nil, (x6/2)+(x7/2), scene.size.height*0.3, x7, y42)
CGPathAddQuadCurveToPoint(path, nil, (x7/2)+(x8/2), scene.size.height*0.7, x8, y42)
CGPathAddQuadCurveToPoint(path, nil, (x8/2)+(x9/2), scene.size.height*0.3, x9, y42)
self.runAction(SKAction.followPath(path, asOffset: false, orientToPath: false, duration: 10))
}
通过这个非常简单的解决方案,你的详细说明,按钮总是有一种“奇怪的感觉”,因为每个循环延迟250ms(在你的情况下是500ms)这意味着你可以松动单按钮压力。
记笔记,只需输入一个简单的输入,你就必须管理去抖动。 当任何机械开关的触点撞在一起时,它们会在稳定之前反弹一点,导致反弹。当然,去抖是消除反弹的过程,将模拟世界的野蛮现实转化为原始的零和零。
无论如何,最好的解决方案是添加一个管理LED闪烁的计时器,并使用主循环来评估按钮压力。这样可以避免输入检查之间的延迟。
答案 1 :(得分:0)
我认为你的代码运行速度太快(与之前的回答相同)。
如果你按下,你会进入。如果()很难,按下第二个按钮。
你应该去掉你的按钮。要触发按钮,您可以使用中断更改(下降上升沿)或计数&#34;推动&#34;在定时器中断(如果端口为低或高,则每隔x毫秒查看一次,如果端口已更改则增加变量)
希望这有帮助