芯片解密|单片机解密|IC解密|芯片破解|芯片复制| PCB抄板|软件开发

飞芯科技-芯片解密|单片机解密|IC解密|芯片破解|芯片复制| PCB抄板|软件开发

单片机解密红外使用单片机外部中断+定时器解码

//单片机解密红外解码
单片机解密#include "INT.h"
单片机解密#include "USART.h"
u8 IR_Cnt = 0;
#define T51                                (FOSC/1000000/12)
#define REMOTE_ID                 0   
//遥控器接收状态
//[7]:收到了引导码标志
//[6]:得到了一个按键的所有信息
//[5]:保留        
//[4]:标记上升沿是否已经被捕获                                                                  
//[3:0]:溢出计时器
u8 IR_sta = 0;
u32 IR_Rec = 0;
sbit INT0 = P3^2;
void IR_Init(void)
{
        IT0 = 0;            //使能INT0上升沿和下降沿中断
    EX0 = 1;             //使能INT0中断
        AUXR &= 0x7F;                //定时器时钟12T模式
        TMOD &= 0xF0;                //设置定时器模式
        TMOD |= 0x01;                //设置定时器模式
        TF0 = 0;                //清除TF0标志
        TL0 = 0;                //设置定时初值
        TH0 = 0;                //设置定时初值
        TR0 = 0;                //定时器0开始计时
        ET0 = 1;
}
//处理红外键盘
//返回值:
//         0,没有任何按键按下
//其他,按下的按键键值.
u8 IR_Scan(void)
{      
        u8 Key = 0;      
        if(IR_sta & (1<<6))//得到一个按键的所有信息了
        {  
                u8 TEMP[2];
            TEMP[0] = IR_Rec>>24;                        //得到地址码
            TEMP[1] = (IR_Rec>>16)&0xff;        //得到地址反码
             if((TEMP[0] == (u8)~TEMP[1]) && TEMP[0] == REMOTE_ID)//检验遥控识别码(ID)及地址
            {
                TEMP[0] = IR_Rec>>8;
                TEMP[1] = IR_Rec;         
                if(TEMP[0] == (u8)~TEMP[1])
                                Key = TEMP[0];//键值正确         
                }
                if(Key == 0||(IR_sta&0X80) == 0)//按键数据错误/遥控已经没有按下了
                {
                        IR_sta&=~(1<<6);//清除接收到有效按键标识
                        IR_Cnt = 0;                //清除按键次数计数器
                }
        }  
    return Key;
}

void INT0_ISR(void) interrupt 0 using 1
{
        if(INT0)//上升沿捕获
        {
                TL0 = 0;                //设置定时初值
                TH0 = 0;                //设置定时初值
                TR0 = 1;                //定时器0开始计时
                IR_sta |= 0X10;                                        //标记上升沿已经被捕获
        }
        else //下降沿捕获
        {
                u16 Count_Time = 0;
                Count_Time = TH0 << 8|TL0;                                
                TL0 = 0;                //设置定时初值
                TH0 = 0;                //设置定时初值
                if(IR_sta & 0X10)                                        //完成一次高电平捕获
                {
                        if(IR_sta & 0X80)//接收到了引导码
                        {
                                if(Count_Time > (300 * T51) && Count_Time < (800 * T51))                        //560为标准值,560us
                                {
                                        IR_Rec <<= 1;        //左移一位.
                                        IR_Rec |= 0;        //接收到0        
                                }
                                else if(Count_Time > (1400 * T51) && Count_Time < (1800 * T51))        //1680为标准值,1680us
                                {
                                        IR_Rec <<= 1;        //左移一位.
                                        IR_Rec |= 1;        //接收到1
                                }
                                else if(Count_Time > (2200 * T51) && Count_Time < (2600 * T51))        //得到按键键值增加的信息 2500为标准值2.5ms
                                {
                                        IR_Cnt++;                 //按键次数增加1次
                                        IR_sta&=0XF0;        //清空计时器        
                                }
                        }
                        else if(Count_Time > (4200 * T51) && Count_Time < (4700 * T51))                //4500为标准值4.5ms
                        {
                                IR_sta|=1<<7;        //标记成功接收到了引导码
                                IR_Cnt=0;                //清除按键次数计数器
                        }                                                
                }
                IR_sta &=~(1<<4);
        }               
}


联系方式

地址:石家庄市新华区民族路77号华强广场D座2009
电话:0311-88816616/87087811
手机:13315190088
传真:0311-67901001
联系人:张工
网址:www.feixindz.com
邮箱:feixindz@163.com
微信:xinpianjiemi
QQ:527263666/568069805

在线客服
热线电话

企业微信