久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2172|回復: 0
打印 上一主題 下一主題
收起左側

大神們,戳進來看看,求幫忙,這個是我寫的紅外接收程序,調了很久都...

[復制鏈接]
跳轉到指定樓層
樓主
ID:89646 發表于 2015-9-12 20:38 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式

/*說明:使用的是HS0038紅外接收頭                                                          */
/*功能:實現紅外接收,接收到的鍵值碼于數碼管顯示                  */
/*思路:檢測外部中斷下降沿的時間,來翻譯紅外信號                        */
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
#define DataProt P0

sbit IR = P3^2;
sbit du = P2^6;
sbit we = P2^7;

uchar IRtime;                //存儲低電平到下一個低電平持續的時間
bit IR_ok;                        //標志著已經存好了全部IRtime
bit IR_receive_ok;        //標志著接收好了鍵值碼

uchar IRcord[4];        //存儲鍵值碼
uchar IRdata[33];        //存儲數據碼和用戶碼
uchar code leddata[]={
//0                1         2     3     4     5     6     7     8
0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F,
//9     A     B           C         D           E         F                -         .          關顯示
0x6F, 0x77, 0x7C, 0x39, 0x5E, 0x79, 0x71, 0x40, 0x80, 0x00
                   };

void IR_init()
{
        TMOD = 0x02;        //8位可自動裝載定時器
        TH0 = 0x00;
        TL0 = 0x00;
        EA = 1;
        ET0 = 1;
        TR0 = 1;

/*        EX0 = 1;
        IT0 = 1;                //下降沿觸發式中斷                */
        IT0 = 1;
        EX0 = 1;
}



void IRcordpro()        //【鍵值碼獲取】將IRdata[k]里的時間數據 翻譯為 用戶碼和用戶碼
{
        uchar i,j,k,dat,value;
        k = 1;                //IRdata[0]是起始位。所以k = 1:33 共32個數
        for(i = 0;i < 4;i++)
        {
                for(j = 0 ;j < 8;j++)
                {
                        dat = IRdata[k];
                        value >>= 1;
                        if(dat > 5)
                                value |= 0x80;        //先接收低位
                        k++;
                }
                IRcord[i] = value;                //將用戶碼和數據碼保存于數組中去
                value = 0;                                //置0,以便下次用
        }
        IR_receive_ok = 1;                        //表示已經把鍵值碼取完了
}

void IRwork()
{
        switch(IRcord[2])
        {
                case 0x45:        DataProt = leddata[10];        break;       
                case 0x46:        DataProt = leddata[11];        break;       
                case 0x47:        DataProt = leddata[12];        break;       
                case 0x44:        DataProt = leddata[13];        break;       
                case 0x40:        DataProt = leddata[14];        break;       
                case 0x43:        DataProt = leddata[15];        break;       
                case 0x07:        DataProt = leddata[16];        break;       
                case 0x15:        DataProt = leddata[17];        break;       
                case 0x09:        DataProt = 0x70;                break;       
                case 0x16:        DataProt = leddata[0];        break;       
                case 0x19:        DataProt = 0x49;                break;       
                case 0x0d:        DataProt = 0x38;                break;       
                case 0x0c:        DataProt = leddata[1];        break;       
                case 0x18:        DataProt = leddata[2];        break;       
                case 0x5e:        DataProt = leddata[3];        break;       
                case 0x08:        DataProt = leddata[4];        break;       
                case 0x1c:        DataProt = leddata[5];        break;       
                case 0x5a:        DataProt = leddata[6];        break;       
                case 0x42:        DataProt = leddata[7];        break;       
                case 0x52:        DataProt = leddata[8];        break;       
                case 0x4a:        DataProt = leddata[9];        break;
                default: break;
        }
        IR_receive_ok = 0;                        //表示已經把鍵值碼轉換完了
}

void main()
{
        IR_init();
        DataProt = 0xff;
        we = 1;
        DataProt = 0xfe;
        we = 0;
        du = 1;
        while(1)
        {
/*                if(IR_ok)
                {
                        IRcordpro();
                        IR_ok = 0;
                        if(IR_receive_ok)
                        {
                                IRwork();       
                        }
                } */
                if(IR_ok)
                {
                        IRcordpro();
                        IR_ok = 0;
                }
                if(IR_receive_ok)
                {
                        IRwork();       
                }
        }
}

void timer0()interrupt 1
{
        IRtime++;                //277us加一次
}

void int0()interrupt 0
{

        static uchar i = 0;
//        static bit start_flag = 0;
        static start_flag = 0;
        if(start_flag)
        {
                if((IRtime > 47) && (IRtime < 50))                //如果IRtime處于(13053us:13053us),表示接收到起始信號
                        i = 0;
                IRdata[i] = IRtime;
                i++;
                if(i == 33)                //已經接收完了
                {
                        IR_ok = 1;
                        i = 0;
                }       
        }
        else
        {
                start_flag = 1;
                IRtime = 0;
        }
}

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 日韩有码一区 | 色吧久久 | 欧美日韩国产精品一区二区 | 91精品午夜窝窝看片 | 欧美久久电影 | 三级黄视频在线观看 | 精品综合| 黄色在线免费观看 | 欧美日韩国产在线观看 | 久草在线中文888 | www国产亚洲精品 | 久久久久国产一级毛片高清网站 | 无码一区二区三区视频 | 色综合视频 | 国产精品jizz在线观看老狼 | 欧美激情综合五月色丁香小说 | 一区二区久久精品 | 欧美一区二区三区在线看 | 亚洲成人一级 | 一区二区三区精品视频 | 成人久久18免费网站麻豆 | 亚洲毛片在线观看 | www.性色| 成人欧美一区二区三区在线观看 | 毛片电影 | 精品国产乱码久久久久久闺蜜 | 欧美综合在线视频 | 成人精品一区二区三区 | 狠狠的干狠狠的操 | 欧美一级黄色免费 | 全免一级毛片 | 国产成人精品福利 | av在线成人 | 一级国产精品一级国产精品片 | 成人a视频在线观看 | 久久精品视频在线播放 | 国产亚洲一区二区三区 | 精品欧美一区二区三区精品久久 | 欧美一级特黄aaa大片在线观看 | 国产精品片aa在线观看 | 欧美久久久久久 |