新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 紅外解碼程序換種寫法

        紅外解碼程序換種寫法

        作者: 時間:2016-12-02 來源:網絡 收藏
        #include

        #define uint unsigned int
        #define uchar unsigned char
        sbit IR=P3^2; //紅外接口標志
        sbit RS = P1^0;
        sbit RW = P1^1;
        sbit E = P1^2;
        sbit beep = P1^7;
        uint hour,minute,second,count;
        char code Tab[16]={0,1,2,3,4,5,
        6,7,8,9,A,B,C,D,E,F};
        //char code Tab[16]="0123456789abcdef";//兩種定義方法都可以
        chardataTimeNum[]=" ";//data:固定指前面0x00-0x7f的
        //128個RAM,可以用acc直接讀寫的,速度最快,生成的代碼也最小。
        char data Test1[]=" ";
        void DelayMs(uchar z);
        /******************************************************************/
        /* 變量聲明 */
        /******************************************************************/
        uchar irtime;//紅外用全局變量
        bitirpro_ok,irok;
        uchar IRcord[4]; //處理后的紅外碼,分別是 客戶碼,客戶碼,數據碼,數據碼反碼
        uchar irdata[33]; //33個高低電平的時間數據
        /******************************************************************/
        /* 函數聲明 */
        /******************************************************************/
        void Ir_work(void);
        void Ircordpro(void);
        void ShowString (unsigned charline,char *ptr);
        /******************************************************************/
        /* 定時器0中斷服務函數 */
        /******************************************************************/

        void beep1()
        {
        uchar i;
        for (i=0;i<4;i++)
        {beep=0;
        DelayMs(400);
        beep=1;
        DelayMs(400);
        }
        }
        void beep2()
        {
        uchar i;
        for (i=0;i<5;i++)
        {beep=0;
        DelayMs(300);
        beep=1;
        DelayMs(300);
        }
        }
        void beep3()
        {
        uchar i;
        for (i=0;i<2;i++)
        {beep=0;
        DelayMs(500);
        beep=1;
        DelayMs(500);
        }
        }
        void shan()
        {
        uchar i;
        for (i=0;i<3;i++)
        {P0=0x55;
        DelayMs(1000);
        P0=0xff;
        DelayMs(1000);
        }
        }
        void tim0_isr (void) interrupt 1 using 1//定時器0中斷服務函數
        {
        irtime++; //用于計數2個下降沿之間的時間
        }
        /******************************************************************/
        /* 外部中斷0函數 */
        /******************************************************************/
        void ex0_isr (void) interrupt 0 using 0//外部中斷0服務函數
        {
        uchar i; //接收紅外信號處理
        bitstartflag; //是否開始處理標志位
        if(startflag)
        {

        if(irtime<63&&irtime>=33)//引導碼 TC9012的頭碼,9ms+4.5ms
        i=0;

        irdata[i]=irtime;//存儲每個電平的持續時間,用于以后判斷是0還是1
        irtime=0;
        i++;
        if(i==33)
        {
        irok=1;
        i=0;
        }
        }

        else
        {
        irtime=0;
        startflag=1;
        }
        }
        /******************************************************************/
        /* 定時器0初始化 */
        /******************************************************************/
        void TIM0init(void)//定時器0初始化
        {
        TMOD=0x02;//定時器0工作方式2,TH0是重裝值,TL0是初值
        TH0=0x00; //重載值
        TL0=0x00; //初始化值
        ET0=1; //開中斷
        TR0=1;
        }


        上一頁 1 2 下一頁

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 宁德市| 临海市| 梁平县| 荆门市| 乾安县| 阿瓦提县| 小金县| 奇台县| 邢台市| 兴化市| 新昌县| 炎陵县| 马山县| 宁乡县| 汕尾市| 枝江市| 马尔康县| 清镇市| 黄石市| 松阳县| 南宫市| 墨竹工卡县| 阳泉市| 潼关县| 淮阳县| 迁西县| 赤水市| 安图县| 墨玉县| 肥东县| 广元市| 库尔勒市| 青州市| 二手房| 宜黄县| 双峰县| 皮山县| 高台县| 长白| 家居| 九龙城区|