【发布时间】:2020-08-29 14:27:53
【问题描述】:
我在输入阅读方面遇到了一个非常棘手的问题。
我只是想使用一个按钮来激活几个 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 端口
编辑
如果 RD==0 的 if 条件,则 4 个 LED 工作,因此它工作。对于按钮部分,如果我按下按钮 LED 工作,但不要将 PORTDbits.RD7 更改为 1
【问题讨论】:
-
该示意图听起来好像没有为引脚提供正确的驱动,但还不清楚。请使用适当的示意图进行编辑。
-
我刚刚编辑了帖子,感谢您的帮助
-
我不太清楚,因为这是一张面包板的照片而不是原理图,但看起来你的按钮 GPIO 可能只是接地。按下和释放按钮时,使用万用表或示波器检查输入引脚上的电压。
-
将
LATB=0;更改为LATB=~LATB; __delay_ms(500);看看是否会出现这种情况。