无法从PIC引脚读取输入

问题描述

我在输入阅读方面面临着一个非常困难的问题。

我只是想使用一个按钮来激活多个led,但是我不知道为什么当我按下按钮时特定的PORT不会变为0到1。

我已经看到它可能与模拟相关,但我将其转换为数字

  • PIC16F18875
  • 使用Mplabx v5.40

这是代码

#define _XTAL_FREQ 4000000
#define button TRISDbits.RD7
#include <xc.h>
ledLoop(void){
    char run = 1;
    while(1){
        if(PORTDbits.RD7==1){
           LATB=run;
           run *= 2;
           __delay_ms(200);
           
        }
        else{
            LATB=0;
        }
    }
}
void main(void)
{
    ANSELDbits.ANSD7=0;
    TRISDbits.TRISD7=1;
    TRISA=0;
    LATA=0x00;
    ledLoop();
    
}
 

我的按钮也按如下方式连接:

3V-> LED-> 10欧姆电阻->按钮->质量和RD7端口

编辑


enter image description here

如果RD的if条件== 0,则4个LED起作用,因此其起作用。对于按钮部分,如果我按下按钮,LED会起作用,但不要将PORTDbits.RD7更改为1

解决方法

您的原理图是这样吗? LEDs:3v-> LEDs-> 10R-> PORTB和BUTTON:0v-> BUTTON-> RD7也许在Button / RD7之间添加一个上拉以避免电气浮动值

,

您需要将按钮的“高”侧连接到RD7,并将按钮的“低”侧连接到地面:

schematic

这样,如果按钮打开,则3,3V的高电平将到达输入引脚。当您按下按钮时,低电平的接地到达输入引脚。

(正确的说法听起来会有所不同,但我想说的尽可能简单。)