标题: 小白请教一个单片机AT89C51的问题,两个LED轮流点亮500ms 求思路 [打印本页]

作者: 479674001    时间: 2020-3-5 21:44
标题: 小白请教一个单片机AT89C51的问题,两个LED轮流点亮500ms 求思路
他的要求是p0.0、p0.1相连的两个LED轮流点亮500ms,想了很久没想出来,大佬能给一个具体思路吗

作者: lovexulu    时间: 2020-3-5 22:38
你好,轮流点亮,我理解为P0.0亮500ms然后熄灭,接着P0.1亮500ms然后熄灭,然后P0.0亮500ms。。。。。循环下去。那么转化成这么理解,P0.0输出-->延迟500ms-->P0.0停止输出-->P0.1输出-->延迟500ms-->P0.1停止输出。完成一循环,那么我把上面步骤放入循环体中不就可以了吗?授人与鱼不如授人与渔,还请你多多思考一下。
作者: CZ1    时间: 2020-3-5 22:41
使用定时器计时,每500ms改变一次两个小灯状态。初始状态相反。
作者: hantu    时间: 2020-3-5 22:51
while(1)
{
    P0^0=~P0^0;
    P0^1=~P0^0;
    DelayMs(500);  //延时500ms,这个子函数自己写吧
}
作者: 想进步要学习    时间: 2020-3-5 22:57
while(1)
{
  LED1亮;
  延时500ms;
  LED1灭;
  LED2亮;
  延时500ms;
  LED2灭;
}
你要这样子吗?
作者: wulin    时间: 2020-3-6 07:59
这种逻辑功能可以有多种写法,仅举2例种供楼主参考。
#include "reg52.h"
sbit led1=P0^0;
sbit led2=P0^1;
void delay(unsigned int i)
{
  while(i--);
}
void main()
{
        led1=0;
        delay(55500);
        while(1)
        {
                led2=led1;
                led1=~led1;
                delay(55500);
        }
}

#include "reg52.h"

void delay(unsigned int i)
{
  while(i--);
}
void main()
{
        P0=0xfe;
        delay(55500);
        while(1)
        {
                P0=P0<<1|0x01;
                delay(55500);
                P0=P0>>1|0x80;
                delay(55500);
        }
}

作者: hghvhgv    时间: 2020-3-6 10:49
用延时函数就行
作者: 479674001    时间: 2020-3-6 12:11
lovexulu 发表于 2020-3-5 22:38
你好,轮流点亮,我理解为P0.0亮500ms然后熄灭,接着P0.1亮500ms然后熄灭,然后P0.0亮500ms。。。。。循环 ...

谢谢谢谢
作者: 479674001    时间: 2020-3-6 12:11
感谢帮助我的大佬,我就不一一回复了




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1