新聞中心

        EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 51單片機(jī)-紅外遙控解碼

        51單片機(jī)-紅外遙控解碼

        作者: 時(shí)間:2016-12-02 來源:網(wǎng)絡(luò) 收藏
        這段代碼仍然有問題,正在調(diào)試中,路過的大牛希望給與指導(dǎo):
        #include <reg52.h>
        #define uint unsigned int
        #define uchar unsigned char
        uint irtime,startflag,i,bitnum,decodeok,receiveok;
        uchar irdata[33],disp[8],vcode[4];
        unsigned char code duan[]={ 0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,
        0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71};
        unsigned char code wei[]={ 0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07};
        void delay(int k){
        int i,j;
        for(i = 0; i < k; i++)
        for(j = 0; j < 0xff; j++)
        ;
        }
        void Time0_Init(){
        EA = 1;
        ET0 = 1;
        TH0 = 0x00;
        TL0 = 0x00;
        TMOD = 0x02;
        TR0 = 1;
        }
        void Int0_Init(){
        EA = 1;
        IT0 = 1;
        EX0 = 1;
        }
        void Irpro(){
        disp[0] = vcode[0] / 16; //把十六進(jìn)制的數(shù)轉(zhuǎn)化成兩位顯示
        disp[1] = vcode[0] % 16;
        disp[2] = vcode[1] / 16;
        disp[3] = vcode[1] % 16;
        disp[4] = vcode[2] / 16;
        disp[5] = vcode[2] % 16;
        disp[6] = vcode[3] / 16;
        disp[7] = vcode[3] % 16;
        }
        void display(){
        for(i = 0; i < 8; i++){
        P1 = wei[ i];
        P2 = duan[disp[ i]];
        delay(1);
        }
        }
        void decode(){
        uint k,i,j;
        uchar value;
        j = 1;
        for(k = 0; k < 4; k++){
        value = 0;
        for(i = 0; i < 8; i++){
        if(irdata[j]>6) //如果大于6個(gè)irtime是高電平
        value |= 0x01 << i; j++;
        }
        vcode[k] = value;
        }
        decodeok = 1;
        }
        void main(){
        Time0_Init(); //對定時(shí)器中斷進(jìn)行初始化
        Int0_Init(); //對下降沿中斷進(jìn)行初始化
        while(1){
        if(receiveok == 1){ //如果接受成功進(jìn)行解碼
        receiveok = 0;
        decode();
        }
        if(decodeok == 1){ //如果解碼成功,轉(zhuǎn)換一下格式準(zhǔn)備顯示
        decodeok = 0;
        Irpro();
        }
        display();
        }
        }
        void time0() interrupt 1{ //由于是模式2,8位自動(dòng)重裝,所以一個(gè)irtime為256us
        irtime++;
        }
        void int0() interrupt 0{
        if(startflag){
        if(irtime > 32){ //如果是引導(dǎo)信息,則bitnum清零
        bitnum = 0;
        }
        irdata[bitnum] = irtime; //裝載數(shù)據(jù),包括1位引導(dǎo)位,16位用戶碼,8位數(shù)據(jù)碼和8位數(shù)據(jù)碼反碼
        irtime = 0;
        bitnum++;
        if(bitnum == 33){ //裝載數(shù)據(jù)完成
        bitnum = 0;
        receiveok = 1;
        }
        }
        else{
        startflag = 1; //遇到第一個(gè)下降沿讓irtime為0,遇到第二個(gè)時(shí)計(jì)算用了多少個(gè)irtime
        irtime = 0;
        }
        }
        上一頁 1 2 下一頁

        關(guān)鍵詞: 51單片機(jī)紅外遙控解

        評論


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

        關(guān)閉
        主站蜘蛛池模板: 南漳县| 伊通| 穆棱市| 福安市| 开原市| 涡阳县| 通渭县| 长治县| 休宁县| 阳谷县| 新化县| 重庆市| 河曲县| 寿阳县| 常州市| 苗栗县| 米脂县| 聂拉木县| 罗源县| 娱乐| 封开县| 土默特左旗| 紫金县| 定襄县| 五指山市| 永泰县| 盐池县| 禹城市| 洪洞县| 太康县| 棋牌| 青州市| 蓬溪县| 博野县| 乐陵市| 团风县| 浪卡子县| 贡嘎县| 塔河县| 仪征市| 石台县|