数码之家

 找回密码
 立即注册

QQ登录

只需一步,快速开始

微信登录

微信扫一扫,快速登录

搜索
查看: 2236|回复: 13

[C51] 求解释这段红外遥控代码,能给每句添加注释就更好了。谢谢。

[复制链接]
发表于 2020-3-12 21:44:51 | 显示全部楼层 |阅读模式

爱科技、爱创意、爱折腾、爱极致,我们都是技术控

您需要 登录 才可以下载或查看,没有账号?立即注册 微信登录

x
如题,自己想把它修改成自己遥控器的码值,初学,对红外遥控不理解,求高人解答。谢谢!!!
if(ircode[2]==0x1e)
        test=!test;
        if(ircode[2]==0x05)
        {
                set++;
                if(set==4)
                set=0;
        }
                                          if(set==1)
                                                  {
                                                                  if(ircode[2]==0x02|ircode[2]==0x06)                                                //hour
                                                                {
                                                                 temp=(read(0x85)/16)*10+read(0x85)%16;
                                                                 temp++;if(temp==24)temp=0;
                                                                 write(0x84,(temp/10)*16+temp%10);
                                                                        
                                                                }
                                                                if(ircode[2]==0x08|ircode[2]==0x04)
                                                                {
                                                                 temp=(read(0x85)/16)*10+read(0x85)%16;
                                                                 temp--;if(temp==-1)temp=23;
                                                                 write(0x84,(temp/10)*16+temp%10);
                                                                }         
                                                  }

                                                  
                                                  if(set==2)                                                                         //min
                                                  {
                                                                  if(ircode[2]==0x02|ircode[2]==0x06)        
                                                                {
                                                                 temp=(read(0x83)/16)*10+read(0x83)%16;
                                                                 temp++;if(temp==60)temp=0;
                                                                 write(0x82,(temp/10)*16+temp%10);
                                                                        
                                                                }
                                                                if(ircode[2]==0x08|ircode[2]==0x04)
                                                                {
                                                                 temp=(read(0x83)/16)*10+read(0x83)%16;
                                                                 temp--;if(temp==-1)temp=59;
                                                                 write(0x82,(temp/10)*16+temp%10);
                                                                }         
                                                  }

                                                  if(set==3)                                                                         //sec
                                                  {
                                                                  if(ircode[2]==0x02|ircode[2]==0x06)        
                                                                {
                                                                 temp=(read(0x81)/16)*10+read(0x81)%16;
                                                                 temp++;if(temp==60)temp=0;
                                                                 write(0x80,(temp/10)*16+temp%10);
                                                                        
                                                                }
                                                                if(ircode[2]==0x08|ircode[2]==0x04)
                                                                {
                                                                 temp=(read(0x81)/16)*10+read(0x81)%16;
                                                                 temp--;if(temp==-1)temp=59;
                                                                 write(0x80,(temp/10)*16+temp%10);
                                                                }         
                                                  }
                                            decode_ok=0;        
}
 楼主| 发表于 2020-3-13 13:20:55 | 显示全部楼层
真心感谢各位老师的耐心解答。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-13 13:23:08 | 显示全部楼层
是DS1302程序中的红外遥控部分,初学,想做个时钟。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-13 13:25:40 | 显示全部楼层
ploestar 发表于 2020-3-12 23:50
ircode[2]就是遥控用户码,一共四位,地址码,地址反码,命令码,命令反码,对应[]里的0123,一般用2就行了 ...

是DS1302红外调整时间部分的程序。谢谢。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-15 15:20:27 | 显示全部楼层
没能修改成功。不知道是不是这两段程序还要再做修改呢?
void decode(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=value|0x80;
                        }
          else
                    {
             value=value;
                        }
          if(j<8)
                    {
                         value=value>>1;
                        }
           k++;
         }
     ircode[i]=value;
     value=0;     
     }
         if(ircode[2]==~ircode[3])
         decode_ok=1;//解码完毕后标志位置1   
}


void int0 (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;
        }

}
void timer0 (void) interrupt 1 //定时器0中断服务函数 ,红外解码
        {
            irtime++;              //计算2个下降沿之间的时间
        }
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-15 15:22:59 | 显示全部楼层
这是我在网上购买的遥控器。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册 微信登录

x
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-17 14:58:36 | 显示全部楼层
love香 发表于 2020-3-16 00:15
#define  kaiguan 0x01 //定义红外遥控,屏幕 开/关
#define  tiaoshi 0x04 //定义红外遥控,调时
#define  ...

感谢你的解答,好像不太一样呢?
回复 支持 反对

使用道具 举报

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

本版积分规则

APP|手机版|小黑屋|关于我们|联系我们|法律条款|技术知识分享平台

闽公网安备35020502000485号

闽ICP备2021002735号-2

GMT+8, 2025-6-27 14:45 , Processed in 0.234001 second(s), 12 queries , Redis On.

Powered by Discuz!

© 2006-2025 MyDigit.Net

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