按钮激活的UART消息

时间:2019-07-09 02:48:58

标签: c pic32 mikroc

“我正在尝试使用按钮,当它被按下时,它会触发通过UART发送字符串消息,但是在运行代码时,它总是检测到该按钮“一直被按下”,这并不理想。我需要修复代码的帮助。 非常感谢。

我正在使用EasyPIC Fusion v7。该设备为P32MX795F512L @ 80MHz。我将用于PIC32的MikroC pro作为我的IDE。”

“按钮和UART库用于此代码。”

char read;
unsigned int oldstate;


void main() {
  AD1PCFG = 0XFFFF;             //SETTING AN INPUTS AS DIGITAL I/O
  JTAGEN_bit = 0;               //disable JTAG


  UART2_Init(9600);
  Delay_ms(1000);
  TRISA = 1;                    //setting All portA as inputs

  UART_Set_Active(&UART2_Read, &UART2_Write, &UART2_Data_Ready, &UART2_Tx_Idle);    //Sets UART2 as active
  UART_Write_Text("UART is now ready.");
  UART_Write(13);
  UART_Write(10);

   while(1)
   {
    if (Button(&PORTA, 15, 1 ,1))            //detect if button is pressed
    {
        UART_Write_Text("Button is pressed.");
        UART_Write(13);
        UART_Write(10);
        oldstate = 1;

    }

    if (oldstate && Button(&PORTA, 15, 1, 0)) //detect from logic 1 to 0
    {
        UART_Write_Text("Button is pressed again.");
        UART_Write(13);
        UART_Write(10);
        oldstate = 0;

    }
   }
}

“我只了解了UART的工作方式以及Button库的工作方式。

我希望在第一次按下按钮时输出为“按下按钮”,然后在再次按下同一按钮时输出为“再次按下按钮”。

代码的输出始终为“按下按钮”并连续打印”

2 个答案:

答案 0 :(得分:0)

您的代码的主要问题是该行:

UART_Write_Text("Button is pressed again.");

实际上应该读为:

UART_Write_Text("Button is RELEASED.");

除此之外,如果不通过下拉电阻将RA15引脚连接到GND,则可能会遇到硬件问题。您也可以在PIC上使用internal pull-ups

答案 1 :(得分:0)

问题在这里:

TRISA = 1;

这与TRISA = 0x0001;类似,只会将端口A0用作输入。你必须写:

TRISA = 0xFFFF;`