找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2992|回復(fù): 2
收起左側(cè)

STC12C5A60S2單片機(jī)VS1838B紅外遙控接收解碼程序

[復(fù)制鏈接]
ID:404239 發(fā)表于 2019-4-29 16:05 | 顯示全部樓層 |閱讀模式
  1. #include "stc12c5a60s2.h"
  2. #include "intrins.h"
  3. #define IR_CH_   0x45  //ch-
  4. #define IR_CH    0x46  //ch
  5. #define IR_CH_A  0x47  //ch+
  6. void IR_Receive(unsigned char ir_buf[]);
  7. sbit IRIN=P3^3;         //紅外接收口
  8. sbit led1=P1^0;//LED指示
  9. unsigned char IRCOM[4];
  10. void Delay140us()        //@11.0592MHz
  11. {
  12.     unsigned char i, j;

  13.     _nop_();
  14.     _nop_();
  15.     i = 2;
  16.     j = 125;
  17.     do
  18.     {
  19.         while (--j);
  20.     } while (--i);
  21. }
  22. void main()
  23. {
  24.   IRIN=1;                        
  25.     EX1 = 1;
  26.     led1 = 1;
  27.   TCON=TCON|0x04;  //INT1 FALL INT
  28.     IPH |= (0X01<<2);
  29.     IP |= (0X01<<2);//設(shè)置外部中斷1為優(yōu)先級最高
  30.     EA = 1;   
  31.   while(1)
  32.   {            
  33.                 led1 ^=1;
  34.                 if(IRCOM[2]==IR_CH_)  led1 = 1;
  35.                 if(IRCOM[2]==IR_CH_A) led1 = 0;
  36.                 if(IRCOM[2]==IR_CH)   led1 ^= 1;//遙控測試
  37.                 IRCOM[2] = 0;
  38.     }
  39. }
  40. void IR_int(void) interrupt 2
  41. {
  42.     EA = 0;
  43.     IR_Receive(IRCOM);
  44.     EA = 1;
  45. }
  46. void IR_Receive(unsigned char ir_buf[])
  47. {
  48.     xdata unsigned char time,i,j;
  49.     while(!IRIN)
  50.     {
  51.         time++;
  52.         Delay140us();
  53.     }
  54.     if(time>63)//64*0.14=9ms
  55.     {
  56.         time = 0;
  57.         while(IRIN)
  58.         {
  59.             time++;
  60.             Delay140us();
  61.         }
  62.         if(time>31)//32*0.14=4.5ms
  63.         {
  64.             time = 0;
  65.             for(i=0;i<4;i++)
  66.             {
  67.                 ir_buf[i] = 0;
  68.                 for(j=0;j<8;j++)
  69.                 {
  70.                     while(!IRIN)
  71.                     {
  72.                         time++;
  73.                         Delay140us();
  74.                     }
  75.                     if(time>=3)
  76.                     {
  77.                                 time=0;
  78.                                 while(IRIN)//ÅÐ¶Ï¸ßµçÆ½Ê±¼ä
  79.                                 {
  80.                                         time++;
  81.                                         Delay140us();
  82.                                 }
  83.                                 if(time>=11)  ir_buf[i] |= (0x01<<j);
  84.                     }
  85.                 }
  86.             }
  87.         }        
  88.     }
  89. }
復(fù)制代碼
回復(fù)

使用道具 舉報

ID:1 發(fā)表于 2019-4-29 18:35 | 顯示全部樓層
本帖需要重新編輯補(bǔ)全電路原理圖,源碼,詳細(xì)說明與圖片即可獲得100+黑幣(帖子下方有編輯按鈕)
回復(fù)

使用道具 舉報

ID:495574 發(fā)表于 2019-5-15 16:38 | 顯示全部樓層
謝謝樓主
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表