切换带有while / if的case时会产生错误

问题描述 投票:-1回答:2

我正在研究一个程序,该程序通过按钮作为键来执行借记交易。到目前为止,我已经获得了默认的“ Hello”消息,直到按了按钮1或按钮2(PB1和PB2)时才显示。我的switch语句似乎有问题。这是我要尝试的操作:在屏幕上用“ Hello”初始化,然后等待用户按下按钮。如果按了PB1,则转到案例2。在案例2中,它将显示总计金额,并提示用户按PB1确认为确定或按PB2取消。如果按了PB1,则转到情况3。如果按了PB2,则返回情况1,并再次显示默认消息,直到用户按下按钮为止。然后,案例3将只确定他们从哪个帐户获取资金,然后转到案例4接受密码#(我没有提供此密码,但这实际上是我要完成的过程)。

未按下时按钮状态为'1',当按下按钮状态为'0'。这就是为什么我尝试使用while(PB1 == 0)的原因,以便如果推送PB1,请执行以下操作。我也尝试过使用if(PB1 == 0)来做同样的事情,但是在这两种情况下,我似乎陷入了反复打印问候的循环中。然后,在此循环中,如果我按PB1,它将立即移至“总计为$ 20.75按1表示确定,或按2表示取消”到“已取消”,此时它仅重复“已取消”,而不是返回到情况1。“已取消”仅在按PB2时才打印,这不是我要做的,但它仍然可以打印。

任何帮助将不胜感激。

int beginProcess = 1;


  while (1)
  {

      switch (beginProcess)
      {

          case 1:
            printf("Hello \r\n");
            PB1 = readPin1;

            while (PB1 == 0)
            {
                beginProcess = 2;
            }
            break;

          case 2:
              printf("Total is $20.75 \r\n");
              printf("Press 1 for OK or 2 for CANCEL\r\n");

              PB1 = readPin1;
              PB2 = readPin2;

              while (PB1 == 0)
              {
                  beginProcess = 3;
              }
              while (PB2 == 0)
              {
                  printf("Cancelled \r\n");
                  beginProcess = 1;
              }
             break;

          case 3:

              printf("Press 1 for chequing \r\n");
              printf("Press 2 for savings \r\n");

              PB1 = readPin1;
              PB2 = readPin2;

              while (PB1 == 0)
              {
                  beginProcess = 4;
              }

              while (PB2 == 0)
              {
                  beginProcess = 4;
              }
              break;
     }
}

我正在研究一个程序,该程序通过按钮作为键来执行借记交易。到目前为止,我已经能够获得默认消息“ Hello”,并在最开始显示,直到...

c switch-statement
2个回答
0
投票

首先使用while逻辑替换switch语句中的if循环。第二个使beginProcessvolatile int


0
投票

我相信这是您要查找的代码类型。您希望您的while循环在等待输入时阻塞。但是您需要不断读取两个引脚以进行输入,以改变屏幕。该代码应在每个while循环中阻塞,直到检测到输入。 键正在while循环内不断读取引脚状态!

© www.soinside.com 2019 - 2024. All rights reserved.