在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            新聞中心

            EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > AVR單片機M8控制256級七彩流水燈程序

            AVR單片機M8控制256級七彩流水燈程序

            作者: 時間:2016-11-28 來源:網(wǎng)絡 收藏
            #include "inc.h"
            #include
            #include
            #include
            extern const uchar qct[];
            uint16_t data0,data1;
            uint8_t bitcnt;
            uint8_t CaptureOK;
            uint16_t ms,Sec;
            uint32_t MsCnt; //ms count
            void Shift(uint da)
            {
            uchar i;
            for(i=0;i<16;i++)
            {
            CLR_SCK;
            if(da&0x8000)
            SET_BLU;
            else
            CLR_BLU;
            SET_SCK;
            da<=1;
            }
            }
            void Scan(void)
            {
            uchar i,j;
            uint m;
            const char * n;
            const uchar Mask[]={1,2,4,8,16,128,32,64,128,128,64,128,32,64,128,128,64,128,128};
            const uchar OETAB[]={PIX,PIX/16,PIX/8,PIX/4,PIX/2,PIX,PIX,PIX,PIX,PIX,PIX,PIX,PIX,PIX,PIX,PIX,PIX,PIX,PIX,PIX,PIX};
            for(m=0;m<4596;m+=3)
            {
            //for(k=0;k<20;k++)
            for(i=0;i<18;i++)
            {
            n=qct+m;
            for(j=0;j
            {
            if(j>=OETAB[i])
            SET_OE;
            else
            CLR_OE;
            CLR_SCK;
            if(pgm_read_byte(48*(j/3)+n++) & Mask[i])
            SET_BLU;
            else
            CLR_BLU;
            SET_SCK;
            }
            SET_LAT;
            CLR_LAT;
            }
            }
            }
            void Delay(void)
            {
            uint i,j;
            for(i=0;i<400;i++)
            for(j=0;j<1000;j++);
            }
            void timer0_init(void)
            {
            TCCR0 = 0x00; //stop
            TCNT0 = 0xfe; //set count
            TCCR0 = 0x02; //無分頻
            TIMSK = 0x01;
            }
            void int0_ini(void)
            {
            MCUCR=(1<
            GICR=0x40; //允許int0中斷
            }
            SIGNAL(SIG_OVERFLOW0)
            {
            TCNT0 = 0xfe;//0xe1;; //重裝初值
            ms++;
            MsCnt++;
            if(MsCnt>100000)
            {
            MsCnt=0;
            Sec++;
            if(Sec>300)Sec=0;
            }
            }
            SIGNAL (SIG_INTERRUPT0)
            {
            static uint oldFall;
            uint temp,newFall;
            newFall=ms;
            if(newFall>oldFall)
            temp=newFall-oldFall; //計算脈沖加間隔的時間
            else
            temp=65535-oldFall+newFall;
            oldFall=newFall;
            if(temp>80&& temp<130) // "0"信號1.125ms
            {
            temp=0;
            }
            else if(temp>170 && temp<220) //“1”信號2.25ms
            {
            temp=1;
            }
            else if(temp>800 && temp<1090) //重復”信號11.25ms
            {
            CaptureOK=1;
            CLR_LED1;
            return;
            }
            else if(temp>1100 && temp<1300) //header信號 13.5ms
            {
            bitcnt=0;
            data0=0;
            data1=0;
            CLR_LED1;
            return; //返回,等待下次開始接收
            }
            else ///干擾信號
            {
            return;
            }
            bitcnt++;
            if(bitcnt<16) //開始接收前16位
            {
            data0=data0|(uint)temp;
            data0=data0<<1;
            }
            else if(bitcnt==16)
            {
            data0=data0|(uint)temp;
            }
            else if(bitcnt<32) //開始接收后16位
            {
            data1=data1|(uint)temp;
            data1=data1<<1;
            }
            else if(bitcnt==32) //接收完最后一位
            {
            data1=data1|(uint)temp;
            CaptureOK=1;
            }
            }
            void IO_ini(void)
            {
            PORTB=0xff;
            PORTC=0Xff;
            PORTD=0Xff;
            DDRD=(1<
            DDRC=(1<
            }
            int main(void)
            {
            IO_ini();
            int0_ini();
            timer0_init();
            sei();
            CLR_LED2;
            CLR_OE;
            while(1)
            {
            if(Sec>60)
            {
            Shift(0xffff);
            Shift(0xffff);
            Shift(0xffff);
            }
            else
            {
            Shift(0);
            Shift(0);
            Shift(0);
            }
            SET_LAT;
            CLR_LAT;
            //Scan();
            }
            return 0;
            }


            評論


            技術專區(qū)

            關閉