˜Ë(bi¨¡o)î}: ¼tÍâʹÓÃ†ÎÆ¬™C(j¨©)ÍⲿÖДà+¶¨•r(sh¨ª)Æ÷½â´a [´òÓ¡±¾í“(y¨¨)]

×÷Õß: Á_ÎĽܠ   •r(sh¨ª)ég: 2018-8-5 21:36
˜Ë(bi¨¡o)î}: ¼tÍâʹÓÃ†ÎÆ¬™C(j¨©)ÍⲿÖДà+¶¨•r(sh¨ª)Æ÷½â´a
°üº¬Á˼tÍâ½â´a£¬×Ô„Ó(d¨°ng)¸ù“þ(j¨´)²¨ÌØÂÊÔO(sh¨¨)Öö¨•r(sh¨ª)Æ÷Òç³öÂÊÒÔ¼°Ê¹Óö¨•r(sh¨ª)Æ÷ÑÓ•r(sh¨ª)
´®¿Ú²¿·Ö£º
void UART1_Init(u32 Boud)
{
        u16 Temp = (65536 - FOSC/Boud/4);
        SCON = 0x50;
    T2L = Temp;        
    T2H = Temp >> 8;
    AUXR |= 0x15;                                //†¢„Ó(d¨°ng)¶¨•r(sh¨ª)Æ÷
    ES = 1;                                     //ʹÄÜ´®¿ÚÖДà
}
char putchar(u8 c)
{
        SBUF = c;
        while(!TI);
        TI = 0;
        return c;
}
void UART1_ISR() interrupt 4 using 1
{
    if(RI)
    {
        RI = 0;                                 //ÇåÖДà˜Ë(bi¨¡o)Ö¾
    }
//        if(TI)
//        {
//                TI = 0;                                 //ÇåÖДà˜Ë(bi¨¡o)Ö¾
//        }
}

//¶¨•r(sh¨ª)Æ÷ÑÓ•r(sh¨ª)²¿·Ö
#include "delay.h"
#define TICK_US                (FOSC/1000000/12)
volatile u16 told = 0;                                //Ó‹(j¨¬)”µ(sh¨´)Æ÷ÅfÖµ               
volatile u16 tnow = 0;                                //Ó‹(j¨¬)”µ(sh¨´)Æ÷ÐÂÖµ               
volatile u16 tick = 0;                                //Ó‹(j¨¬)”µ(sh¨´)Öµ               
volatile u16 delay_tick = 0;                //ÑÓ•r(sh¨ª)Ó‹(j¨¬)”µ(sh¨´)Öµ
void delay_init(void)
{
        T4L = 0;                                
    T4H = 0;
        T4T3M &= 0x0F;
        T4T3M |= B1000_0000;         //†¢„Ó(d¨°ng)¶¨•r(sh¨ª)Æ÷ 12T
        told = 0;                        
        tnow = 0;
        tick = 0;
        delay_tick = 0;
}
void delay(u16 us)
{
        told = T4H << 8 | T4L;                        
        tnow = 0;tick = 0;
        delay_tick = us * TICK_US;
        while(1)
        {
                tnow = T4H << 8 | T4L;
                if(tnow != told)
                {
                        if(tnow > told)
                        {
                                tick += tnow - told;
                        }
                        else                                //¶¨•r(sh¨ª)Æ÷Òç³ö
                        {
                                tick += 65535 + tnow - told;
                        }
                        told = tnow;
                        if(tick >= delay_tick)
                                break;
                }
        }
}

//¼tÍâ½â´a
#include "INT.h"
#include "USART.h"
u8 IR_Cnt = 0;
#define T51                                (FOSC/1000000/12)
#define REMOTE_ID                 0   
//ßb¿ØÆ÷½ÓÊÕ î‘B(t¨¤i)
//[7]:ÊÕµ½ÁËÒýŒ§(d¨£o)´a˜Ë(bi¨¡o)Ö¾
//[6]:µÃµ½ÁËÒ»‚€(g¨¨)°´æIµÄËùÓÐÐÅÏ¢
//[5]:±£Áô        
//[4]:˜Ë(bi¨¡o)Ó›ÉÏÉýÑØÊÇ·ñÒѽ›(j¨©ng)±»²¶«@                                                                  
//[3:0]:Òç³öÓ‹(j¨¬)•r(sh¨ª)Æ÷
u8 IR_sta = 0;
u32 IR_Rec = 0;
sbit INT0 = P3^2;
void IR_Init(void)
{
        IT0 = 0;            //ʹÄÜINT0ÉÏÉýÑØºÍϽµÑØÖДà
    EX0 = 1;             //ʹÄÜINT0ÖДà
        AUXR &= 0x7F;                //¶¨•r(sh¨ª)Æ÷•r(sh¨ª)çŠ12Tģʽ
        TMOD &= 0xF0;                //ÔO(sh¨¨)Öö¨•r(sh¨ª)Æ÷ģʽ
        TMOD |= 0x01;                //ÔO(sh¨¨)Öö¨•r(sh¨ª)Æ÷ģʽ
        TF0 = 0;                //Çå³ýTF0˜Ë(bi¨¡o)Ö¾
        TL0 = 0;                //ÔO(sh¨¨)Öö¨•r(sh¨ª)³õÖµ
        TH0 = 0;                //ÔO(sh¨¨)Öö¨•r(sh¨ª)³õÖµ
        TR0 = 0;                //¶¨•r(sh¨ª)Æ÷0é_(k¨¡i)ʼӋ(j¨¬)•r(sh¨ª)
        ET0 = 1;
}
//ÌŽÀí¼tÍâæI±P(p¨¢n)
//·µ»ØÖµ:
//         0,›](m¨¦i)ÓÐÈκΰ´æI°´ÏÂ
//ÆäËû,°´Ïµİ´æIæIÖµ.
u8 IR_Scan(void)
{      
        u8 Key = 0;      
        if(IR_sta & (1<<6))//µÃµ½Ò»‚€(g¨¨)°´æIµÄËùÓÐÐÅÏ¢ÁË
        {  
                u8 TEMP[2];
            TEMP[0] = IR_Rec>>24;                        //µÃµ½µØÖ·´a
            TEMP[1] = (IR_Rec>>16)&0xff;        //µÃµ½µØÖ··´´a
             if((TEMP[0] == (u8)~TEMP[1]) && TEMP[0] == REMOTE_ID)//™zòž(y¨¤n)ßb¿Ø×R(sh¨ª)„e´a(ID)¼°µØÖ·
            {
                TEMP[0] = IR_Rec>>8;
                TEMP[1] = IR_Rec;         
                if(TEMP[0] == (u8)~TEMP[1])
                                Key = TEMP[0];//æIÖµÕý´_         
                }
                if(Key == 0||(IR_sta&0X80) == 0)//°´æI”µ(sh¨´)“þ(j¨´)åe(cu¨°)Õ`/ßb¿ØÒѽ›(j¨©ng)›](m¨¦i)Óа´ÏÂÁË
                {
                        IR_sta&=~(1<<6);//Çå³ý½ÓÊÕµ½ÓÐЧ°´æI˜Ë(bi¨¡o)×R(sh¨ª)
                        IR_Cnt = 0;                //Çå³ý°´æI´Î”µ(sh¨´)Ó‹(j¨¬)”µ(sh¨´)Æ÷
                }
        }  
    return Key;
}

void INT0_ISR(void) interrupt 0 using 1
{
        if(INT0)//ÉÏÉýÑØ²¶«@
        {
                TL0 = 0;                //ÔO(sh¨¨)Öö¨•r(sh¨ª)³õÖµ
                TH0 = 0;                //ÔO(sh¨¨)Öö¨•r(sh¨ª)³õÖµ
                TR0 = 1;                //¶¨•r(sh¨ª)Æ÷0é_(k¨¡i)ʼӋ(j¨¬)•r(sh¨ª)
                IR_sta |= 0X10;                                        //˜Ë(bi¨¡o)Ó›ÉÏÉýÑØÒѽ›(j¨©ng)±»²¶«@
        }
        else //ϽµÑز¶«@
        {
                u16 Count_Time = 0;
                Count_Time = TH0 << 8|TL0;                                
                TL0 = 0;                //ÔO(sh¨¨)Öö¨•r(sh¨ª)³õÖµ
                TH0 = 0;                //ÔO(sh¨¨)Öö¨•r(sh¨ª)³õÖµ
                if(IR_sta & 0X10)                                        //Íê³ÉÒ»´Î¸ßëŠÆ½²¶«@
                {
                        if(IR_sta & 0X80)//½ÓÊÕµ½ÁËÒýŒ§(d¨£o)´a
                        {
                                if(Count_Time > (300 * T51) && Count_Time < (800 * T51))                        //560žé˜Ë(bi¨¡o)œÊ(zh¨³n)Öµ,560us
                                {
                                        IR_Rec <<= 1;        //×óÒÆÒ»Î».
                                        IR_Rec |= 0;        //½ÓÊÕµ½0        
                                }
                                else if(Count_Time > (1400 * T51) && Count_Time < (1800 * T51))        //1680žé˜Ë(bi¨¡o)œÊ(zh¨³n)Öµ,1680us
                                {
                                        IR_Rec <<= 1;        //×óÒÆÒ»Î».
                                        IR_Rec |= 1;        //½ÓÊÕµ½1
                                }
                                else if(Count_Time > (2200 * T51) && Count_Time < (2600 * T51))        //µÃµ½°´æIæIÖµÔö¼ÓµÄÐÅÏ¢ 2500žé˜Ë(bi¨¡o)œÊ(zh¨³n)Öµ2.5ms
                                {
                                        IR_Cnt++;                 //°´æI´Î”µ(sh¨´)Ôö¼Ó1´Î
                                        IR_sta&=0XF0;        //Çå¿ÕÓ‹(j¨¬)•r(sh¨ª)Æ÷        
                                }
                        }
                        else if(Count_Time > (4200 * T51) && Count_Time < (4700 * T51))                //4500žé˜Ë(bi¨¡o)œÊ(zh¨³n)Öµ4.5ms
                        {
                                IR_sta|=1<<7;        //˜Ë(bi¨¡o)Ó›³É¹¦½ÓÊÕµ½ÁËÒýŒ§(d¨£o)´a
                                IR_Cnt=0;                //Çå³ý°´æI´Î”µ(sh¨´)Ó‹(j¨¬)”µ(sh¨´)Æ÷
                        }                                                
                }
                IR_sta &=~(1<<4);
        }               
}
void TIME0_ISR(void) interrupt 1 using 1
{
    TL0 = 0;                //ÔO(sh¨¨)Öö¨•r(sh¨ª)³õÖµ
        TH0 = 0;                //ÔO(sh¨¨)Öö¨•r(sh¨ª)³õÖµ
        if(IR_sta&0x80)//ÉÏ´ÎÓДµ(sh¨´)“þ(j¨´)±»½ÓÊÕµ½ÁË
        {        
                IR_sta &= ~0X10;                                                //È¡ÏûÉÏÉýÑØÒѽ›(j¨©ng)±»²¶«@˜Ë(bi¨¡o)Ó›
                if((IR_sta&0X0F) == 0X00)
                        IR_sta|=1<<6;//˜Ë(bi¨¡o)Ó›Òѽ›(j¨©ng)Íê³ÉÒ»´Î°´æIµÄæIÖµÐÅÏ¢²É¼¯        
                if((IR_sta&0X0F) < 14)
                        IR_sta++;
                else
                {
                        TR0 = 0;                //¶¨•r(sh¨ª)Æ÷0é_(k¨¡i)ʼӋ(j¨¬)•r(sh¨ª)
                        IR_sta&=~(1<<7);//Çå¿ÕÒýŒ§(d¨£o)˜Ë(bi¨¡o)×R(sh¨ª)
                        IR_sta&=0XF0;        //Çå¿ÕÓ‹(j¨¬)”µ(sh¨´)Æ÷        
                }                        
        }        
}


STC8.rar

288.26 KB, ÏÂÝd´Î”µ(sh¨´): 28, ÏÂÝd·e·Ö: ºÚŽÅ -5


×÷Õß: wuyuwangluo    •r(sh¨ª)ég: 2018-8-22 00:22
˜Ë(bi¨¡o)ӛϠ ¸ÐÖx˜ÇÖ÷
×÷Õß: HongZQ2007    •r(sh¨ª)ég: 2018-10-21 23:22
¸ÐÖxÄúµÄŸo(w¨²)˽·ÖÏí£¬ÖxÖxÄ㣡£¡£¡
×÷Õß: lindeijun1    •r(sh¨ª)ég: 2018-10-22 15:39
ÖxÖx˜ÇÖ÷·ÖÏí
×÷Õß: wxbdcmh    •r(sh¨ª)ég: 2020-6-24 20:10
ÖxÖx˜ÇÖ÷·ÖÏí




šgÓ­¹âÅR (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1