找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2313|回复: 13
打印 上一主题 下一主题
收起左侧

菜鸟请教:STC89C55RD+单片机做流水灯效果无法点亮LED灯,问题出在哪里?

[复制链接]
跳转到指定楼层
楼主
各位,大神好。
                   本菜,利用普中学习板,想实现3个LED流水灯的效果,LED1不亮,LED2亮,LED3不亮------LED1亮,LED2不亮,LED3亮!如此循环,编译后,没有提示错误,但下载到学习板上,LED灯没有任何反应,测试对应的单片机管脚未见有电压输出!现在还不知晓问题出在哪里?向各位大神们请教!以下为代码:

#include <reg51.h>

void delay(unsigned int i);
sbit led1=P2^2;
sbit led2=P2^3;
sbit led3=P2^4;
main()
{
  unsigned char led1,led2,led3;
            
led1=  0xff  ;

  delay(600);

  led2=0x00 ;


  delay(600);

led3=0xff ;
        
         delay(600);
        
        led1=  0x00  ;
        
          delay(600);
        
        led2=0xff ;
        
          delay(600);
               
        led3=0x00 ;
        
          delay(600);
return 0;

}


void delay(unsigned int i)
{
    unsigned char j;
    for(i; i > 0; i--)   
        for(j = 255; j > 0; j--);
}


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:706724 发表于 2021-4-13 11:14 | 只看该作者
creating hex file from ".\Objects\LEDNO2"...
".\Objects\LEDNO2" - 0 Error(s), 0 Warning(s).
Build Time Elapsed:  00:00:02
回复

使用道具 举报

板凳
ID:586577 发表于 2021-4-13 11:36 | 只看该作者
sbit  位定义   是操作P2口   2/3/4、位的   赋值1和0 应该就能控制灯的状态   
回复

使用道具 举报

地板
ID:586577 发表于 2021-4-13 11:41 | 只看该作者
本帖最后由 liu--2019 于 2021-4-13 14:12 编辑

#include <reg51.h>
        
void delay(unsigned int i);

sbit led1=P2^2;
sbit led2=P2^3;
sbit led3=P2^4;
void main()
{
     while(1)
     {
           led1=1;
           led2=led3=0;
           delay(600);
           led2=1;
           led1=led3=0;
           delay(600);
           led3=1;
           led1=led2=0;
           delay(600);       }  

}

void delay(unsigned int i)
{
    unsigned char j;
    for(i; i > 0; i--)   
        for(j = 255; j > 0; j--);
}
回复

使用道具 举报

5#
ID:706724 发表于 2021-4-13 21:49 | 只看该作者
感谢指导,有一点没有想明白,用while语句的用意是什么?
回复

使用道具 举报

6#
ID:900662 发表于 2021-4-13 22:23 | 只看该作者
while语句就是让单片机一直保持运行,想要单片机一直工作,就需要给它一个无限循环(C语言中叫死循环,一般不能出现,但单片机中必须要有)来让他保持工作,完成你的各种指。
回复

使用道具 举报

7#
ID:894154 发表于 2021-4-14 08:45 | 只看该作者
你都说要如此循环了,为何程序里面却没有循环.
回复

使用道具 举报

8#
ID:847788 发表于 2021-4-14 11:45 | 只看该作者
#include <reg51.h>
        
void delay(unsigned int i);


void main()
{

sbit led1=P2^2;
sbit led2=P2^3;
sbit led3=P2^4;
     while(1)
     {
           led1=1;
           led2=led3=0;
           delay(600);
           led2=1;
           led1=led3=0;
           delay(600);
           led3=1;
           led1=led2=0;
           delay(600);       }  

}

void delay(unsigned int i)
{
    unsigned char j;
    for(i; i > 0; i--)   
        for(j = 255; j > 0; j--);
}
试试这个程序
回复

使用道具 举报

9#
ID:342911 发表于 2021-4-14 12:55 来自手机 | 只看该作者
无操作系统时主程序里多是一个while(1)死循环在跑

Screenshot_20210414-125342_Chrome.jpg (244.16 KB, 下载次数: 46)

Screenshot_20210414-125342_Chrome.jpg

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

10#
ID:706724 发表于 2021-4-14 21:20 | 只看该作者
jfmdam 发表于 2021-4-13 22:23
while语句就是让单片机一直保持运行,想要单片机一直工作,就需要给它一个无限循环(C语言中叫死循环,一般 ...

回复

使用道具 举报

11#
ID:706724 发表于 2021-4-14 21:21 | 只看该作者
muzhi 发表于 2021-4-14 12:55
无操作系统时主程序里多是一个while(1)死循环在跑

感谢指导
回复

使用道具 举报

12#
ID:706724 发表于 2021-4-14 21:22 | 只看该作者
teared 发表于 2021-4-14 11:45
#include
        
void delay(unsigned int i);

这个程序是可以 的
回复

使用道具 举报

13#
ID:706724 发表于 2021-4-14 21:33 | 只看该作者
感谢打大家的帮助,经过这两天学习,我发的程序里面有3出错误,虽然编译无误,但实际无法操作:1.sbit 的值域只有,0或1.所以LED=0XFF,是错误的,虽然语法没有错误。2.少了while语句。3.unsigned char led1,led2,led3;  事实上前面已经定义了LED的对应的管脚,就没有必要再定义了。经过修改上面3处错误后,可以点亮LED灯了,算是自己学习的总结吧。
     接下来,想把这三种效果,做成一个软件:开机----LED亮------断电5S内,再上电------LED闪烁-----断电5S内,再上电----LED流水效果,如此循环。如果断电>5S,则运行当前的程序。
  希望各位,大神不吝指导!谢谢
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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