使用按钮暂停或获取字符

Pause or Getchar with push button

我是编程新手,我想在 main() 中的 while(1) 循环之前暂停我的代码。按钮的状态改变后暂停将被打破。我不确定这是如何使用 pause 或 getchar 实现的,我已经看到它是通过按键完成的,但不确定如何通过按钮的状态更改来实现它。

#define _XTAL_FREQ 16000000
#pragma config WDT = OFF

#include <xc.h>
#include <stdio.h>
#include <math.h>
#include "lcd.h"

#define UI_Go PORTCbits.RC5 //Go button

void main(void) {
    lcd_init();

    lcd_cmd(L_L4);
    sprintf(Start, "'Go' to Start");  //Start while loop
    lcd_str(Start);
    __delay_ms(10);

while(1){    
       Refill();
    }
}

好的-

看起来您正在使用 MPLab,因此您可能正在连接到某些嵌入式设备。

听起来您还希望您的 C 代码响应该设备上的物理按钮按下。

这是特定设备的示例:

https://electrosome.com/switch-pic-microcontroller-mplab-xc8/

#define _XTAL_FREQ 8000000

#include <xc.h>

// BEGIN CONFIG
#pragma config FOSC = HS // Oscillator Selection bits (HS oscillator)
#pragma config WDTE = ON // Watchdog Timer Enable bit (WDT enabled)
#pragma config PWRTE = OFF // Power-up Timer Enable bit (PWRT disabled)
#pragma config BOREN = ON // Brown-out Reset Enable bit (BOR enabled)
#pragma config LVP = OFF // Low-Voltage (Single-Supply) In-Circuit Serial Programming Enable bit (RB3 is digital I/O, HV on MCLR must be used for programming)
#pragma config CPD = OFF // Data EEPROM Memory Code Protection bit (Data EEPROM code protection off)
#pragma config WRT = OFF // Flash Program Memory Write Enable bits (Write protection off; all program memory may be written to by EECON control)
#pragma config CP = OFF // Flash Program Memory Code Protection bit (Code protection off)
//END CONFIG

int main()
{
  TRISB0 = 0; //RB0 as Output PIN
  TRISD0 = 1; //RD0 as Input PIN

  RB0 = 0; //LED Off

  while(1)
  {
    if(RD0 == 0) //If Switch Pressed
    {
      RB0 = 1; //LED ON
      __delay_ms(3000); //3 Second Delay
      RB0 = 0; //LED OFF
    }
  }
  return 0;
}

您会注意到它 polls 设备 (RD0) 改变状态。

您还会注意到,您需要读取的特定端口因设备而异。

你需要在你的代码中做一些类似的事情,通过调整你的“while (1){...}”轮询循环来读取你的“按钮”的当前状态,暂停几毫秒左右在读取之间,如果其值发生变化,则相应地“响应”。

没有我无法测试的硬件,但将您的评论视为黄金

你需要

  while(UI_Set==1);

这将循环等待按下按钮

或者也许

  while(UI_Set==0);

不确定逻辑是哪种方式