一乐电子

一乐电子百科

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

QQ登录

只需一步,快速开始

快捷登录

手机号码,快捷登录

搜索
查看: 18752|回复: 44
收起左侧

[其他综合] 学习型PT2262无线遥控开关程序

  [复制链接]
发表于 2011-3-10 22:54 | 显示全部楼层 |阅读模式
/********************************************************************
    学习型PT2262无线遥控开关程序

STC系列89C58RD 晶振11.0952MHZ ~ 12MHZ
发射芯片采用的是PT2262芯片用4.7M的震荡电阻315M发射
通电后运行指示灯闪烁,按动按钮开关后P0.4输出取反,当输出为低时运行指示灯熄灭
长按按钮开关约5s以上待运行指示灯点亮时再松开按钮则已进入键值遥控学习状态。
把NEC编码方式类型的摇控器对准红外头,按下后要学习的键,待运行指示灯转为闪烁时学习完成。
P0.4  =  OUT控制高电平有效接NPN型三极管驱动继电器
P2.2  =  BZ输出低电平有效接PNP型三极管驱动蜂鸣器
P0.7  =  运行指示灯(闪烁)+学习指示灯(长亮) 即学习板上的D1指示灯
P3.2  =  315MHZ无线一体化接收头接(INT0)
P3.7  =  按钮开关低电平有效 即学习板上的S5

程序设计:LBQ691477940   2011-03-11
**********************************************************************/
#include<REG52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
#define RdCommand 0x01 //定义ISP的字节读操作命令
#define PrgCommand 0x02//定义ISP的字节编程操作命令,前提是该字节是空,0FFh
#define EraseCommand 0x03// 定义ISP的扇区擦除操作命令,要某字节为空,要擦一扇区
#define WaitTime 0x01 //设置等待时间
/*=========================================================================
STC89C51 STC89C52内置EEPROM容量起始地址2000~2FFFH      */
//#define EEPROM_ADD 0x2000
/*======================================================================
STC89C54RD ~ STC89C58RD 内置EEPROM容量起始地址8000H~F3FFH    */
#define EEPROM_ADD 0x8000
//=======================================================================
sfr  AUXR = 0x8E; //扩展RAM管理及禁止ALE输出控制寄存器 (不可位寻址) 如调用AUXR=0x01;禁止ALE输出,降低辐射干扰         
sfr ISP_DATA = 0xe2;  //SP/IAP操作时的数据寄存器。
sfr ISP_ADDRH = 0xe3;//ISP/IAP操作时的地址寄存器高八位。
sfr ISP_ADDRL = 0xe4;//ISP/IAP操作时的地址寄存器低八位。
sfr ISP_CMD = 0xe5;//ISP/IAP操作时的命令模式寄存器,须命令触发寄存器触发方可生效。
sfr ISP_TRIG = 0xe6;//ISP/IAP操作时的命令触发寄存器。
sfr ISP_CONTR = 0xe7;//ISP/IAP控制寄存器。
uchar Ttotal[3],Rem_Code[3];
uchar num0,num1,num2,num3;
uint keynum,TimeCount;
//*************用到的I/O口定义**************
bit  sw_ok,ir_ok; //进入学习状态标志位,接收编码正确标志位
sbit BEEP = P2^2; //BZ输出
sbit OUT = P0^4; //OUT控制
sbit LED = P0^7; //运行指示灯+学习指示灯
sbit SW = P3^7;  //手动控制out开关
sbit hei_clk =P2^4;           //用P2^4模拟串口时钟
sbit hei_data=P2^5;          //用P2^5模拟串口数据
sbit duan_x=P2^6;     //74HC573的锁存LE端  U1  数码管的段选端
sbit wei_x =P2^7;     //74HC573的锁存LE端  U2  数码管的位选端
sbit led =P1^4;
sbit Get_Rem=P3^2;//INT0,信号输入
//================================================================
void out164(unsigned char k)
{
  unsigned char i;
  for(i=0;i<8;i++) //因为是1字节是8位,所以循环8次
   {
    hei_data=k&0x80; //将要发送的数据与上0X80(也就是取最高位)送到数据引脚上
    hei_clk=0; //时钟引脚加低电平,以便下次拉高便可产生上升沿
    hei_clk=1; //低电平到高电平边沿触发到来,并行数据输出至74hc164的Q0-Q7
    k<<=1;     //将发送的数据左移1位
   }
}
//--关闭点阵输出,在每个程序的开头调用一下可防止点阵时不时出现几个亮条.
void guandz(void)
{
  out164(0x00);
}
//--让所有led不亮
void guanled(void)
{
  P0=0x00;   //P0口全送高低平,让所有段都不亮
  duan_x=1;  //让u1 74hc573处于直通状态,也就是输入0,输出也是0,输入1输出也是1
  duan_x=0;  //锁存 也就是保持74hc573现在这个时刻的输出状态一直不变
  P0=0xFF;
}
/* ================ 打开 ISP,IAP 功能 ================= */
void ISP_IAP_enable(void)
{
  EA = 0;       /* 关中断   */
  ISP_CONTR = ISP_CONTR & 0x18;       /* 0001,1000 */
  ISP_CONTR = ISP_CONTR | WaitTime; /* 写入硬件延时 */
  ISP_CONTR = ISP_CONTR | 0x80;       /* ISPEN = 1  */
}

//===========================================
void main (void)  
{
  keynum = 0;
  AUXR=0x01;
  sw_ok = 0;
  ir_ok = 0;
  led=0;  //打开LED片选
  TMOD = 0x01; //设置定时器0为工作方式1(0000 0001)
  TH0 = (65536-45872)/256; // 11.0592mhz
  TL0 = (65536-45872)%256;
  EX0 = 1; // 设定接受INT0的中断
  IT0 = 1;
  ET0 = 1;
  TR0 = 1;
  EA = 1;
  guandz(); //关闭点阵输出
  guanled(); //关闭数码管输出
  num0 = byte_read(EEPROM_ADD+2);
  num2 = byte_read(EEPROM_ADD+0);
  num3 = byte_read(EEPROM_ADD+1);
  while (1)
   {
    if (SW == 0)
     {
      delay(5);
      LED = 1;
      while (SW == 0)
       {
        keynum++;
        delay(5);
        if (keynum > 500)
         {
          sw_ok = 1;//进入学习状态
          LED = 0;
          num1 = 0;
          TR0 = 0;
         }
       }
      if (keynum > 500)
       {
        keynum = 0;
       }
      else //短按
       {
        keynum = 0;
        OUT = ~OUT; //这里可加入控制命令,比如这里的当解码为01时取反P1.5
        BEEP = 0; //解码成功后BZ响一次
        delay(10);
        BEEP = 1;
       }
     }
    if (ir_ok) //判断是否开关已按下
     {
      ir_ok = 0;
      SectorErase(EEPROM_ADD);//擦除扇区
      arraywrite(EEPROM_ADD,3,Ttotal); //重新写入数据
      num2 = byte_read(EEPROM_ADD+0);
      num3 = byte_read(EEPROM_ADD+1);
      num0 = byte_read(EEPROM_ADD+2); //读出来备用
     }
    if (num1 >= 5)
     {
      num1 = 0;
      LED = ~LED;
      if(!OUT)
       {LED = 1;}
     }
   }
}

STC89C58RD中断方式学习型PT2262无线遥控开关程序.rar

1.22 KB, 阅读权限: 2, 下载次数: 334, 下载积分: 一乐金币 -1

评分

参与人数 1一乐金币 +10 收起 理由
fujiachun + 10 谢谢分享

查看全部评分

发表于 2011-3-11 11:55 | 显示全部楼层
学习了,谢谢楼主
发表于 2011-3-11 13:50 | 显示全部楼层
学习学习
发表于 2011-3-17 23:40 | 显示全部楼层
学习学习
发表于 2011-3-18 22:06 | 显示全部楼层
一直到现在为止都不知道“学习型”是什么意思???
 楼主| 发表于 2011-3-18 22:29 | 显示全部楼层
一直到现在为止都不知道“学习型”是什么意思???
younge 发表于 2011-3-18 22:06 [url=https://www.yleee.com.cn/images/common/back.gif]https://www.yleee.com.cn/images/common/back.gif[/url]



    也就是能够先把遥控器的键值学习进去,然后就能用该键来控制了
 楼主| 发表于 2011-3-19 23:36 | 显示全部楼层
本帖最后由 LBQ691477940 于 2011-3-20 00:29 编辑

STC12C2052RD中断方式学习型PT2262无线遥控开关视频效果

实物
CIMG0438.JPG
CIMG0440.JPG
发表于 2011-3-20 00:41 | 显示全部楼层
回复 6# LBQ691477940


    呵呵 有意思
发表于 2011-3-20 07:55 | 显示全部楼层
原理图发上来啊!
发表于 2011-3-20 08:01 | 显示全部楼层
学习一下,支持!

本版积分规则

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

GMT+8, 2024-5-19 22:03 , Processed in 0.084799 second(s), 49 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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