搜索
bottom↓
回复: 20

PT2262软解码遥控开关

[复制链接]

出0入0汤圆

发表于 2010-8-27 17:32:36 | 显示全部楼层 |阅读模式

(原文件名:晶振实际为24M,J3接315M接收模块.JPG)
代码如下:
#include<AT89X52.h>

sbit PIN=P3^3;

sbit LockLED1=P0^0;
sbit LockLED2=P0^1;
sbit PortLED1=P0^2;
sbit PortLED2=P0^3;
#define SPort P2

const RMax=3000;   

idata unsigned int RData[48];
unsigned char DP=0;
unsigned int T0Value=0;
const unsigned char CAdr[8]="F0FF0100";
bit PortLockBit;

void LockPort(void){
  PortLockBit=1;
  LockLED1=0;
  LockLED2=0;
}
void UnlockPort(void){
  PortLockBit=0;
  LockLED1=1;
  LockLED2=1;
}
void OpenPort(void){
  if(PortLockBit==0){
    PortLED1=0;
    PortLED1=0;
        SPort=0x00;
  }
}
void ClosePort(void){
  if(PortLockBit==0){
    PortLED1=1;
    PortLED1=1;
        SPort=0xFF;
  }
}
bit CheckAdr(void){
  unsigned char i;
  bit j=1;
  for(i=0;i<8;i++){if(CAdr!=RData)j=0;}
  return j;
}

int MaxValue(void){
  unsigned char i;
  unsigned int a=0x0000;
  for(i=0;i<48;i++){if(RData>a)a=RData;}
  return a;
}
int MinValue(void){
  unsigned char i;
  unsigned int a=0xFFFF;
  for(i=0;i<48;i++){if(RData<a)a=RData;}
  return a;
}
void Decode(void){
  unsigned int MaxVal,MinVal,AverAge;
  unsigned char i;
  bit IsVaild=1;
  MaxVal=MaxValue();MinVal=MinValue();
  if((MaxVal-MinVal)>=40){
    AverAge=(MaxVal+MinVal)/2;
        for(i=0;i<24;i++){if((RData>AverAge)!=(RData[i+24]>AverAge))IsVaild=0;}
        if(IsVaild){
          for(i=0;i<12;i++){
            if(RData[i*2]>AverAge&&RData[i*2+1]>AverAge){RData='0';}
            else if(RData[i*2]>AverAge&&RData[i*2+1]<AverAge){RData='F';}
            else if(RData[i*2]<AverAge&&RData[i*2+1]>AverAge){RData='E';}//ERROR
            else if(RData[i*2]<AverAge&&RData[i*2+1]<AverAge){RData='1';}
            }
          if(CheckAdr()){
                if(RData[8]=='1')LockPort();
                if(RData[9]=='1')ClosePort();
                if(RData[10]=='1')OpenPort();
                if(RData[11]=='1')UnlockPort();
          }
        }
  }
}
//---------
void InitINT1(void){
  EA=1;
  EX1=1;
  IT1=1;
}

void INT1Interrupt(void) interrupt 2{
  T0Value=0;
  TH0=0;TL0=0;
  while(PIN==0);
  if(T0Value==0){T0Value=TH0*0x100+TL0;}
  EA=0;
  if(T0Value>RMax&&DP!=24){DP=0;}
  else if(T0Value<=RMax)RData[DP++]=T0Value;
  if(DP==48){
    Decode();
        DP=0;
  }
  EA=1;
}

void InitTimer0(void)
{
    TMOD |= 0x01;
    TH0 = 0x00;
    TL0 = 0x00;
    EA = 1;
    ET0 = 1;
    TR0 = 1;
}

void Timer0Interrupt(void) interrupt 1
{
    T0Value=0xFFFF;
}

void main(){
  UnlockPort();
  ClosePort();
  LockPort();
  InitTimer0();
  InitINT1();
  while(1);
}

阿莫论坛20周年了!感谢大家的支持与爱护!!

你熬了10碗粥,别人一桶水倒进去,淘走90碗,剩下10碗给你,你看似没亏,其实你那10碗已经没有之前的裹腹了,人家的一桶水换90碗,继续卖。说白了,通货膨胀就是,你的钱是挣来的,他的钱是印来的,掺和在一起,你的钱就贬值了。

出0入0汤圆

 楼主| 发表于 2010-8-27 20:35:35 | 显示全部楼层
原理图有点错误,那两个LED一个接P0.0,P0.1(两端口并联),另一个接P0.2,P0.3

出0入0汤圆

 楼主| 发表于 2010-8-30 13:36:38 | 显示全部楼层
那两个最大值最小值的函数应该是unsigned int类型的...
没人来,心寒...
难道是太简单,没什么价值...

出0入0汤圆

发表于 2010-8-31 13:59:31 | 显示全部楼层
顶下.

出0入0汤圆

发表于 2010-8-31 14:11:34 | 显示全部楼层
有人发过了,看了还是要顶一下。LZ是软件仿真还是实战操作,和2272解码哪个更远?

出0入0汤圆

发表于 2010-8-31 14:50:04 | 显示全部楼层
不错,支持下

出0入0汤圆

发表于 2010-8-31 21:25:44 | 显示全部楼层
mark

出0入0汤圆

 楼主| 发表于 2010-9-2 20:38:27 | 显示全部楼层
回复【4楼】plc_avr 不要迷恋哥只是传说
有人发过了,看了还是要顶一下。lz是软件仿真还是实战操作,和2272解码哪个更远?
-----------------------------------------------------------------------

实际试验了,可用,距离短距离应用应该没问题,手上没有2272,不清楚

出0入0汤圆

发表于 2010-9-3 08:31:56 | 显示全部楼层
很好,呵呵。

出0入0汤圆

 楼主| 发表于 2010-9-3 19:26:26 | 显示全部楼层
回复【4楼】plc_avr 不要迷恋哥只是传说
有人发过了,看了还是要顶一下。lz是软件仿真还是实战操作,和2272解码哪个更远?
-----------------------------------------------------------------------

另外问一下,能找到那个帖子吗,我想看看别人是怎么实现的
有很多解码2262的例程中内嵌汇编,看不懂,所以自己写了个纯c的

出0入0汤圆

发表于 2010-9-3 19:29:26 | 显示全部楼层
http://www.ourdev.cn/bbs/bbs_content.jsp?bbs_sn=959411&bbs_page_no=1&search_mode=1&search_text=2262&bbs_id=9999

出0入0汤圆

发表于 2010-9-24 12:27:36 | 显示全部楼层
楼主是 根据什么写代码的  我也想试一下 编下程序 , 可以提供点资料吗

出0入0汤圆

发表于 2010-12-6 20:52:00 | 显示全部楼层
mark!

出0入0汤圆

发表于 2012-12-26 14:57:02 | 显示全部楼层
,没有看明白是怎么回事?

出0入0汤圆

发表于 2012-12-27 11:59:47 | 显示全部楼层
请问是控制led吗?4通道怎样识别?是互锁,自锁,点动?还数据?

出0入0汤圆

发表于 2012-12-27 18:16:45 | 显示全部楼层
我用C写过2262的发射程序,纯C的!

出0入0汤圆

发表于 2012-12-27 18:17:37 | 显示全部楼层
而且是万能的!

出0入0汤圆

发表于 2012-12-29 08:56:49 来自手机 | 显示全部楼层
imfv 发表于 2012-12-27 18:17
而且是万能的!

能分享一下吗?

出0入0汤圆

发表于 2012-12-29 09:55:11 | 显示全部楼层
牛逼啊,这个我不懂啊

出0入0汤圆

发表于 2012-12-29 11:31:12 | 显示全部楼层
其实程序比楼主的这个程序要简单的多,我只是用最简单的延迟函数完成的!
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-10-3 11:24

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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