| 
//============================================================================
×
注册登录后可以在线提问,行业从业者将帮助您解答!您需要 登录 才可以下载或查看,没有账号?请用中文注册用户! 
  //================翼芯科技 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:M0  0: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);
 }
 
 
 }
 }
 
 |