找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2515|回复: 2
打印 上一主题 下一主题
收起左侧

STC12C5A60S2单片机VS1838B红外遥控接收解码程序

[复制链接]
跳转到指定楼层
楼主
ID:404239 发表于 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);//设置外部中断1为优先级最高
  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. }
复制代码
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏3 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:1 发表于 2019-4-29 18:35 | 只看该作者
本帖需要重新编辑补全电路原理图,源码,详细说明与图片即可获得100+黑币(帖子下方有编辑按钮)
回复

使用道具 举报

板凳
ID:495574 发表于 2019-5-15 16:38 | 只看该作者
谢谢楼主
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表