专注电子技术学习与研究
当前位置:单片机教程网 >> MCU设计实例 >> 浏览文章

LED彩色护栏管程序---1个IO口搞定!

作者:佚名   来源:本站原创   点击数:  更新时间:2012年04月30日   【字体:
/*************************************
MCU:STC12C56      晶振:12MHZ
*************************************/
#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint  unsigned int

#define RGB_count  20
#define RGB_speed  30

sbit DIN=P1^2;
/*************0码*******************/
void DIN_bit_0()
{
 uchar i;
 DIN=1;
 for(i=1;i>0;i--);    //低速模式   1+3+4*3+1
 _nop_();
 DIN=0;        //1+3+4*7
 for(i=3;i>0;i--); 
}
/*************1码*******************/
void DIN_bit_1()
{
 uchar i;
 DIN=1;       //1+3+4*7+1
 for(i=3;i>0;i--);
 _nop_();
 DIN=0;
 for(i=1;i>0;i--);   //1+3+4*3
  
}
/*************reset码*******************/
void reset()
{
 uint i;
 DIN=0;
 for(i=250;i>0;i--);   
}
/*************数据传输******************/
void send_dat(uchar dat)  //高位先传
{
    uchar i;
    for(i=8;i>0;i--)
    {
        if(dat & 0x80)  DIN_bit_1();
            else        DIN_bit_0();
        dat <<=1;
    }
}
/***************延时******************/
void delay(uchar t)
{
 unsigned long j;
    while(t--)   for(j=0;j<1000;j++);
}
/*************主程序******************/
void main()
{
 uchar i,n,num,t;
 while(1)
 {
 /*************R渐亮*******************/
  for(i=0;i<255;i++)
  {
   for(n=RGB_count;n>0;n--)
   {
    send_dat(i);
    send_dat(0);
    send_dat(0);
   }
   reset();
   delay(1);
  }
  /*************R渐灭*******************/
  for(i=255;i>0;i++)
  {
   for(n=RGB_count;n>0;n--)
   {
    send_dat(i);
    send_dat(0);
    send_dat(0);
   }
   reset();
   delay(1);
  }
  /*************G渐亮*******************/
  for(i=0;i<255;i++)
  {
   for(n=RGB_count;n>0;n--)
   {
    send_dat(0);
    send_dat(i);
    send_dat(0);
   }
   reset();
   delay(1);
  }
  /*************G渐灭*******************/
  for(i=255;i>0;i++)
  {
   for(n=RGB_count;n>0;n--)
   {
    send_dat(0);
    send_dat(i);
    send_dat(0);
   }
   reset();
   delay(1);
  }
  /*************B渐亮*******************/
  for(i=0;i<255;i++)
  {
   for(n=RGB_count;n>0;n--)
   {
    send_dat(0);
    send_dat(0);
    send_dat(i);
   }
   reset();
   delay(1);
  }
  /*************B渐灭*******************/
  for(i=255;i>0;i++)
  {
   for(n=RGB_count;n>0;n--)
   {
    send_dat(0);
    send_dat(0);
    send_dat(i);
   }
   reset();
   delay(1);
  }
  /*************RG渐亮*******************/
  for(i=0;i<255;i++)
  {
   for(n=RGB_count;n>0;n--)
   {
    send_dat(i);
    send_dat(i);
    send_dat(0);
   }
   reset();
   delay(1);
  }
  /*************RG渐灭*******************/
  for(i=255;i>0;i++)
  {
   for(n=RGB_count;n>0;n--)
   {
    send_dat(i);
    send_dat(i);
    send_dat(0);
   }
   reset();
   delay(1);
  }
  /*************GB渐亮*******************/
  for(i=0;i<255;i++)
  {
   for(n=RGB_count;n>0;n--)
   {
    send_dat(0);
    send_dat(i);
    send_dat(i);
   }
   reset();
   delay(1);
  }
  /*************GB渐灭*******************/
  for(i=255;i>0;i++)
  {
   for(n=RGB_count;n>0;n--)
   {
    send_dat(0);
    send_dat(i);
    send_dat(i);
   }
   reset();
   delay(1);
  }
  /*************RB渐亮*******************/
  for(i=0;i<255;i++)
  {
   for(n=RGB_count;n>0;n--)
   {
    send_dat(i);
    send_dat(0);
    send_dat(i);
   }
   reset();
   delay(1);
  }
  /*************RB渐灭*******************/
  for(i=255;i>0;i++)
  {
   for(n=RGB_count;n>0;n--)
   {
    send_dat(i);
    send_dat(0);
    send_dat(i);
   }
   reset();
   delay(1);
  }
  /*************RGB全灭*******************/
  for(num=RGB_count;num>0;num--)
        {
            send_dat(0);
            send_dat(0);
            send_dat(0);
        }
        reset();
  /*************B跑马灯增加*******************/
  for(i=0;i<RGB_count;i++) 
        {
            for(num=0;num<i;num++)
            {
                send_dat(0);
                send_dat(0);
                send_dat(255);
            }
            reset();
            for(t=RGB_speed;t>0;t--)  delay(1);
        }
  /*************B跑马灯减少*******************/
        for(i=RGB_count;i>0;i--) 
        {
            for(num=0;num<i;num++)
            {
                send_dat(0);
                send_dat(0);
                send_dat(255);
            }
            reset();
            for(t=RGB_speed;t>0;t--)  delay(1);
   /*************RGB全灭*******************/
   for(num=RGB_count;num>0;num--)
            {
                send_dat(0);
                send_dat(0);
                send_dat(0);
            }
            reset();
  }
  /*************G跑马灯增加*******************/
  for(i=0;i<RGB_count;i++)
        {     
            for(num=0;num<i;num++)
            {
                send_dat(0);
                send_dat(255);
                send_dat(0);
            }
            reset();
            for(t=RGB_speed;t>0;t--)  delay(1);
        }
        /*************G跑马灯减少*******************/           
        for(i=RGB_count;i>0;i--) 
        {
            for(num=0;num<i;num++)
            {
                send_dat(0);
                send_dat(255);
                send_dat(0);
            }
            reset();
            for(t=RGB_speed;t>0;t--)  delay(1);
   /*************RGB全灭*******************/
   for(num=RGB_count;num>0;num--)
            {
                send_dat(0);
                send_dat(0);
                send_dat(0);
            }
            reset();
  }
  /*************R跑马灯增加*******************/
  for(i=0;i<RGB_count;i++)
        {
            for(num=0;num<i;num++)
            {
                send_dat(255);
                send_dat(0);
                send_dat(0);
            }
            reset();
            for(t=RGB_speed;t>0;t--)  delay(1);
        }
  /*************R跑马灯减少*******************/
        for(i=RGB_count;i>0;i--)
        {
            for(num=0;num<i;num++)
            {
                send_dat(255);
                send_dat(0);
                send_dat(0);
            }
            reset();
            for(t=RGB_speed;t>0;t--)  delay(1);
    /*************RGB全灭*******************/
            for(num=RGB_count;num>0;num--)
            {
                send_dat(0);
                send_dat(0);
                send_dat(0);
            }
            reset();
        }
  /*************RG跑马灯增加*******************/
  for(i=0;i<RGB_count;i++)
        {     
            for(num=0;num<i;num++)
            {
                send_dat(255);
                send_dat(255);
                send_dat(0);
            }
            reset();
            for(t=RGB_speed;t>0;t--)  delay(1);
        }
        /*************RG跑马灯减少*******************/           
        for(i=RGB_count;i>0;i--) 
        {
            for(num=0;num<i;num++)
            {
                send_dat(255);
                send_dat(255);
                send_dat(0);
            }
            reset();
            for(t=RGB_speed;t>0;t--)  delay(1);
   /*************RGB全灭*******************/
   for(num=RGB_count;num>0;num--)
            {
                send_dat(0);
                send_dat(0);
                send_dat(0);
            }
            reset();
  }
  /*************GB跑马灯增加*******************/
  for(i=0;i<RGB_count;i++)
        {     
            for(num=0;num<i;num++)
            {
                send_dat(0);
                send_dat(255);
                send_dat(255);
            }
            reset();
            for(t=RGB_speed;t>0;t--)  delay(1);
        }
        /*************GB跑马灯减少*******************/           
        for(i=RGB_count;i>0;i--) 
        {
            for(num=0;num<i;num++)
            {
                send_dat(0);
                send_dat(255);
                send_dat(255);
            }
            reset();
            for(t=RGB_speed;t>0;t--)  delay(1);
   /*************RGB全灭*******************/
   for(num=RGB_count;num>0;num--)
            {
                send_dat(0);
                send_dat(0);
                send_dat(0);
            }
            reset();
  }
  /*************RB跑马灯增加*******************/
  for(i=0;i<RGB_count;i++)
        {     
            for(num=0;num<i;num++)
            {
                send_dat(255);
                send_dat(0);
                send_dat(255);
            }
            reset();
            for(t=RGB_speed;t>0;t--)  delay(1);
        }
        /*************RB跑马灯减少*******************/           
        for(i=RGB_count;i>0;i--) 
        {
            for(num=0;num<i;num++)
            {
                send_dat(255);
                send_dat(0);
                send_dat(255);
            }
            reset();
            for(t=RGB_speed;t>0;t--)  delay(1);
   /*************RGB全灭*******************/
   for(num=RGB_count;num>0;num--)
            {
                send_dat(0);
                send_dat(0);
                send_dat(0);
            }
            reset();
  }
     /*************RGB跑马灯增加*******************/
  for(i=0;i<RGB_count;i++)
        {
            for(num=0;num<i;num++)
            {
                send_dat(255);
                send_dat(255);
                send_dat(255);
            }
            reset();
            for(t=RGB_speed;t>0;t--)  delay(1);
        }
  /*************RGB跑马灯减少*******************/
        for(i=RGB_count;i>0;i--)
        {
            for(num=0;num<i;num++)
            {
                send_dat(255);
                send_dat(255);
                send_dat(255);
            }
            reset();
            for(t=RGB_speed;t>0;t--)  delay(1);
   /*************RGB全灭*******************/
            for(num=RGB_count;num>0;num--)
            {
                send_dat(0);
                send_dat(0);
                send_dat(0);
            }
            reset();
        }  
 }
}
关闭窗口

相关文章