单片机的一个很神奇的问题,高手进!

代码:功能是当button(按钮,按钮接P1^3,和电源地)低电平的时候,点亮led灯,但是为什么没有按下按钮的时候,灯会微亮一闪一闪的。
#include <reg52.h>
sbit button = P1^3;
sbit led = P1^0;
main()
{
button=1;
while(1)
{
if(button==0)
{
led=0;
}
else led=1;
}
}

第1个回答  2013-07-31
没有按下按钮的时候,灯会微亮一闪一闪的,这与程序无关,也与按钮抖动无关,因为都没有按下,就无所谓的抖动了。应该找LED灯,要看是怎么接的,再看串联的限流电阻的大小,说明在P1.0输出高电平是就微亮了.
第2个回答  2013-07-31
不知道你LED是怎么连的,所以暂时理解你那部分是对的
你按键部分也没加防抖动延时,如果外围有少量干扰,程序可能就认为你按键按下了,另外建议你P1.3上加个10K左右上拉电阻就更好了。
建议改成:
while(1)
{
  if(button==0)
   {
    delay_10ms
    if(button==0)led=0;
    }
  else led=1;

delay部分你自己做个10ms左右的延时
第3个回答  2013-07-31
首先确定你的硬件,BUTTON既然是低有效,那么最好把IO口即P1^3口拉高(接5.1K电阻至VCC),然后最好做一下硬件去抖,接一个无极性电容接地。确定你的硬件端口没有被复用,且电源正常。
然后软件里也做一下去抖处理,
if(button==0)
{
delay_ms(5);
if(button==0)
{
led = 0;
button = 1; //拉高
}
}
else
{
led = 1;
button = 1; //拉高
}
你这种情况一般是硬件问题,好好检查一下连线!本回答被提问者采纳
第4个回答  2013-07-31
任何按键都有机械抖动 你以为按下去了 实际上金属片接触不良什么的就抖起来了 所以一般机械性能不好的按键都是触发操作的 比如按一次亮再按一次灭 按键去抖网上有很多相关知识无非是硬件上加电容软件上做延迟之类的
第5个回答  2013-07-31
软件应该没有什么问题,可能是你的开发板有哪个短路帽影响了