Button PIC单片机自动按下

Button PIC单片机自动按下,button,microcontroller,pic,mplab,Button,Microcontroller,Pic,Mplab,我试图通过按下按钮打开pic24FV16KA301微控制器上的LED。问题是LED会自动亮起。经过一些修改后,图片看起来是自动按下的。该按钮与上拉电阻器相连。 这是部分代码(因为有些代码与问题无关) #包括 #包括“Header_School_Project.h” #包括 #包括 #包括 #定义频率20000000 #定义LED_LOW LATAbits.LATA4 #定义按钮\u低位PORTAbits.RA1 真空总管(真空) { TRISAbits.TRISA4=0; TRISAbits.T

我试图通过按下按钮打开pic24FV16KA301微控制器上的LED。问题是LED会自动亮起。经过一些修改后,图片看起来是自动按下的。该按钮与上拉电阻器相连。 这是部分代码(因为有些代码与问题无关)

#包括
#包括“Header_School_Project.h”
#包括
#包括
#包括
#定义频率20000000
#定义LED_LOW LATAbits.LATA4
#定义按钮\u低位PORTAbits.RA1
真空总管(真空)
{
TRISAbits.TRISA4=0;
TRISAbits.TRISA1=1;
而(1)
{           
如果(!按钮低)
{
__延迟μms(100);
如果(!按钮低)
{
LED_低=1;
}
}
否则,如果(按钮低)
{
LED_低=0;
}
返回;
}
如果有人能帮我,我将不胜感激


编辑:将“延迟”毫秒(100)更改为“延迟”毫秒(1000)后,我看到LED闪烁得非常快,正如Kozmotronik提到的,您需要先将引脚设置为数字。PICs默认为模拟输入…此“解除”浪费了大量的工时。

首先使用ANSEL寄存器将porta的管脚配置为相应微控制器数据表中提到的数字管脚。

还有一件事是将反弹跳延迟增加到大约300ms,这可以解决您的问题。

您介意给我们看一下电路吗?您测量了按钮端口引脚的电压了吗?释放的按钮显示什么,按下的按钮显示什么?释放时显示3.3v,按下时显示0VSo您的b按钮级别看起来正确。如果按下按钮,LED会做什么?当按下或松开按钮时,LED会保持亮起。嗨,在使用PORTA之前,在代码中添加“ANSA=0”,以便将PORTA用作数字IO。
#include <xc.h>
#include "Header_School_Project.h"
#include <stdlib.h>
#include <stdio.h>
#include <libpic30.h>
#define _XTAL_FREQ 20000000
#define LED_LOW LATAbits.LATA4  
#define BUTTON_LOW PORTAbits.RA1

void main(void)
{
   TRISAbits.TRISA4 = 0;
   TRISAbits.TRISA1 = 1;
    
    while(1)
    {           
        if(!BUTTON_LOW)                                   
        {
            __delay_ms(100);
            if(!BUTTON_LOW)   
            {
                LED_LOW = 1;
            }
        }
        else if(BUTTON_LOW)
        {
            LED_LOW = 0;
        }
  return;
}