数码之家

 找回密码
 立即注册

QQ登录

只需一步,快速开始

微信登录

微信扫一扫,快速登录

搜索
查看: 2316|回复: 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-12 23:36:49 | 显示全部楼层
收到的红外码的客户码  放在数组 ircode 的第三位

下面就是按照不同的按键读取ds1302的寄存器,并且写入,
换自己的遥控器,只需要改 == 号后面的数即可

ircode[2]==0x1e//进入时钟设置  例如“设置”按键
ircode[2]==0x05//循环选择时分秒设置  例如右箭头
ircode[2]==0x02|ircode[2]==0x06    //加号或上箭头
ircode[2]==0x08|ircode[2]==0x04 //减号或下箭头
回复 支持 反对

使用道具 举报

发表于 2020-3-12 23:50:57 来自手机浏览器 | 显示全部楼层
本帖最后由 ploestar 于 2020-3-13 00:16 编辑

ircode[2]就是遥控用户码,一共四位,地址码,地址反码,命令码,命令反码,对应[]里的0123,一般用2就行了
所以,你ircode[2]后面,就是遥控的代码了,目测是调ds1302的时分秒,做了2两个键的兼容,02/06加04/08减,第一两行,应该是个灯,测试遥控是否正常,其实可以改成!=0,然后延时关闭,这样每个键都亮一下。后面一个if,切换时分秒调节,set==123分别是时分秒调节了,如果要用自己的遥控,你得知道你的遥控码,很简单,把你的显示部分改一下,大概意思,比如hour=ircode[2],2位数分开处理一下,记下你需要代码

打赏

参与人数 1家元 +20 收起 理由
家睦 + 20

查看全部打赏

回复 支持 反对

使用道具 举报

发表于 2020-3-12 23:53:55 来自手机浏览器 | 显示全部楼层
本帖最后由 ploestar 于 2020-3-12 23:57 编辑

-xxxxxx-xx--x--
那个|不应该是||吗?
回复 支持 反对

使用道具 举报

发表于 2020-3-13 08:07:45 | 显示全部楼层
ploestar 发表于 2020-3-12 23:53
-xxxxxx-xx--x--
那个|不应该是||吗?

就是。一开始我也怀疑自己是不是记错了:lol:
这种代码,全是常数,语法故意搞错,书写风格低级,阅读和维护难受,原作者发出来是不是有点误人子弟?说是垃圾又过分了点
回复 支持 反对

使用道具 举报

发表于 2020-3-13 08:24:24 | 显示全部楼层
sz1988 发表于 2020-3-13 08:07
就是。一开始我也怀疑自己是不是记错了
这种代码,全是常数,语法故意搞错,书写风格低级,阅读和维 ...

网上好多这种现象。把程序复制过来编译一遍,报错,总有一个或者几个地方出问题,要花时间修改。
回复 支持 反对

使用道具 举报

 楼主| 发表于 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-16 00:15:59 | 显示全部楼层
#define  kaiguan 0x01 //定义红外遥控,屏幕 开/关
#define  tiaoshi 0x04 //定义红外遥控,调时
#define  jia 0x05 //定义红外遥控,加
#define  jian 0x06 //定义红外遥控,减


if(ircode[2]==tiaoshi) //0x04 遥控调节时间
    {
        xiaozhun=1; //调节时间后,取消秒的绿颜色  
        set++;
        if(set==4)
        {
            set=0;
        }
    }
    if(set==1)    //hour 小时
    {
        if(ircode[2]==jia|ircode[2]==jia)  // 小时加
        {
            temp=(read(0x85)/16)*10+read(0x85)%16;
            temp++;
            if(temp==24)
            {
                temp=0;
            }
            write(0x84,(temp/10)*16+temp%10);
        }
        if(ircode[2]==jian|ircode[2]==jian)  // 小时减
        {
            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]==jia|ircode[2]==jia)        //   分钟加
        {
            temp=(read(0x83)/16)*10+read(0x83)%16;
            temp++;
            if(temp==60)
            {
                temp=0;
            }
            write(0x82,(temp/10)*16+temp%10);
        }
        if(ircode[2]==jian|ircode[2]==jian)     //    分钟减
        {
            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]==jia|ircode[2]==jia)        //  秒钟加
        {
            temp=(read(0x81)/16)*10+read(0x81)%16;
            temp++;
            if(temp==60)
            {
                temp=0;
            }
            write(0x80,(temp/10)*16+temp%10);
        }
       if(ircode[2]==jian|ircode[2]==jian)   //    秒钟减
        {
            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-17 14:58:36 | 显示全部楼层
love香 发表于 2020-3-16 00:15
#define  kaiguan 0x01 //定义红外遥控,屏幕 开/关
#define  tiaoshi 0x04 //定义红外遥控,调时
#define  ...

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

使用道具 举报

发表于 2020-3-22 21:42:50 | 显示全部楼层
hzyong 发表于 2020-3-17 14:58
感谢你的解答,好像不太一样呢?

我修改了一下,加入了部分功能
回复 支持 反对

使用道具 举报

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

本版积分规则

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

闽公网安备35020502000485号

闽ICP备2021002735号-2

GMT+8, 2025-9-7 11:02 , Processed in 0.109201 second(s), 10 queries , Gzip On, Redis On.

Powered by Discuz!

© 2006-2025 MyDigit.Net

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