找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1974|回复: 8
收起左侧

小白请教一个单片机AT89C51的问题,两个LED轮流点亮500ms 求思路

[复制链接]
ID:659173 发表于 2020-3-5 21:44 | 显示全部楼层 |阅读模式
他的要求是p0.0、p0.1相连的两个LED轮流点亮500ms,想了很久没想出来,大佬能给一个具体思路吗
回复

使用道具 举报

ID:687694 发表于 2020-3-5 22:38 | 显示全部楼层
你好,轮流点亮,我理解为P0.0亮500ms然后熄灭,接着P0.1亮500ms然后熄灭,然后P0.0亮500ms。。。。。循环下去。那么转化成这么理解,P0.0输出-->延迟500ms-->P0.0停止输出-->P0.1输出-->延迟500ms-->P0.1停止输出。完成一循环,那么我把上面步骤放入循环体中不就可以了吗?授人与鱼不如授人与渔,还请你多多思考一下。
回复

使用道具 举报

ID:560467 发表于 2020-3-5 22:41 | 显示全部楼层
使用定时器计时,每500ms改变一次两个小灯状态。初始状态相反。
回复

使用道具 举报

ID:462827 发表于 2020-3-5 22:51 | 显示全部楼层
while(1)
{
    P0^0=~P0^0;
    P0^1=~P0^0;
    DelayMs(500);  //延时500ms,这个子函数自己写吧
}
回复

使用道具 举报

ID:633559 发表于 2020-3-5 22:57 | 显示全部楼层
while(1)
{
  LED1亮;
  延时500ms;
  LED1灭;
  LED2亮;
  延时500ms;
  LED2灭;
}
你要这样子吗?
回复

使用道具 举报

ID:213173 发表于 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);
        }
}
回复

使用道具 举报

ID:559684 发表于 2020-3-6 10:49 | 显示全部楼层
用延时函数就行
回复

使用道具 举报

ID:659173 发表于 2020-3-6 12:11 | 显示全部楼层
lovexulu 发表于 2020-3-5 22:38
你好,轮流点亮,我理解为P0.0亮500ms然后熄灭,接着P0.1亮500ms然后熄灭,然后P0.0亮500ms。。。。。循环 ...

谢谢谢谢
回复

使用道具 举报

ID:659173 发表于 2020-3-6 12:11 | 显示全部楼层
感谢帮助我的大佬,我就不一一回复了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表