野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 12365|回复: 2

呼吸灯问题,请教下大神

[复制链接]
发表于 2019-6-2 09:15:56 | 显示全部楼层 |阅读模式
开发需求是:
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;        //
                                       
                                }








}







回复

使用道具 举报

发表于 2019-6-3 08:51:57 | 显示全部楼层
看不懂你写的,不过while里面的结构你参考状态机写法吧,总觉得你把事情搞复杂了,用个状态变量表示现在处于 1. 刚开始…  2.LED1渐亮…… 3.LED2渐亮…… 的哪一步,每步运行够了就切换状态
回复 支持 反对

使用道具 举报

发表于 2019-6-4 04:31:25 | 显示全部楼层
楼上说的是个办法。
回复 支持 反对

使用道具 举报

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

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-11-24 01:12 , Processed in 0.026435 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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