新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 基于51紅外線遙控解碼人流量統計系統設計基底

        基于51紅外線遙控解碼人流量統計系統設計基底

        作者: 時間:2016-11-29 來源:網絡 收藏
        #include
        #define uchar unsigned char
        #define uint unsigned int
        unsigned char code smg_du[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00};
        unsigned char code smg_we[]={0x08,0x18,0x28,0x38,0x48,0x58,0x68,0x78};
        uchar irtime;
        uchar startflag;
        uchar irdata[33];
        uchar bitnum;
        uchar irreceok;
        uchar ircode[4];
        uchar irprosok;
        uchar disp[8];
        //************************************************
        //延時函數,在12MHz的晶振頻率下
        //大約50us的延時
        //************************************************
        void delay_50us(uint t)
        {
        uchar j;
        for(;t>0;t--)
        for(j=19;j>0;j--);
        }
        //************************************************
        //延時函數,在12MHz的晶振頻率下
        //大約50ms的延時
        //************************************************
        void delay_50ms(uint t)
        {
        uint j;
        for(;t>0;t--)
        for(j=6245;j>0;j--);
        }
        void timer0init(void)
        {
        TMOD=0x02;
        TH0=0x00;
        TL0=0x00;
        ET0=1;
        EA=1;
        TR0=1;
        }
        void int0init(void)
        {
        IT0=1;
        EX0=1;
        EA=1;
        }
        void irwork(void)
        {
        disp[0]=ircode[0]/16;
        disp[1]=ircode[0]%16;
        disp[2]=ircode[1]/16;
        disp[3]=ircode[1]%16;
        disp[4]=ircode[2]/16;
        disp[5]=ircode[2]%16;
        disp[6]=ircode[3]/16;
        disp[7]=ircode[3]%16;
        }
        void display(void)
        {
        uchar i;
        for(i=0;i<8;i++)
        {
        P1=smg_du[disp[i]];
        P2=smg_we[i];
        delay_50us(20);
        }
        }
        void irpros(void)
        {
        uchar k,i,j;
        uchar value;
        k=1;
        for(j=0;j<4;j++)
        {
        for(i=0;i<8;i++)
        {
        value=value>>1;
        if(irdata[k]>6)
        {
        value=value | 0x80;
        }
        k++;
        }
        ircode[j]=value;
        }
        irprosok=1;
        }
        void main()
        {
        timer0init();
        int0init();
        while(1)
        {
        if(irreceok)
        {
        irpros();
        irreceok=0;
        }
        if(irprosok)
        {
        irwork();
        irprosok=0;
        }
        display();
        }
        }
        void timer0 () interrupt 1
        {
        irtime++;
        }
        void int0 () interrupt 0
        {
        if(startflag)
        {
        if(irtime>32) //檢測引導碼
        {
        bitnum=0;
        }
        irdata[bitnum]=irtime;
        irtime=0;
        bitnum++;
        if(bitnum==33)
        {
        bitnum=0;
        irreceok=1;
        }
        }
        else
        {
        startflag=1;
        irtime=0;
        }
        }


        評論


        技術專區

        關閉
        主站蜘蛛池模板: 田林县| 榆中县| 翼城县| 临高县| 确山县| 和龙市| 秀山| 江陵县| 小金县| 顺义区| 龙江县| 嘉鱼县| 潢川县| 南乐县| 那曲县| 余姚市| 崇阳县| 浦城县| 丽水市| 长垣县| 徐州市| 吉水县| 永春县| 汤阴县| 巴林右旗| 密云县| 洛扎县| 三亚市| 苏尼特左旗| 禹州市| 南木林县| 长丰县| 钟山县| 额敏县| 潍坊市| 宁津县| 石渠县| 静宁县| 伊金霍洛旗| 庆元县| 庆云县|