打印

请教软件无线解码及自学方法(PT2262的)

[复制链接]
2369|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
sea666|  楼主 | 2007-11-22 17:47 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我是这样作的:

先在定个固定地址,再来软件解码,OK后就去作相应数据码对应的事。

这样作的问题是对遥控器的地址是不能变的,且只有一个。不方便增加

请问高手们目前有学习码方式的是如何作的?

是不是:先开空存储区用来放地址,解码得到的地址同其比较,如果全是空就存入第一个区,不是空就一个一个比较?是就处理,不是就存储。比如有5个,第一个先存在第1区,以此类递?

谢谢,等候中!!!

相关帖子

沙发
SEA666| | 2007-11-23 09:55 | 只看该作者

指点一下哈

我的思路,流程对吗?

使用特权

评论回复
板凳
hkap| | 2007-11-23 10:05 | 只看该作者

先进入学习状态,再触发遥控器,主机再将其ID码存入EEPROM中

使用特权

评论回复
地板
sea666|  楼主 | 2007-11-23 11:57 | 只看该作者

流程大体是这样

但首次在解得了地址码后,要如何处理?
我是这样规划的:

初始化及定义-->有键按下?-->接收判断同步码-->取得8个地址码-->循环比较地址区是否已存?(这儿第一次学和以后学如何处理?我没理明白)放入第一区---》判断数据码并执行。

我目前只会解固定地址的啊

使用特权

评论回复
5
sea666|  楼主 | 2007-11-23 16:00 | 只看该作者

自已顶一下

********************************* 遥控器学习 *********************************//******************************************************************************/void clr_learn_reg(void) {  unsigned char n;  di();  for(n=1;n==remote_cout*4;n++)   {    eeprom_write(n,0);   }  eeprom_write(70,0);  eeprom_write(71,0);  ei(); }/******************************************************************************/unsigned char compare_data(unsigned char eep_addr) {  unsigned char n;  union BIT_32 addr_data;      for(n=0;n<4;n++)   {    addr_data.data_temp_byte[n]=eeprom_read(eep_addr+n);         }       if((data_temp.data_temp_long&0x00fffff0)==(addr_data.data_temp_long&0x00fffff0))     {       return 1;//地址匹配返回1     }       return 0;//地址不匹配返回0 }/******************************************************************************/unsigned char compare_all_data(void) {  unsigned char n;     for(n=0;n<remote_cout;n++)//在已经学习好的遥控器地址里比较有没有相同的   {    if(compare_data(n*4+1))//如果有相同的遥控器     {      return 1;              }         }      return 0;//没有一个地址是相同的 }/******************************************************************************///读遥控器的数量void read_remote_cout(void)  {    remote_cout=eeprom_read(71);//读出已经学习的遥控器总数量    if(remote_cout>20)remote_cout=0; //如果EEPROM是空的则为0  }/******************************************************************************/void check_learn_pro(void) {  unsigned char n;  if(learn)   {    learn=0;    remote_numb=eeprom_read(70);//读出现在可以覆盖掉哪个遥控器的编号          read_remote_cout();////读遥控器的数量    if(remote_numb>(remote_geshu-1))remote_numb=0;//如果遥控器的编号已经是最大的了 则从小开始             if((remote_cout==0)||!compare_all_data())//如果还没有遥控器学习或没有相同地址的遥控器学习     {      di();                     for(n=0;n<4;n++)       {        eeprom_write(remote_numb*4+n+1,data_temp.data_temp_byte[n]);                         }               remote_numb++;               if(remote_cout<remote_geshu+1)remote_cout++;//已经学习好的遥控器数量               eeprom_write(71,remote_cout);//保存已经学习好的遥控器总数量               eeprom_write(70,remote_numb);//保存已学习的遥控起编号               ei();              }   } }/******************************************************************************/void check_out_pro(void) {  read_remote_cout();//读遥控器的数量  if(compare_all_data())   {    data=data_temp.data_temp_byte[0]&0x0f;//    TIMER15S3=0;    TIMER15S4=0;    RC4=1;    } }/******************************************************************************/void decode_init(void)//接收初始化 {  OPTION=0x87;  RBPU=0;  TMR0=0;  T0IE=1;//使能定时器0中断  INTE=1;  TMR1ON=1;//  PORTC=0x00;//  TRISC=0x00;//  ei();//开放全局中断 }/******************************************************************************/void check_remote_recieved(void)//检测有无新的数据 {  if(!RB1)//   {    if(TIMER15S1>30)//是否长按了3秒     {      learn=0;//      clr_learn_reg();      RC4=0;     }    else     {      learn=1;//      TIMER15S2=0;      TIMER15S4=0;      RC4=1;     }   }  else   {    TIMER15S1=0;    if(TIMER15S2>60)     {      learn=0;//     }   }    if(TIMER15S3>2)//数据保持时间   {    data=0;    TIMER15S3=0;   }  if(TIMER15S4>3)//LED显示时间   {    RC4=0;   }  if(recieved)   {    TIMER15S3=0;    recieved=0;    TIMER15S4=0;    RC4=1;    check_learn_pro();    check_out_pro();            }  INTE=1; }

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

6

主题

23

帖子

0

粉丝