• 歡迎光臨東莞市飛江電子科技有限公司官網!
    全國咨詢熱線

    13926563901

    18925580829

    飛江淘寶店鋪

    首頁>技術資料>51單片機

    51單片機流星燈c語言源程序

    發布時間:2018-03-26   瀏覽量:

    大家自己根據程序中的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;
            }
    黑人粗大无码AV人妻一区