lxqlzj 发表于 2012-2-3 14:49:07

(LED学习板)实验23--LED流星灯8段16段-软件生成生成数据

//============================================================================
//================翼芯科技 LED流星灯8段16段==软件生成生成数据=================
//============================================================================   
//此源码版权属 翼芯科技 全权享有,如欲引用,敬请署名并告知
//          严禁随意用于商业目的,违者必究,后果自负
//          公司网站 http://www.mcu-led.com
//          公司论坛 http://www.cpu-led.com
//          淘宝店:http://cpu-led.taobao.com/和http://mcu-led.taobao.com/
//          产品咨询 QQ :1322130074   电话:13715619122
//程序说明:本程序用于实现LED流星灯8段16段,不同步.IC插到U9位置.      
//文件名称:main.C
//日期:    2011/01/23   
//版本:    1.0
//C编译器:keil 8.05
//=============================================================================                  
#include <STC12C5AXX.H>
#define uchar unsigned char
#define uint unsigned int
#define nop() _nop_();_nop_()


sbit DAT = P3^2;      //DM134数据输出
sbit CLK= P3^3;    //DM134时钟输出
sbit LE   = P3^4;      //DM134锁存口
sbit EN   = P4^4;      //DM134使能口


/******************************************************************
- 功能描述:ms延时
- 隶属模块:无
- 函数属性:无
- 参数说明:无      
- 返回说明:无
- 注:.....
******************************************************************/
void Delay(uint ms)
{
uint a,b;
    for(a=ms;a!=0;a--)         
         for(b=250;b!=0;b--)      
         ;
}

/******************************************************************
- 功能描述:DM134传送一个字的数据,      高位在前
- 隶属模块:无
- 函数属性:无
- 参数说明:无      
- 返回说明:无
- 注:.....
******************************************************************/
void DM134(uint dat)
{
uchar i;
for(i=16;i!=0;i--)
   {
            CLK=0;      
      DAT=dat&0x01;      //低位在前
      dat=dat>>1;               //左移一位
          CLK=1;                  //上升延数据移入
   }
LE=1;                  //寄存器数据更新
LE=0;
}


/******************************************************************
- 功能描述:实现8段拖尾效果
- 隶属模块:无
- 函数属性:无
- 参数说明:无      
- 返回说明:无
- 注:.....
******************************************************************/
void Grayscale8(uchar speed)
{
    uchar x,y,f;                               //上半
    uint z=0x8000, gray;

    for(y=8;y>0;y--)
   {
                for(f=speed;f>0;f--)    //流动速度
               {      
                   gray=z;
                   for(x=8;x>0;x--)
            {   
            DM134(gray);
                        gray>>=1;
            gray&=z;
                        }
               }
                z>>=1;
                z|=0x8000;
   }

      z=0x7f80;
    for(y=16;y>0;y--)                         //下半
   {
                for(f=speed;f>0;f--)    //流动速度
               {
                  gray=z;
                  for(x=8;x>0;x--)
            {   
            DM134(gray);
                           gray>>=1;
            gray&=z;
                        }
               }
                z>>=1;
   }

}

/******************************************************************
- 功能描述:实现16段拖尾效果
- 隶属模块:无
- 函数属性:无
- 参数说明:无      
- 返回说明:无
- 注:.....
******************************************************************/
void Grayscale16(uchar speed)
{
    uchar x,y,f;
    uint z=0x8000, gray;
    for(y=16;y>0;y--)
   {
                for(f=speed;f>0;f--)      //流动速度
               {
                   gray=z;
                   for(x=16;x>0;x--)
            {   
            DM134(gray);
                        gray>>=1;
            gray&=z;
                        }
               }
         z>>=1;      
         z|=0x8000;;
   }
      z=0x7fff;
    for(y=16;y>0;y--)
   {
                for(f=speed;f>0;f--)      //流动速度
               {
                  gray=z;
                  for(x=16;x>0;x--)
            {   
            DM134(gray);
                        gray>>=1;
            gray&=z;
                        }
               }
                z>>=1;
   }
}

/******************************************************************
- 功能描述:主函数   
- 隶属模块:无
- 函数属性:无
- 参数说明:无      
- 返回说明:无
- 注:.....
******************************************************************/
void main(void)
{
    uchar CNT;

//M1:M00:0为标准51;0:1输出;1:0输入;1:1开漏输出
    P0M1=0X00;                              //P0口设为推挽输出
    P0M0=0XFF;

    P4M1=0X00;                              //P4口设为推挽输出
    P4M0=0XFF;

      EN=0;

      P0=0;
      while(1)
          {
         for(CNT=0;CNT<3;CNT++)
         {
                      Grayscale16(100); //16段
                        Delay(100);
                }

         for(CNT=0;CNT<3;CNT++)
          {
                      Grayscale8(250);//8D段
                        Delay(100);
                  }
                        

          }
}
页: [1]
查看完整版本: (LED学习板)实验23--LED流星灯8段16段-软件生成生成数据