菜鸟做的无线开关(PT2262遥控器,315M超再生模块,软解码)

2020-01-20 19:11发布


(原文件名:0001.jpg)


(原文件名:0002.jpg)


(原文件名:0003.jpg)


(原文件名:0004.jpg)


#include "TYPEDEF.H"
#include "STC89C5X.H"
#include "INTRINS.H"

sfr P1M1 = 0x92;

#define ONSwitch()     P1M1 |= 0x10; P1_4 = 1
#define OFFSwitch()    P1M1 &= 0xEF; P1_4 = 0

INT8U RFLevel0;
INT8U RFLevel1;
INT8U RFStep;
INT8U RFBuf[25];
//
INT8U KeyAge;
INT8U KeyFlag;
INT8U SwitchState;
INT16U TimeOut;

//void Soft_Rst(void);
void SystemInit(void);
//INT8U  Read_Flash_Byte(INT16U addr);
//void Write_Flash_Byte(INT8U byte, INT16U addr);
//void Erase_Flash_Sector(INT16U addr);

/*
* Main function
*/
int main(void)
{
        SystemInit();
        while(1) {
                if(TF1) {
                        TF1 = 0;

                        RFLevel1 = RFLevel0;
                        RFLevel0 = P3 & 0x80;

                        if(RFStep == 0) {
                                if(RFLevel0 == 0) {
                                        RFBuf[0]++;
                                } else {
                                        if(RFBuf[0] >= 60) {
                                                RFBuf[++RFStep] = 1;
                                        } else {
                                                RFBuf[0] = 0;
                                        }
                                }
                        } else {
                                if(RFLevel0 != 0) {
                                        if(++RFBuf[RFStep] == 0) {
                                                RFStep   = 0;
                                                RFBuf[0] = 0;
                                        }
                                } else if(RFLevel1 != 0) {
                                        if(++RFStep > 24) {
                                                RFLevel0 = RFBuf[0] / 15;
                                                RFLevel1 = 0;
                                                if(RFBuf[1]  < RFLevel0) RFLevel1++;
                                                if(RFBuf[2]  > RFLevel0) RFLevel1++;
                                                if(RFBuf[3]  < RFLevel0) RFLevel1++;
                                                if(RFBuf[4]  > RFLevel0) RFLevel1++;
                                                if(RFBuf[5]  < RFLevel0) RFLevel1++;
                                                if(RFBuf[6]  > RFLevel0) RFLevel1++;
                                                if(RFBuf[7]  < RFLevel0) RFLevel1++;
                                                if(RFBuf[8]  > RFLevel0) RFLevel1++;
                                                if(RFBuf[9]  < RFLevel0) RFLevel1++;
                                                if(RFBuf[10] > RFLevel0) RFLevel1++;
                                                if(RFBuf[11] < RFLevel0) RFLevel1++;
                                                if(RFBuf[12] > RFLevel0) RFLevel1++;
                                                if(RFBuf[13] < RFLevel0) RFLevel1++;
                                                if(RFBuf[14] > RFLevel0) RFLevel1++;
                                                if(RFBuf[15] < RFLevel0) RFLevel1++;
                                                if(RFBuf[16] > RFLevel0) RFLevel1++;
                                                if(RFBuf[17] < RFLevel0) RFLevel1++;
                                                if(RFBuf[18] < RFLevel0) RFLevel1++;
                                                if(RFBuf[19] < RFLevel0) RFLevel1++;
                                                if(RFBuf[20] < RFLevel0) RFLevel1++;
                                                if(RFBuf[21] < RFLevel0) RFLevel1++;
                                                if(RFBuf[22] < RFLevel0) RFLevel1++;
                                                if(RFBuf[23] > RFLevel0) RFLevel1++;
                                                if(RFBuf[24] > RFLevel0) RFLevel1++;
                                                if(RFLevel1 >= 24) {
                                                        KeyAge++;
                                                        TimeOut  = 0;
                                                        RFStep   = 0;
                                                        RFBuf[0] = 0;
                                                        if((KeyFlag == 0) && (KeyAge >= 1)) {
                                                                KeyFlag = 1;
                                                                if(SwitchState == 0) {
                                                                        SwitchState = 1;
                                                                        ONSwitch();
                                                                } else {
                                                                        SwitchState = 0;
                                                                        OFFSwitch();
                                                                }
                                                        }
                                                }
                                        } else {
                                                RFBuf[RFStep] = 0;
                                        }
                                }
                        }
               
                        if(++TimeOut > 6000) {
                                TimeOut = 0;
                                KeyAge  = 0;
                                KeyFlag = 0;
                        }
                }
        }
}

/*
* Initializtion System
*/
void SystemInit(void)
{
        IE = 0x00;
        TMOD = 0x21;
        TH1  = 0xEC;
        TR1  = 1;
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
60条回答
工程师030
1楼-- · 2020-01-27 14:32
谢谢楼主!做的不错!
Johnwoo
2楼-- · 2020-01-27 17:37
Clinging 发表于 2010-5-16 18:13
发现了STC 11和12系列中断有BUG,如果中断间隔很小,频繁中断时容易死机,不知道大家有没碰到 ...

STC12C5A60,频繁INT0外部中断也遇到死机问题,不过只有实验会发生这个现象,其他时候因为中断频率很低,没有遇到过。
jacky82512
3楼-- · 2020-01-27 21:44
这个不错的贴
xiedeyong2008
4楼-- · 2020-01-28 01:04
 精彩回答 2  元偷偷看……
TCMCU
5楼-- · 2020-01-28 03:41
学习一下
wszyjsw2
6楼-- · 2020-01-28 08:31
mark  PT2262遥控器

一周热门 更多>