在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,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) > 設(shè)計應(yīng)用 > 51單片機紅外接收解碼程序

            51單片機紅外接收解碼程序

            作者: 時間:2012-09-05 來源:網(wǎng)絡(luò) 收藏

            以S52作為系統(tǒng)。以S52的P3.3口作為端口,該端口是外部中斷1。

            本文引用地址:http://www.biyoush.com/article/170912.htm

            這個接受是以XC866作為發(fā)送控制系統(tǒng),接收如下:

            #includereg52.h> //頭文件
            #includeintrins.h>

            #define uchar unsigned char //宏定義
            #define uint unsigned int

            sbit HWRx=P3^3; //位聲明

            code uchar Table[]= //共陰數(shù)碼管 0-9 a-f - 表
            {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,
            0x77,0x7c,0x39,0x5e,0x79,0x71,0x40};

            uchar Table_Data[8]={0,0,0,0,0,0,0,0};//用于顯示的數(shù)組
            uchar Table_Rx[67];//用于存儲判斷接收是1或0的參數(shù)

            void Delay();//延時子函數(shù)

            void Display(uchar *lp,uchar lc)//顯示
            {
              uchar i; //定義變量
            P2=0; //端口2為輸出,關(guān)閉
            P1=P10xF8; //將P1口的前3位輸出0,對應(yīng)138譯門輸入腳,

            全0為第一位數(shù)碼管
            for(i=0;ilc;i++) //循環(huán)顯示,采用動態(tài)掃描
            {
                P2=Table[lp[i]]; //查表法得到要顯示數(shù)字的數(shù)碼段
                 if(lp[i]>0x7f)
                P2+=0x80;
                Delay(); //延時
                P2=0; //清0端口,準備顯示下位
                if(i==7) //檢測顯示完8位否,完成直接退出,不讓P1口再加1,

            否則進位影響到第四位數(shù)據(jù)
                break;
                P1++; //點亮下一位數(shù)碼管
            }
            }


            void main() //主函數(shù)
            {
            EA=1; //首先開啟總中斷
            EX1=1; //開啟外部中斷 1
            IT1=1; //設(shè)置成下降沿觸發(fā)方式

            while(1) //一直顯示,其它由中斷處理
            {
                Display(Table_Data,8);
            }

            }

            void Delay() //延時時間大約為31us,晶振12M
            {
            uchar i=13;
            while(i)
                i--;
            }

            void Delay_ms(uint z) //延時時間約為 1ms*X 晶振為12M
            {
            uint x=0,y=0;
            for(x=z;x>0;x--)
            for(y=54;y>0;y--);
            }
            void hongwai() interrupt 2 //外部中斷 1 ,INT1(P3^3)連接線接收IC數(shù)據(jù)腳
            {
            uchar i,j,tmp;
            EX1=0; //關(guān)閉中斷

            j=33; //傳送一組數(shù)包括引導碼1位,4個八位數(shù)據(jù),總共33位
            i=0; //從第一維數(shù)組開始

            Delay_ms(10);
            if(HWRx)
            { //然后再檢測紅線接收腳是有數(shù)據(jù)招收,有繼續(xù),沒有則退出
            EX1=1;
            return;
            }

            while(j--)
            { //循環(huán)接收33位數(shù)據(jù),為何我們用到66位數(shù)組,我們可以不接收高電平

            時間常數(shù),只接低電平常數(shù)就
            //可以判斷1或0了,在這里我們都接收,還有一點要知道,

            接收波形是反向,在沒有接收時端口為高電平
              tmp=0;
                Table_Rx[i]=1; //時間量從1開始
                while(!HWRx) //檢測高低電平的變化,這里檢測的是高電平
                 {
                 Table_Rx[i]++; //沒變繼續(xù)加1
                 Delay(); //家一個延時防止,計數(shù)值一下子就加滿了
                 tmp++; //加1
                 if(tmp==250)
                 break;
                }
                i++;

            tmp=0;
                Table_Rx[i]=1; //時間量從1開始
            while(HWRx) //檢測高低電平的變化,這里檢測的是低電平
                {
            Table_Rx[i]++; //沒變繼續(xù)加1
            Delay(); //同上
            tmp++; //加1,用于判斷是1還是0的,低電平來了
            if(tmp==250)
                 break;
                }
            i++;
            }

            P1=0xf8;
            i=200; //加入循環(huán)延時,抗干擾
            while(i) //在有接收數(shù)據(jù)的時候顯示一個H
            {
                tmp=255;
                while(tmp)
                {
                 tmp--;
                 P2=0x76;
                }
                i--;
              }

            tmp=0;
            for(i=3;i19;i++,i++) //處理發(fā)送的數(shù)據(jù)
            {
            tmp>>=1; //右移一位,接收低位在前
                if(Table_Rx[i]>30) //檢測低電平時間超過30就確認為1
                 tmp+=0x80;
            }
            Table_Data[0]=tmp/16; //分開2位以16進制顯示,用顯示發(fā)送的數(shù)據(jù)
            Table_Data[1]=tmp%16;

            tmp=0;
            for(i=19;i35;i++,i++) //同上
            {
            tmp>>=1;
                if(Table_Rx[i]>30)
                 tmp+=0x80;
              }
            Table_Data[2]=tmp/16;
            Table_Data[3]=tmp%16;

            tmp=0;
            for(i=35;i51;i++,i++)
            {
                tmp>>=1;
                if(Table_Rx[i]>30)
                 tmp+=0x80;
            }
            Table_Data[4]=tmp/16;
            Table_Data[5]=tmp%16;

            tmp=0;
            for(i=51;i67;i++,i++)
            {
                tmp>>=1;
            if(Table_Rx[i]>30)
            tmp+=0x80;
            }
            Table_Data[6]=tmp/16;
            Table_Data[7]=tmp%16;
            EX1=1; //剛進中斷時關(guān)閉了分控,現(xiàn)在要打開
            }

            51單片機相關(guān)文章:51單片機教程


            單片機相關(guān)文章:單片機教程


            單片機相關(guān)文章:單片機視頻教程


            單片機相關(guān)文章:單片機工作原理


            晶振相關(guān)文章:晶振原理


            關(guān)鍵詞: 程序 解碼 接收 紅外 單片機

            評論


            相關(guān)推薦

            技術(shù)專區(qū)

            關(guān)閉