找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 384|回复: 5
收起左侧

基于STC15F104单片机解码PT2262 EV1527软件解码 2272学习遥控器芯片

  [复制链接]
ID:1039126 发表于 2024-5-7 09:41 | 显示全部楼层 |阅读模式
STC15F104W解码原理图.jpg
1.png

315-433MHZ学习遥控器芯片
支持1527  2264  2260  2262   SC5211  HS2240等解码,自动适应振荡电阻
2260 2262 2264 如果不进行人工地址编码,好多个遥控器地址编码一样的,只要学习一个遥控器,所有的遥控器都能同时用

一:如何设置自锁,互锁,点动输出
1:断电。按住学习键然后上电保持1-2秒钟后松开,学习灯闪3次,设置为自锁输出。
2:断电。按住学习键然后上电保持1-2秒钟后松开,学习灯闪1次,设置为互锁输出。
3:断电。按住学习键然后上电保持1-2秒钟后松开,学习灯闪2次,设置为点动输出。
二:遥控器学习:
以上输出模式设置后断开电源,然后上电,按一下学习键,学习灯保持亮,再按遥控器上的任意一键,学习灯熄灭,遥控器学习成功。重复上述操作可以学习多达20个遥控器。1527 2260 2262 2264等的遥控器可以混合学习使用。
三:如何清空已学习过的遥控器:
断电,按住学习键然后上电保持4秒以上再松开按键,学习灯闪烁4次,说明已学习过的遥控器已被清空。

单片机源程序如下:
//内部晶振:11.0592M
//测试芯片:STC15F104E/STC11F04W        
//硬件最简版
//实现2262、1527解码输出,学习、自适应多阻值,片内EEPROM存储相关信息

#include <reg52.h>
#include <intrins.h>

sfr AUXR=0x8e;

sfr IAP_DATA    = 0xC2;                //片内EEPROM资源声明
sfr IAP_ADDRH   = 0xC3;
sfr IAP_ADDRL   = 0xC4;
sfr IAP_CMD     = 0xC5;
sfr IAP_TRIG    = 0xC6;
sfr IAP_CONTR   = 0xC7;

sfr P3M0                =0xb2;
sfr P3M1                =0xb1;

#define uchar unsigned char
#define uint  unsigned int

sbit RF                        =        P3^4;          //射频引脚定义                                                                                                                    
sbit set                 =        P3^3;          //设置键定义

sbit keya                =        P3^0;          //第一路
sbit keyb                =        P3^1;          //第二路  
sbit keyc                =        P3^2;          //第三路
sbit keyd                =        P3^5;          //第四路


uint   ll_w;
uchar  hh_w;           //高,低电平宽度
uchar  ma_x;                //接收到第几位编码了
uchar  idata bma1,bma2,bma3; //用于接收过程存放遥控编码,编码比较两次,这是第一次
uchar idata mmb1,mmb2,mmb3; //        用于接收过程存放遥控编码,第二次
uchar key_data;   
uchar short_k;
uchar  mma1,mma2,mma3; //用于解码过程                        
uchar L_M_select;
uchar xplx;
uint s,s1;

bit old_rc5;             //保存上一次查询到的电平状态
bit tb_ok;               //接收到同步的马时置1
bit rf_ok1,rf_ok2;                 //解码过程中的临时接收成功标志
bit rf_ok;               //接收到一个完整的遥控命令后置1,通知解码程序可以解码了
bit study;                                 //进入学习状态标志
bit system_int;                         //系统清零标志
bit m1,m2,m3,m4;
bit flag_zs;
bit  decode_ok;                 //解码成功

uchar idata key_number[61];               


void delay_1ms(uint x)    //1毫秒延时
{
        uchar b,c;
        for(x;x>0;x--)
                {
                        for(b=5;b>0;b--)
                                {
                                        for(c=150;c>0;c--);
                                }
                }
}

void BB(uint size,uchar Number)
{

        if(Number)
                {
                        for(Number;Number>0;Number--)
                                {
                                        set=0;
                                         delay_1ms(size);
                                        set=1;
                                        delay_1ms(size);                                
                                }               
                }
             else
                           {
                                set=0;
                                 delay_1ms(size);
                                set=1;                        
                        }
}

void chick1527(uchar d)
{
        uchar u;
        for(u=0;u<4;u++)
                {
                        if(((d>>(u*2)) & 3)==2)
                                 {
                                         xplx=0x55;
                                  }
                }
}


//====================================================
/////////片内EEPROM读写驱动程序///////////////////////////
//====================================================


void IAP_Disable()           //关闭IAP
{
    //关闭IAP 功能, 清相关的特殊功能寄存器,使CPU 处于安全状态,
    //一次连续的IAP 操作完成之后建议关闭IAP 功能,不需要每次都关
    IAP_CONTR = 0;      //关闭IAP 功能
    IAP_CMD   = 0;      //清命令寄存器,使命令寄存器无命令,此句可不用
    IAP_TRIG = 0;      //清命令触发寄存器,使命令触发寄存器无触发,此句可不用
    IAP_ADDRH = 0;
    IAP_ADDRL = 0;
}//



//读一字节,调用前需打开IAP 功能,入口:DPTR = 字节地址,返回:A = 读出字节
uchar read_add(uint addr)         //读EEPROM
{
    IAP_DATA = 0x00;
    IAP_CONTR = 0x84;         //打开IAP 功能, 设置Flash 操作等待时间
    IAP_CMD = 0x01;                 //IAP/ISP/EEPROM 字节读命令

    IAP_ADDRH = addr>>8;    //设置目标单元地址的高8 位地址
    IAP_ADDRL = addr&0xff;    //设置目标单元地址的低8 位地址

    EA = 0;
    IAP_TRIG = 0x5a;   //先送 46h,再送B9h 到ISP/IAP 触发寄存器,每次都需如此
    IAP_TRIG = 0xa5;   //送完 B9h 后,ISP/IAP 命令立即被触发起动
    _nop_();
    EA = 1;
    IAP_Disable(); //关闭IAP 功能, 清相关的特殊功能寄存器,使CPU 处于安全状态,
                    //一次连续的IAP 操作完成之后建议关闭IAP 功能,不需要每次都关
    return (IAP_DATA);
}//------------------------------------------------------------------------------


//字节编程,调用前需打开IAP 功能,入口:DPTR = 字节地址, A= 须编程字节的数据
void write_add(uint addr,uchar ch)         //直接写EEPROM
{
    IAP_CONTR = 0x84;         //打开 IAP 功能, 设置Flash 操作等待时间
    IAP_CMD = 0x02;                 //IAP/ISP/EEPROM 字节编程命令


    IAP_ADDRH = addr>>8;    //设置目标单元地址的高8 位地址
    IAP_ADDRL = addr&0xff;    //设置目标单元地址的低8 位地址

    IAP_DATA = ch;                  //要编程的数据先送进IAP_DATA 寄存器
    EA = 0;
    IAP_TRIG = 0x5a;   //先送 46h,再送B9h 到ISP/IAP 触发寄存器,每次都需如此
    IAP_TRIG = 0xa5;   //送完 B9h 后,ISP/IAP 命令立即被触发起动
    _nop_();
    EA = 1;
    IAP_Disable(); //关闭IAP 功能, 清相关的特殊功能寄存器,使CPU 处于安全状态,
                    //一次连续的IAP 操作完成之后建议关闭IAP 功能,不需要每次都关
}//------------------------------------------------------------------------------
//擦除扇区, 入口:DPTR = 扇区地址


void Sector_Erase(uint addr)         //扇区擦除
{
    IAP_CONTR = 0x84;         //打开IAP 功能, 设置Flash 操作等待时间
    IAP_CMD = 0x03;                 //IAP/ISP/EEPROM 扇区擦除命令

    IAP_ADDRH =addr>>8;    //设置目标单元地址的高8 位地址
    IAP_ADDRL =addr&0xff;    //设置目标单元地址的低8 位地址

    EA = 0;
    IAP_TRIG = 0x5a;   //先送 46h,再送B9h 到ISP/IAP 触发寄存器,每次都需如此
    IAP_TRIG = 0xa5;   //送完 B9h 后,ISP/IAP 命令立即被触发起动
    _nop_();

    EA = 1;
下载烧录说明
IRC频率选11.0592M
如果已烧录过的单片机,烧录前必须下载后恢复下出厂设置。才能再烧录,新单片机不用恢复
操作:按住学习键,上电保持10秒以上松开即可。

Protel99格式的PCB和源程序烧写文件等资料下载: 资料.7z (435.33 KB, 下载次数: 31)
IO口设置.png

电路原理图

电路原理图

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

ID:1039126 发表于 2024-5-7 09:43 | 显示全部楼层
保证能用哦
回复

使用道具 举报

ID:624476 发表于 2024-5-9 22:13 来自手机 | 显示全部楼层
能接收多少距离?和用硬解码差距大吗?
回复

使用道具 举报

ID:1039126 发表于 2024-5-13 20:52 | 显示全部楼层
fhl323225577 发表于 2024-5-9 22:13
能接收多少距离?和用硬解码差距大吗?

同等功率遥控距离一样
回复

使用道具 举报

ID:156220 发表于 2024-5-14 08:36 | 显示全部楼层
学习了,谢谢楼主的资料
回复

使用道具 举报

ID:1039126 发表于 2024-5-17 10:01 | 显示全部楼层
紫色的云 发表于 2024-5-14 08:36
学习了,谢谢楼主的资料

客气了
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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