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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

紅外控制程序 電視遙控和機頂盒遙控解碼 控制8個單片機io輸出 可接8個繼電器

[復制鏈接]
跳轉到指定樓層
樓主
ID:82732 發表于 2015-10-19 17:20 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
#include<reg52.h>   

sbit IR=P3^2;  //紅外接口

sbit R1=P1^0;        //輸出1

sbit R2=P1^1;

sbit R3=P1^2;

sbit R4=P1^3;

sbit R5=P1^4;

sbit R6=P1^5;

sbit R7=P1^6;

sbit R8=P1^7;         //輸出8

#define DataPort P0 //定義數據端口

sbit LATCH1=P2^2;// 段鎖存

sbit LATCH2=P2^3;//                /*------------------------------------------------

                全局變量聲明

------------------------------------------------*/


unsigned char code DuanMa[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};// 顯示段碼值


0~9

unsigned char  irtime;//紅外用全局變量


bit irpro_ok,irok;

unsigned char IRcord[4];

unsigned char irdata[33];


/*------------------------------------------------

                  函數聲明

------------------------------------------------*/


void Ir_work(void);

void Ircordpro(void);


/*------------------------------------------------

                  定時器0中斷處理

------------------------------------------------*/


void tim0_isr (void) interrupt 1 using 1

{

  irtime++;  //用于計數2個下降沿之間的時間

}


/*------------------------------------------------

                  外部中斷0中斷處理

------------------------------------------------*/

void EX0_ISR (void) interrupt 0 //外部中斷0服務函數

{

  static unsigned char  i;             //接收紅外信號處理

  static bit startflag;                //是否開始處理標志位

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;   

}

/*------------------------------------------------

                  外部中斷0初始化

------------------------------------------------*/

void EX0init(void)

{

         IT0 = 1;   //指定外部中斷0下降沿觸發,INT0 (P3.2)

         EX0 = 1;   //使能外部中斷

         EA = 1;    //開總中斷

}

/*------------------------------------------------

                  鍵值處理

------------------------------------------------*/


void Ir_work(void)//紅外鍵值散轉程序

{

    switch(IRcord[3])//判斷第4個數碼值,電視遙控和機頂盒遙控不一樣,所以加了兩端,兩個遙控器都能用


,實際用在燈上沒用這么多路

    {

case 0x07:DataPort=DuanMa[1];R1=~R1;break;//1 顯示相應的按鍵值

case 0x0b:DataPort=DuanMa[2];R2=~R2;break;//2

case 0x0f:DataPort=DuanMa[3];R3=~R3;break;//3

case 0x6f:DataPort=DuanMa[3];R3=~R3;break;//3

case 0x13:DataPort=DuanMa[4];R4=~R4;break;//4

case 0x17:DataPort=DuanMa[5];R5=~R5;break;//5

case 0x1b:DataPort=DuanMa[6];R6=~R6;break;//6

case 0x1f:DataPort=DuanMa[7];R7=~R7;break;//7

case 0x23:DataPort=DuanMa[8];R8=~R8;break;//8

case 0x27:DataPort=DuanMa[0];P1=0xf0;break;//off

    case 0x03:DataPort=DuanMa[0];P1=0xf0;break;//off

             default:break;

   }

   switch(IRcord[2])//判斷第三個數碼值

   {

     case 0x10:DataPort=DuanMa[1];R1=~R1;break;//1 顯示相應的按鍵值

     case 0x03:DataPort=DuanMa[2];R2=~R2;break;//2

     case 0x01:DataPort=DuanMa[3];R3=~R3;break;//3

     case 0x06:DataPort=DuanMa[4];R4=~R4;break;//4

     case 0x09:DataPort=DuanMa[5];R5=~R5;break;//5

     case 0x1d:DataPort=DuanMa[6];R6=~R6;break;//6

     case 0x1f:DataPort=DuanMa[7];R7=~R7;break;//7

     case 0x0d:DataPort=DuanMa[8];R8=~R8;break;//8

     case 0x27:DataPort=DuanMa[0];P1=0xf0;break;//off

     case 0x6f:DataPort=DuanMa[0];P1=0xf0;break;//off

     default:break;

   }         

   irpro_ok=0;//處理完成標志

}

/*------------------------------------------------

                紅外碼值處理

------------------------------------------------*/

void Ircordpro(void)//紅外碼值處理函數

{

   unsigned char i, j, k;

   unsigned char cord,value;

   k=1;

   for(i=0;i<4;i++)      //處理4個字節

   {

      for(j=1;j<=8;j++) //處理1個字節8位

      {

         cord=irdata[k];

         if(cord>7)//大于某值為1,這個和晶振有絕對關系,這里使用12M計算,此值可以有一定誤差

         value|=0x80;

         if(j<8)

{

   value>>=1;

}

         k++;

     }

     IRcord[i]=value;

     value=0;     

  }

  irpro_ok=1;//處理完畢標志位置1

}


/*------------------------------------------------

                    主函數

------------------------------------------------*/

void main(void)

{

   P1=0xf0;

   EX0init(); //初始化外部中斷

   TIM0init();//初始化定時器


   DataPort=0xfe; //取位碼 第一位數碼管選通,即二進制1111 1110

   LATCH2=1;      //位鎖存

   LATCH2=0;

   while(1)//主循環

   {

      if(irok)                        //如果接收好了進行紅外處理

      {   

Ircordpro();

         irok=0;

      }

      if(irpro_ok)                   //如果處理好后進行工作處理,如按對應的按鍵后顯示對應的數字等

      {

Ir_work();

      }

   }

}

評分

參與人數 1黑幣 +50 收起 理由
admin + 50

查看全部評分

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

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲 中文 欧美 日韩 在线观看 | 国产高清视频一区 | 91社区在线观看高清 | 欧美视频网 | 不卡的av在线| 波波电影院一区二区三区 | 日韩国产精品一区二区三区 | 国产精品一区二区免费 | 国产亚洲精品精品国产亚洲综合 | 久久99久久99 | 欧美精品一二区 | 精品久久久久久久久久久 | 精品国产aⅴ | 日韩精品一区二区久久 | 免费不卡视频 | 黑人巨大精品欧美一区二区一视频 | 国产精品久久九九 | 国产黄a一级 | 久久中文视频 | 久久综合一区二区三区 | 99久久精品国产一区二区三区 | 久久日韩精品 | 久久国产精品久久国产精品 | 亚洲成人自拍网 | 综合婷婷| 青青草网站在线观看 | 九九热在线视频 | 视频二区在线观看 | 日韩亚洲欧美一区 | 九九热在线免费视频 | 一级欧美 | 91精品国产乱码久久久 | 蜜桃传媒av | 欧美精品一区二区三区在线播放 | 久久久久久免费免费 | 亚洲精品久久久 | 国产在线精品一区 | 欧美日韩在线视频一区 | 曰批视频在线观看 | 操操日| 亚洲精品久久久久avwww潮水 |