单片机流星灯_51单片机流星灯c语言源程序

大家自己根据程序中的io定义部分  接上灯即可实现流星灯的效果!!

//.........................................

//内控自走程序

//CPU:STC12C2052

//主频:18.432MHZ(外部晶振144),内部晶振5MHZ

//日期:2008/11/30

//.........................................

#include

#include

#include

#include

#include        //产生随机数SAND();

#define     uchar   unsigned char

#define  uint    unsigned int

#define  T0_DAH  160;

#define  T0_DAL  160;

#define     Speed_Data     0x2;

void    delay(uint);

void    Out_Put (void);

void    Read_Pro1(void);

void    Read_Pro2(void);

void    Pwm_Out (void);

void    Read_Pro_R(uchar QW_Data1);

///

//IO口定义/

///

sbit    ExPort1=P1^0;

sbit    ExPort8=P1^1;//2

sbit    ExPort7=P1^2;//8

sbit    ExPort6=P1^3;//7

sbit    ExPort5=P1^4;//6

sbit    ExPort4=P1^5;//5

sbit    ExPort3=P1^6;//4

sbit    ExPort2=P1^7;//3

sbit    Export9=P3^0;//

sbit    Export10=P3^1;//

//定义RAM

sfr        P1M0=0x91;

sfr        P1M1=0x92;

sfr        P3M0=0xB1;

sfr        P3M1=0xB2;

sfr        WDT_CONTR=0xe1;

sfr     ISP_TRIG=0xe6;

sfr     SPSTAT=0x84;

sfr        PCA_PWM0=0xf2;

sfr        unm1=0xf3;

sfr     unm2=0xf4;

sfr        unm3=0xf5;

sfr     unm4=0xf6;

sfr        unm5=0xf7;

sfr     unm6=0xf8;

bit     Time0_Flag;

uchar   Speed,Time0_Dec,Latch,Add_speed;

uchar   delay_X,Run_S,Run_S1;

uint    delay_z;

uchar    Display_Data[10];

/

//共十六等级/

/

void    timer_0(void) interrupt 1        //共十六等级

{

Time0_Flag=1;

Time0_Dec--;

}

//*************************************************//

//                  主函数功能                     //

//                主要产生花样数据                 //

//*************************************************//

void    main(void)

{

/

/IO口初始化//

/

/*************************读入ID号******************/

P3M0=0x00;

P3M1=0x03;

memset(Display_Data,0x00,sizeof(Display_Data));

//产生一个随机字符型数据

TMOD=0x12;

TR1=1;

delay_z = ((TH1<<8)|TL1)|((SBUF<<8)|ISP_TRIG)|((SPSTAT<<8)|PCA_PWM0);

rand();

srand(delay_z);

Run_S1=rand()/10;                                     //得到一个数据为25-35做为停留时间

Run_S=(uchar)Run_S1*2+15;

TMOD=0x02;                                             //系统初始化

TH0=T0_DAH;

TL0=T0_DAH;

ET0=1;

EA=1;

TR0=1;

Time0_Flag=0;                                         //定时器0初始化

Speed=Speed_Data;

Time0_Dec=64;

while(1)

{

Read_Pro1();

delay_z = ((TH1<<8)|TL1)|((SBUF<<8)|ISP_TRIG)|((SPSTAT<<8)|PCA_PWM0);

srand(delay_z);

rand();

Run_S=(uchar)((rand())*2)+15;

}

}

//*************************************************//

//               花样1:白间七彩右移渐变            //

//                对10MS到进行处理                 //

//*************************************************//

void   Read_Pro1(void)

{uchar j,i,B_W;

Add_speed=1;

memset(Display_Data,0x00,sizeof(Display_Data));

for(i=4;i>0;i--)               //1短

{if(i==4)B_W=64;

if(i==3)B_W=35;

if(i==2)B_W=10;

if(i==1)B_W=1;

Read_Pro_R(B_W);

}

for(i=Run_S;i>0;i--)

{Read_Pro_R(0);

}

for(j=0;j<2;j++)

{for(i=7;i>0;i--)            //2长

{

if(i==7)B_W=64;

if(i==6)B_W=63;

if(i==5)B_W=62;

if(i==4)B_W=60;

if(i==3)B_W=55;

if(i==2)B_W=40;

if(i==1)B_W=15;

Read_Pro_R(B_W);

}

for(i=Run_S;i>0;i--)

{Read_Pro_R(0);

}

}

for(j=0;j<2;j++)

{for(i=5;i>0;i--)            //2中

{

if(i==5)B_W=64;

if(i==4)B_W=63;

if(i==3)B_W=55;

if(i==2)B_W=40;

if(i==1)B_W=15;

Read_Pro_R(B_W);

}

for(i=Run_S;i>0;i--)

{Read_Pro_R(0);

}

}

}

//*************************************************//

void    Read_Pro_R(uchar QW_Data1)

{

Display_Data[9]=Display_Data[8];

Display_Data[8]=Display_Data[7];

Display_Data[7]=Display_Data[6];

Display_Data[6]=Display_Data[5];

Display_Data[5]=Display_Data[4];

Display_Data[4]=Display_Data[3];

Display_Data[3]=Display_Data[2];

Display_Data[2]=Display_Data[1];

Display_Data[1]=Display_Data[0];

Display_Data[0]=QW_Data1;

Out_Put();

Out_Put();

Out_Put();

Out_Put();

Out_Put();

Out_Put();

}

//*************************************************//

//                 花样输出功能                    //

//                对10MS到进行处理                 //

//*************************************************//

void   Out_Put(void)

{uchar S;

bit Time0_Zear;

for(S=0;S

{

Time0_Zear=1;

Time0_Flag=0;

while(Time0_Zear)

{

if(Time0_Flag)                                //中斷時間到,灰度輸出

{

Time0_Flag=0;

WDT_CONTR=0x30;

Pwm_Out();

}

if(Time0_Dec==0)

{EA=0;

Time0_Zear=0;

Time0_Dec=64;

TH0=T0_DAH;

TL0=T0_DAH;

EA=1;

}

}

}

}

//***********

//*************************************************//

//                 PWM输出功能                     //

//    将Display_Data[]数组内数据与16等级进行比较   //

//*************************************************//

void    Pwm_Out ()

{

Latch=Time0_Dec;

if(Display_Data[0]>Latch)    ExPort1=1;  else    ExPort1=0;

if(Display_Data[1]>Latch)    ExPort2=1;  else    ExPort2=0;

if(Display_Data[2]>Latch)    ExPort3=1;  else    ExPort3=0;

if(Display_Data[3]>Latch)    ExPort4=1;  else    ExPort4=0;

if(Display_Data[4]>Latch)    ExPort5=1;  else    ExPort5=0;

if(Display_Data[5]>Latch)    ExPort6=1;  else    ExPort6=0;

if(Display_Data[6]>Latch)    ExPort7=1;  else    ExPort7=0;

if(Display_Data[7]>Latch)    ExPort8=1;  else    ExPort8=0;

if(Display_Data[8]>Latch)    Export9=1;  else    Export9=0;

if(Display_Data[9]>Latch)    Export10=1; else    Export10=0;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值