找回密码
 立即注册

QQ登录

只需一步,快速开始

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

单片机呼吸灯代码问题,请教下大神,已经折腾很久了(我是菜鸟)

[复制链接]
跳转到指定楼层
楼主
ID:358564 发表于 2019-6-2 09:20 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
开发需求是:
1. 刚开始LED1和LED2均灭
2.  LED1渐亮渐灭一次,然后LED1灭。
3.  LED2渐亮渐灭一次,然后LED2灭。
    就这样一直循环


我写的代码为何实现不了,求大神解答,折腾很久了


#include "reg51.h"                        

sbit LED1=P2^0;
sbit LED2=P2^1;


unsigned char cycle=0;
unsigned int step=1;
unsigned int bright=0;


unsigned char cycle2=0;
unsigned int step2;
unsigned int bright2=0;



void test1(void);
void test2(void);
void delay(unsigned int time_i);




void main()
{



  while(1)
  {


    test1();        


    test2();                  


}

}

void test1(void)
{


  if(++cycle >250)
                  {
                  cycle = 0;

                                   switch (step)
                                   {
                                   case 1 :
                                                bright++;
                                                if(bright > 250)
                                                {
                                                step ++;
                                                }break;

                                        case 2 :
                                                bright--;
                                                if(bright < 1)
                                                {
                                                step2 = 1;

                                                }break;

                                   }
                  }

                if(cycle < bright)
                                {
                                        LED1=0;        //灯亮

                                }
                else
                                {
                                        LED1=1;        // 灯灭

                                }








}


void test2(void)
{

if(++cycle2 >250)
                  {
                  cycle2 = 0;

                                   switch (step2)
                                   {
                                   case 1 :
                                                bright2++;
                                                if(bright2 > 250)
                                                {
                                                step2 ++;
                                                }break;

                                        case 2 :
                                                bright2--;
                                                if(bright2 < 1)
                                                {
                                                step = 1;
                                                }break;

                                   }
                  }

                if(cycle2 < bright2)
                                {
                                        LED2=0;        //灯亮

                                }
                else
                                {
                                        LED2=1;        //

                                }








}

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

使用道具 举报

沙发
ID:517466 发表于 2019-6-3 16:13 | 只看该作者
我的印象里,呼吸灯使用脉宽比控制的,需要控制高低电平的时间比。是不是需要使用定时器,通过动态调节TH、TL的初装值,来实现输出不同脉宽比的信号。
回复

使用道具 举报

板凳
ID:293363 发表于 2019-6-3 17:46 | 只看该作者
你可以看看我之前发的帖子
回复

使用道具 举报

地板
ID:511890 发表于 2019-6-3 18:16 | 只看该作者
#include "reg51.h"                        

sbit LED1=P1^0;
sbit LED2=P1^1;

unsigned char cycle=0;
unsigned int step=1;
unsigned int bright=0;

unsigned char cycle2=0;
unsigned int step2;
unsigned int bright2=0;

void test1(void);
void test2(void);
void delay(unsigned int time_i);


void main(){
        while(1){
                        test1();          

                        test2();   
                              
        }

}

void test1(void){
        if(++cycle >250){
                cycle = 0;
               
                switch (step){
                        case 1 :
                                bright++;
                                if(bright > 250){
                                        step ++;
                                       
                                }break;
                       

                        case 2 :
                                bright--;
                                if(bright < 1){
                                        step = 3;
                                        step2 = 1;
                                }break;
                       

                }
        }

        if(cycle < bright){
                LED1=0;        //灯亮
        }
        else{
                LED1=1;        // 灯灭
        }

}


void test2(void){
        if(++cycle2 >250){
                cycle2 = 0;
                switch (step2){
                        case 1 :
                                bright2++;
                                if(bright2 > 250){
                                        step2 ++;
                                }break;
                       

                        case 2 :
                                bright2--;
                                if(bright2 < 1){
                                        step2 = 3;
                                        step = 1;
                                }break;
                       
                }
        }

        if(cycle2 < bright2){
                LED2=0;        //灯亮
        }
        else{
                LED2=1;        //
        }

}
换LED的步骤出错了。将这个和你的程序对照下就清楚了。
回复

使用道具 举报

5#
ID:461604 发表于 2019-6-5 10:17 | 只看该作者
渐亮渐灭需要用PWM实现
回复

使用道具 举报

6#
ID:358564 发表于 2019-6-8 10:41 | 只看该作者
幻剑心 发表于 2019-6-3 18:16
#include "reg51.h"                        

sbit LED1=P1^0;

好的,非常感谢
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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