一乐电子

 找回密码
 请使用微信账号登录和注册会员

QQ登录

只需一步,快速开始

微信扫码登录

手机号码,快捷登录

手机号码,快捷登录

搜索
查看: 10973|回复: 13

[其他综合] 让PT2262无线解码不再神秘,让菜鸟们都能做解码程序

  [复制链接]
发表于 2011-3-26 20:19 | 显示全部楼层 |阅读模式
本帖最后由 LBQ691477940 于 2011-3-27 12:44 编辑

//自适应频率的2262解码代码 晶振11.0592到22.1184MHZ
//p3.2脚接 315m无线接收头的输出端,p1口接LED作指示灯
#include"AT89x52.h"
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit shou = P3^2;
//=========================================================================
void InitTimer0(void)
{
  TMOD = 0x11;    //定时器1,定时器0用模式1 16位计时用,12T
  EA = 1;
  ET0 = 1;
  ET1=1;
}
//========================================================================
void main(void)
{
  InitTimer0();
  EX0=1;
  while(1);
}
//========================================================================
void ex0(void) interrupt 0
{
  bit err=0;
  uchar i,tl,th,ma1,ma2,ma3;
  uchar TimeCount;
  uint l,m;
  EX0=0;
  TR1=1;
  i=0;
  if(TimeCount>0)//当按键按下释放后该值不在赋值就同通过递减直到该值等于0
   {
    TimeCount--;//等于0后表示按键释放
   }
  while(shou==0);
  while(i<24)
   {
    while(shou==0);        //等待高电平到来
    tl=TL1;
    th=TH1;
    TH1=TL1=0;         //记录低电平长度并初始化高电平头
    l=th;
    l=((l<<8)+tl);
    if(i==0)         //处理低电平
     {
      if(l>2360)      
       {        //确认是引导头
        m=l/31;
       }
      else         //不符合规则(出错)
       {
        i=0;
        TR1=0;
        TH1=TL1=0;
        err=1;
        break;
       }
     }
    else
     {
     if(((l>(m-(m/4)))&&(l<(m+(m/4))))||((l>((m*3)-(m/2)))&&(l<((m*3)+(m/2)))));
     else
      {
       i=0;
       TR1=0;
       TH1=TL1=0;
       err=1;
       break;
      }        
     }
    while(shou==1);      //等待低电平到来
    th=TH1;
    tl=TL1;
    TH1=TL1=0;
    l=th;
    l=((l<<8)+tl);
    //  if((l>460)&&(l<760))    //短为0  短610
    if(((l>(m-(m/4)))&&(l<(m+(m/4)))))
     {
      i++;
      ma1>>=1;
     }
    //  else if((l>1577)&&(l<1977))  //长为1  长1777
    else if(((l>((m*3)-(m/2)))&&(l<((m*3)+(m/2)))))
     {
      i++;
      ma1>>=1;
      ma1+=128;
     }
    else        //不符合规则出错
     {
      i=0;
      TR1=0;
      TH1=TL1=0;
      err=1;
      break;
     }
    if(i==8)
     {
      ma3=ma1;
      //SBUF=ma3;
      //P1=ma3;
     }
    if(i==16)
     {
      ma2=ma1;
      //SBUF=ma2;
      //P1=ma2;
     }
    if(i==24)////解码成功结束
     {
      
      if(TimeCount==0)//为0表示是新的一次按下对其进行处理,如过该值大于0表示已经按下不在处理
       {
        ACC=ma1;
        if(ACC==0xC0)
        //P1=0xef;
        P1_0=~P1_0;
        if(ACC==0x30)
        //P1=0xdf;
        P1_1=~P1_1;
        if(ACC==0x0c)
        //P1=0xbf;
        P1_2=~P1_2;
        if(ACC==0x03)
        //P0=0x7f;
        P1_3=~P1_3;
       }
      TimeCount=30;//防止按键没放开直在取反,保证按1次只做1次处理
     }
   }
  TR1=0;
  TH1=0;
  TL1=0;
  EX0=1;
}
发表于 2011-3-27 00:44 | 显示全部楼层
看不懂,玩不转
回复

使用道具 举报

发表于 2011-3-27 09:55 | 显示全部楼层
让菜鸟们都能做解码程序
???
回复

使用道具 举报

发表于 2011-3-27 11:02 | 显示全部楼层
让菜鸟们都能做,就得有电路有程序......
回复

使用道具 举报

 楼主| 发表于 2011-3-27 12:40 | 显示全部楼层
让菜鸟们都能做,就得有电路有程序......
wyq032 发表于 2011-3-27 11:02 [url=https://www.yleee.com.cn/images/common/back.gif]https://www.yleee.com.cn/images/common/back.gif[/url]



    这个还用得着电路吗?p3.2脚接 315m无线接收头的输出端,p1口接LED作指示灯
回复

使用道具 举报

发表于 2011-3-27 16:10 | 显示全部楼层
你的超再生噪声剔除没有,是怎么剔除的?
回复

使用道具 举报

 楼主| 发表于 2011-3-28 22:32 | 显示全部楼层
你的超再生噪声剔除没有,是怎么剔除的?
younge 发表于 2011-3-27 16:10 [url=https://www.yleee.com.cn/images/common/back.gif]https://www.yleee.com.cn/images/common/back.gif[/url]



    看来大佬是高手啊能否把你的也贴出来分享下呢?
回复

使用道具 举报

发表于 2011-3-29 18:30 | 显示全部楼层
回复 7# LBQ691477940


    我做过编码,没做过解码,原因就是超再生噪声宽度太小,处理麻烦,而使用的51单片机处理速度太慢。不过我目前写的所有程序的思路都是按照人的思维方式抽象来的,所以我的程序也很烦人的 呵呵
回复

使用道具 举报

发表于 2011-3-30 00:02 | 显示全部楼层
宽度太小,退出解码!如果没检测到同步码都跳过!全部跳过这不就剔除噪声了吗?只不过51一直不停的工作工作!这根51单片机处理速度太慢有什么关系呀?
回复

使用道具 举报

发表于 2011-4-1 10:35 | 显示全部楼层
不懂编码解码原理
回复

使用道具 举报

本版积分规则

QQ|一淘宝店|手机版|商店|一乐电子 ( 粤ICP备09076165号 ) 公安备案粤公网安备 44522102000183号

GMT+8, 2025-11-2 03:32 , Processed in 0.033754 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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