PIC 微控制器自动按下

问题描述

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

#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;
}

如果有人能帮我解决这个问题,我将不胜感激。

编辑:将 __delay_ms(100) 更改为 __delay_ms(1000) 后,我看到 LED 的闪烁速度非常快

解决方法

首先使用ANSEL寄存器将porta的引脚配置为相应微控制器数据表中提到的数字引脚。
还有一件事是将去抖动延迟增加到大约 300 毫秒,这可以解决您的问题。

,

正如 Kozmotronik 所提到的,您需要先将引脚设置为数字。 PIC 默认为模拟输入……这种“默认”浪费了大量工时。