在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<s id="cmphk"><label id="cmphk"></label></s>
    <span id="cmphk"><var id="cmphk"></var></span>
    <dfn id="cmphk"><var id="cmphk"></var></dfn>
    <menu id="cmphk"><thead id="cmphk"></thead></menu>

    <address id="cmphk"></address>

      <dfn id="cmphk"></dfn>
      
      
      <span id="cmphk"></span>

      <object id="cmphk"><tt id="cmphk"></tt></object>
      1. 新聞中心

        EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > STC12C5410AD學(xué)習(xí)板---紅外解碼

        STC12C5410AD學(xué)習(xí)板---紅外解碼

        作者: 時(shí)間:2016-11-18 來(lái)源:網(wǎng)絡(luò) 收藏
        這個(gè)是我自制STC12C5410AD學(xué)習(xí)板的紅外解碼程序,此程序是針對(duì)SAA3010紅外編碼芯片來(lái)做解碼的。如果換了其他芯片,只要修改紅外芯片的頭文件就可以了。

        本文引用地址:http://www.biyoush.com/article/201611/316026.htm

        視頻演示地址:

        http://v.youku.com/v_show/id_XMTUyMzQwMjg4.html

        以下是詳細(xì)程序:

        /*****Program Author : ZhengWen(ClimberWin) *****/
        /*****E_mail :cooldianzi@163.com *****/
        /*************************************************************/
        /*****File Function : IR Soft Recode(SAA3010) *****/
        /*****Compile Date : 2009/2/4 *****/
        /*****Edition Info : V1.0 *****/
        /*****Amend Date : *****/
        /*************************************************************/
        /************紅外軟件解碼,遙控器型號(hào),SAA3310芯片************/
        /***********************2009.2.4******************************/
        /***********可以紅外解碼LCD顯示*************/
        #include
        #include "intrins.h "
        #include "SAA3010_Recode.h"
        #include "LCD12864.H"
        #include
        #include
        #include
        #include

        #define uchar unsigned char
        #define uint unsigned int
        #define ulong unsigned long

        sbit speaker=P2^1;
        uchar LCD_IR_data[16]={0xbc,0xfc,0xd6,0xb5,0xce,0xaa,0x3a,0x30,0x30,0x30,0x00,0x00,0x00,0x00,0x00,0x00};//鍵值為:0x00
        void Delay1ms(unsigned int count);
        void Key_Beep(void);
        void Delay_Beep(unsigned int count1);
        void init_rs232(void);

        /***************************1秒延時(shí)子程序start***************************/
        void Delay1ms(unsigned int count)
        {
        unsigned int i,j;
        for(i=0;ifor(j=0;j<120;j++);
        }

        /***************************1秒延時(shí)子程序end***************************/

        /*****************按鍵聲音********************/
        void Key_Beep(void)
        { uchar i;
        for (i=0;i<250;i++)
        { speaker=1;
        Delay_Beep(30);

        speaker=0;

        Delay_Beep(30);
        }
        speaker=1;
        }

        /**************************************************/

        /***************************蜂鳴器延時(shí)子程序start**********************/
        void Delay_Beep(unsigned int count)
        {
        unsigned int i,j;
        for(i=0;ifor(j=0;j<10;j++);
        }
        /***************************蜂鳴器延時(shí)子程序end************************/
        /* 串口通信初始化設(shè)置 */
        void init_rs232(void)
        {
        AUXR=74; //設(shè)置波特率是普通51的12倍 ,允許AD中斷
        SCON=0x50;
        PCON=0x00;
        TH1=0xFA; //波特率 115200 22.1184MHZ 時(shí)候(F4 4800 FA 9600 FDH 9600)*12
        TL1=0XFA;
        TMOD=0X20;
        TR1=1;
        }


        void main(void)
        {
        uchar key_code_b; //紅外遙控鍵值百位
        uchar key_code_s; //紅外遙控鍵值十位
        uchar key_code_g; //紅外遙控鍵值個(gè)位
        Delay1ms(1000);
        init_rs232();
        TI=1;
        printf("STC12C5410AD學(xué)習(xí)板 紅外遙控解碼n");
        printf("ClimberWin 2009.2.4nn");
        Delay1ms(5000);

        LCD_INIT();
        Delay1ms(1000);
        LCD_LOCAL(1,1,"STC 單片機(jī)學(xué)習(xí)板");
        LCD_LOCAL(2,1,"MCU:STC12C5410AD");
        LCD_LOCAL(4,1,"Date:2009.2.4 ");
        LCD_LOCAL(3,1,"By ClimberWin ");
        /****************************************/
        Delay1ms(50000);
        LCD_LOCAL(1,1,"紅外遙控測(cè)試界面");
        LCD_LOCAL(2,1,"遙控芯片:SAA3010");
        LCD_LOCAL(3,1,"測(cè)試結(jié)果: ");
        LCD_LOCAL(4,1," ");
        printf("紅外遙控測(cè)試界面n");
        //Delay100us(8); // 實(shí)為760uS
        Key_Beep();
        IR_Input = 1;//先把信號(hào)線拉高,等待接收紅外信號(hào)
        while(1)
        {
        LCD_IR_data[7]=0x30;//初值設(shè)置顯示000
        LCD_IR_data[8]=0x30;
        LCD_IR_data[9]=0x30;
        if(!IR_Input) SAA3010_Recode();
        if(SAA3010_CODE[0]==0x03)
        {Key_Beep();
        SBUF=SAA3010_CODE[3];//發(fā)送解碼值到串口
        key_code_b=SAA3010_CODE[3]/100; //把鍵值用十進(jìn)制表示
        key_code_s=(SAA3010_CODE[3]%100)/10;
        key_code_g=(SAA3010_CODE[3]%100)%10;
        LCD_IR_data[7]=LCD_IR_data[7]+key_code_b;
        LCD_IR_data[8]=LCD_IR_data[8]+key_code_s;
        LCD_IR_data[9]=LCD_IR_data[9]+key_code_g;
        LCD_LOCAL(4,1,LCD_IR_data);//把解碼數(shù)據(jù)顯示到液晶上
        SAA3010_CODE[0]=0x00;
        SAA3010_CODE[1]=0x00;
        SAA3010_CODE[2]=0x00;
        SAA3010_CODE[3]=0x00;
        }
        else
        {SAA3010_CODE[0]=0x00;}
        }
        }

        LCD12864.H 如下:

        /*****Program Author : ZhengWen(ClimberWin) *****/
        /*****E_mail :cooldianzi@163.com *****/
        /*************************************************************/
        /*****File Function : LCD12864 Display Module *****/
        /*****Compile Date : 2009/1/28 *****/
        /*****Edition Info : V1.0 *****/
        /*****Amend Date : *****/
        /*************************************************************/
        #ifndef __LCD12864__
        #define __LCD12864__
        #include
        #define uchar unsigned char
        #define uint unsigned int
        #define ulong unsigned long
        sbit LCD_CS = P1^7;//片選 高電平有效 單片LCD使用時(shí)可固定高電平rs
        sbit LCD_SID = P1^6;//數(shù)據(jù) r/w
        sbit LCD_SCLK = P1^5;//時(shí)鐘 e

        /********************LCD12864**************************/
        void LCD_SEND(uchar date);
        void LCD_SCOM(bit st,uchar date);
        void LCD_DELAY(void);
        void LCD_INIT(void);
        void LCD_write(uchar *p);
        void LCD_LOCAL(uchar x,uchar y,uchar *p);
        void LCD_cblank(uchar x,uchar y);
        void LCD_count(long s,uchar x1,uchar y1,uchar x,uchar y,uchar *p);
        void DELAYLCD(uchar t);
        /*****************************************************/
        /****************************lcd12864************************************/
        void DELAYLCD(uchar t)
        {
        while(--t);
        }

        void LCD_SEND(uchar date)
        {
        uchar i;
        LCD_SCLK=0;
        for(i=0;i<8;i++)
        {
        LCD_SID=date&0x80;
        LCD_SCLK=1;
        LCD_SCLK=0;
        date<<=1;
        }
        }
        void LCD_SCOM(bit st,uchar date)
        {
        uchar st_temp,hdate,ldate;
        if(st)
        st_temp=0xfa;
        else st_temp=0xf8;
        hdate=date&0xf0;
        ldate=date&0x0f;
        ldate <<= 4;
        LCD_CS = 1;
        LCD_SEND(st_temp);
        LCD_SEND(hdate);
        LCD_SEND(ldate);
        LCD_CS = 0;
        DELAYLCD(38);
        }
        void LCD_DELAY(void)
        { uchar s;
        s=10;
        while(--s)
        DELAYLCD(250);
        }
        void LCD_INIT(void)
        {
        LCD_SCOM(0,0x30);
        LCD_DELAY();
        LCD_SCOM(0,0x0c);
        LCD_DELAY();
        LCD_SCOM(0,0x01); //清屏,將DDRAM的地址計(jì)數(shù)器歸零
        LCD_DELAY();
        }
        void LCD_write(uchar *p)
        {
        while(*p)
        {
        LCD_SCOM(1,*p);
        p++;
        }
        }
        void LCD_LOCAL(uchar x,uchar y,uchar *p) //lcd string (x,y) write!
        {
        switch (x)
        {
        case 1:LCD_SCOM(0,0x7f+y); LCD_write(p);break;
        case 2:LCD_SCOM(0,0x8f+y); LCD_write(p);break;
        case 3:LCD_SCOM(0,0x87+y); LCD_write(p);break;
        case 4:LCD_SCOM(0,0x97+y); LCD_write(p);break;
        default :LCD_SCOM(0,0x7f+y); LCD_write(p);
        }
        }
        void LCD_cblank(uchar x,uchar y)
        {
        switch (x)
        {
        case 1:LCD_SCOM(0,0x7f+y); LCD_SCOM(0,0x0d);break;
        case 2:LCD_SCOM(0,0x8f+y); LCD_SCOM(0,0x0d);break;
        case 3:LCD_SCOM(0,0x87+y); LCD_SCOM(0,0x0d);break;
        case 4:LCD_SCOM(0,0x97+y); LCD_SCOM(0,0x0d);break;
        default :LCD_SCOM(0,0x7f+y); LCD_SCOM(0,0x0d);
        }
        }

        /************************************************************************/

        /*******************************************************************************/
        #endif

        SAA3010_Rncode.H 如下:

        /*****Program Author : ZhengWen(ClimberWin) *****/
        /*****E_mail :cooldianzi@163.com *****/
        /*************************************************************/
        /*****File Function : SAA3010 IR_Input soft recode *****/
        /*****Compile Date : 2009/2/4 *****/
        /*****Edition Info : V1.0 *****/
        /*****Amend Date : *****/
        /*************************************************************/
        /***************對(duì)紅外遙控器SAA3010軟件解碼*******************/
        #ifndef __SAA3010_Rncode__
        #define __SAA3010_Rncode__
        #define uchar unsigned char
        #include
        sbit IR_Input=P3^4;
        uchar SAA3010_CODE[4];

        void SAA3010_Recode(void);
        void Delay100us(uchar i);

        /*************SAA3010解碼程序**************/
        void SAA3010_Recode(void)
        {
        unsigned char i, j;
        bit FBIT;
        // IR_Input 由高變低,跳過(guò)第一次采樣
        for (i=0; i<4; i++)
        {
        SAA3010_CODE[i] =0x00;
        }
        /*--------------------------------------
        曼徹斯特碼:
        輸入二元碼 Manchester碼
        0 01
        1 10
        ****************************************/
        // 設(shè)為第二次采樣,采樣時(shí)間間隔800uS
        Delay100us(8);

        if (!IR_Input)
        {
        // 因?yàn)镾AA3010的起始位為1
        SAA3010_CODE[0] |=0x01;
        SAA3010_CODE[0] <<= 1;
        // 起始第二位一次采樣
        Delay100us(8);
        if (IR_Input)
        { // 采樣是1
        SAA3010_CODE[0] |=0x01;
        FBIT = 1;
        }
        else
        { // 采樣是0
        FBIT = 0;
        }
        if (FBIT)
        { // 若第一次采樣是1
        while (IR_Input);
        }
        else
        {
        while (!IR_Input);
        }
        // 二次采樣
        Delay100us(8);
        //----------------------------------------------------------------------------
        // 采樣控制位
        // 一次采樣
        Delay100us(8);
        if (IR_Input)
        {
        SAA3010_CODE[1] |=0x01;
        FBIT = 1;
        }
        else
        {
        FBIT = 0;
        }

        if (FBIT)
        {
        while (IR_Input);
        }
        else
        {
        while (!IR_Input); // 等待IR_Input上升
        }
        // 二次采樣
        Delay100us(8);
        //----------------------------------------------------------------------------------
        // 收集系統(tǒng)碼(5位)
        for (j=0; j<5; j++)
        {
        // 一次采樣
        Delay100us(8);
        if (IR_Input)
        {
        SAA3010_CODE[2] |=0x01;
        FBIT = 1;
        }
        else
        {
        FBIT = 0;
        }

        if (FBIT)
        {
        while (IR_Input);
        }
        else
        {
        while (!IR_Input);
        }
        // 二次采樣
        Delay100us(8);
        SAA3010_CODE[2] <<= 1;
        }

        //-----------------------------------------------------------------------------

        // 收集數(shù)據(jù)碼(6位)
        for (j=0; j<6; j++)
        {
        // 一次采樣
        Delay100us(8);
        if (IR_Input)
        {
        SAA3010_CODE[3] |=0x01;
        FBIT = 1;
        }
        else
        {
        FBIT = 0;
        }

        if (FBIT)
        {
        while (IR_Input);
        }
        else
        {
        while (!IR_Input);
        }
        // 二次采樣
        Delay100us(8);
        SAA3010_CODE[3] <<= 1;
        }
        //-----------------------------------------------------------------------------
        }
        else
        { // 是抖動(dòng)
        for (i=0; i<4; i++)
        {
        SAA3010_CODE[i] =0x00;
        }

        return;
        }

        SAA3010_CODE[3]>>= 1;//09.2.4
        }

        /************760us延時(shí)程序********************/
        void Delay100us(uchar i)
        {
        uchar j;
        while(i<50)//50
        {
        for(j=0;j<50;j++)
        { _nop_();}
        i++;
        }
        }

        /******************************************************/
        #endif



        關(guān)鍵詞: STC12C5410AD紅外解

        評(píng)論


        技術(shù)專(zhuān)區(qū)

        關(guān)閉
        ×

        “芯”朋友见面大会
        珠海|11.14|泰克“芯”朋友见面大会珠海站|泰克带您从测试角度看半导体的整条产业链,快来报名抢位吧>>