<acronym id="xonnx"></acronym>
      <td id="xonnx"></td>
    1. <pre id="xonnx"></pre>

      1. 專注電子技術學習與研究
        當前位置:單片機教程網 >> MCU設計實例 >> 瀏覽文章

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

        作者:佚名   來源:本站原創   點擊數:  更新時間:2014年09月02日   【字體:

        大家自己根據程序中的io定義部分  接上燈即可實現流星燈的效果!

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

        //內控自走程序
        //CPU:STC12C2052
        //主頻:18.432MHZ(外部晶振144),內部晶振5MHZ
        //日期:2008/11/30
        //.........................................
        #include <reg52.H>
        #include <intrins.h>
        #include <absacc.h>
        #include <string.h>
        #include<stdlib.h> //產生隨機數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%10*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()%10)*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<Speed*Add_speed;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;
        }
         
        關閉窗口

        相關文章

        欧美性色欧美精品视频,99热这里只有精品mp4,日韩高清亚洲日韩精品一区二区,2020国自产拍精品高潮