微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 怎样写一个花样流水灯程序,8位发光二极管的

怎样写一个花样流水灯程序,8位发光二极管的

时间:10-02 整理:3721RD 点击:
/*                                                         
间隔300ms先奇数亮再偶数亮,
循环三次;一个灯上下循环三次;
两个分别从两边往中间流动三次;
再从中间往两边流动三次;8个全部闪烁3次;
关闭发光管,程序停止。
*/
/*********************************************************/
#include<reg52.h>   //52单片机头文件
#include <intrins.h> //包含有左右循环移位子函数的库
#define uint unsigned int     //宏定义
#define uchar unsigned char   //宏定义
void delay(uint z)   //延时函数,z的取值为这个函数的延时ms数,如delay(200);大约延时200ms.
{                     //delay(500);大约延时500ms.
     uint x,y;
     for(x=z;x>0;x--)
         for(y=110;y>0;y--);   
}
void main()             //主函数
{
     uchar a,i,j;
     for(j=0;j<3;j++)       //寄偶交替
     {
             P1=0x55;        //点亮小灯
             delay(300); //延时300毫秒
             P1=0xaa;
             delay(300); //延时300毫秒
     }
     for(j=0;j<3;j++)     //流水灯
     {
         a=0xfe;
         for(i=0;i<8;i++)
             {
                 P1=a;        //点亮小灯
                 delay(300); //延时300毫秒
                 a=_crol_(a,1);
             }
     }
     P1=0xff;
     for(j=0;j<3;j++)      //从两边往中间流
     {
             P1=0x7e;        //点亮小灯
   delay(300); //延时300毫秒
             P1=0xbd;
             delay(300); //延时300毫秒
             P1=0xdb;        //点亮小灯
             delay(300); //延时300毫秒
             P1=0xe7;
             delay(300); //延时300毫秒
     }
     P1=0xff;
     for(j=0;j<3;j++)     //从中间往两边流
     {
             P1=0xe7;        //点亮小灯
             delay(300); //延时300毫秒
             P1=0xdb;
             delay(300); //延时300毫秒
             P1=0xbd;        //点亮小灯
             delay(300); //延时300毫秒
             P1=0x7e;
             delay(300); //延时300毫秒
     }
     P1=0xff;
     for(j=0;j<6;j++)     //全部闪烁
     {
             P1=~P1;        //点亮小灯
             delay(300); //延时300毫秒
     }
     P1=0xff;
     while(1);
}
               a=_crol_(a,1);
             }
     }
    for(j=0;j<3;j++)
      {
       a=0xfa;
       for(i=0;i<5;i++)
         {
            P1=a;
            delay(300);
            a=_crol_(a,1);
          }
     }
   
         
     P1=0xff;
     for(j=0;j<3;j++)      //从两边往中间流
     {
             P1=0x7e;        //点亮小灯
             delay(300); //延时300毫秒
             P1=0xbd;
             delay(300); //延时300毫秒
             P1=0xdb;        //点亮小灯
             delay(300); //延时300毫秒
             P1=0xe7;
             delay(300); //延时300毫秒
     }
     P1=0xff;
     for(j=0;j<3;j++)     //从中间往两边流
     {
             P1=0xe7;        //点亮小灯
             delay(300); //延时300毫秒
             P1=0xdb;
             delay(300); //延时300毫秒
             P1=0xbd;        //点亮小灯
             delay(300); //延时300毫秒
             P1=0x7e;
             delay(300); //延时300毫秒
     }
     for(j=0;j<5;j++)
      {
        P1=0x66;
        delay(300);
        P1=0x99;
        delay(300);
      }



     P1=0xff;
     for(j=0;j<6;j++)     //全部闪烁
     {
             P1=~P1;        //点亮小灯
             delay(300); //延时300毫秒
     }
     P1=0xff;
     while(1);
}

之前也这样写郭,一直认为有点不够精炼
能分享出来很给力

void SetLed(u8 n){P1 |= (1<<n);}
void ClrLed(u8 n){P1 &= ~(1<<n);}
逐一点亮
{u8 i; for(i=0;i<8;i++) SetLed(i);}
逐一熄灭
{u8 i; for(i=0;i<8;i++) ClrtLed(i);}
点亮奇数,偶数
{u8 i; for(i=1;i<8;i+=2) SetLed(i);}
{u8 i; for(i=0;i<8;i+=2) SetLed(i);}
熄灭奇偶数
{u8 i; for(i=1;i<8;i+=2) ClrLed(i);}
{u8 i; for(i=0;i<8;i+=2) ClrLed(i);}
....
很给力的小编

这两条语句可不可以解释一下,比如进入子函数时P1=?,不会就是0xff吧,那样就不对了啊,第一个子函数P1将永远等于0xff.
void SetLed(u8 n){P1 |= (1<<n);}
void ClrLed(u8 n){P1 &= ~(1<<n);}

你搞错了吧!应该是P1=0x00

给力

顶礼膜拜!

学习,,,,

不抱怨 内心强大 自信

新手路过~

新手过路

写得不过简单,其实有更好的写法。不过很支持你

正需要

好好好。

好好好。

好好好!

好好好~~~~~~

学到了

第68有错误啊            

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top