您当前的位置:五五电子网电子知识单片机-工控设备STC单片机(STC单片机解码HT6121/6122遥控器 正文
STC单片机解码HT6121/6122遥控器

STC单片机解码HT6121/6122遥控器

点击数:7809 次   录入时间:03-04 12:03:21   整理:http://www.55dianzi.com   STC单片机(
uchar    HEX2ASCII(uchar dat)
{
    dat &= 0x0f;
    if(dat <= 9)    return (dat + ’0’);    //数字0~9
    return (dat - 10 + ’A’);            //字母A~F
}




//*******************************************************************
//*********************** IR Remote Module **************************

//*********************** IR Remote Module **************************
//this programme is used for Receive IR Remote (HT6121).

//data format: Synchro,AddressH,AddressL,data,/data, (total 32 bit).

//send a frame(85ms), pause 23ms, send synchro of another frame, pause 94ms

//data rate: 108ms/Frame


//Synchro:low=9ms,high=4.5/2.25ms,low=0.5626ms
//Bit0:high=0.5626ms,low=0.5626ms
//Bit1:high=1.6879ms,low=0.5626ms
//frame sPACe = 23 ms or 96 ms

/******************** 红外采样时间宏定义, 用户不要随意修改    *******************/

#if ((D_TIMER0 <= 250) && (D_TIMER0 >= 60))
    #define    D_IR_sample            D_TIMER0        //定义采样时间,在60us~250us之间
#endif

#define D_IR_SYNC_MAX        (15000/D_IR_sample)    //SYNC max time
#define D_IR_SYNC_MIN        (9700 /D_IR_sample)    //SYNC min time
#define D_IR_SYNC_DIVIDE    (12375/D_IR_sample)    //decide data 0 or 1
#define D_IR_DATA_MAX        (3000 /D_IR_sample)    //data max time
#define D_IR_DATA_MIN        (600  /D_IR_sample)    //data min time
#define D_IR_DATA_DIVIDE    (1687 /D_IR_sample)    //decide data 0 or 1
#define D_IR_BIT_NUMBER        32                    //bit number

//*******************************************************************************************
//**************************** IR RECEIVE MODULE ********************************************

void IR_RX_HT6121(void)
{
    uchar    SampleTime;

    IR_SampleCnt++;                            //Sample + 1

    F0 = P_IR_RX_temp;                        //Save Last sample status
    P_IR_RX_temp = P_IR_RX;                    //Read current status
    if(F0 && !P_IR_RX_temp)                    //Last sample is high,and current sample is low, so is fall edge
    {
        SampleTime = IR_SampleCnt;            //get the sample time
        IR_SampleCnt = 0;                    //Clear the sample counter

             if(SampleTime > D_IR_SYNC_MAX)        B_IR_Sync = 0;    //large the Maxim SYNC time, then error
        else if(SampleTime >= D_IR_SYNC_MIN)                    //SYNC
        {
            if(SampleTime >= D_IR_SYNC_DIVIDE)
            {
                B_IR_Sync = 1;                    //has received SYNC
                IR_BitCnt = D_IR_BIT_NUMBER;    //Load bit number
            }
        }
        else if(B_IR_Sync)                        //has received SYNC
        {
            if(SampleTime > D_IR_DATA_MAX)        B_IR_Sync=0;    //data samlpe time to large
            else
            {
                IR_DataShit >>= 1;                    //data shift right 1 bit
                if(SampleTime >= D_IR_DATA_DIVIDE)    IR_DataShit |= 0x80;    //devide data 0 or 1
                if(--IR_BitCnt == 0)                //bit number is over?
                {
                    B_IR_Sync = 0;                    //Clear SYNC

上一页  [1] [2] [3]  下一页


本文关键字:单片机  遥控器  STC单片机(单片机-工控设备 - STC单片机(