新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 通過串口發送紅外遙控器的解碼值到PC

        通過串口發送紅外遙控器的解碼值到PC

        作者: 時間:2016-12-02 來源:網絡 收藏
        /**

        *************************************************************************
        * @file main.c
        * @author xr
        * @date 2014年3月31日22:30:08
        * @version V1.2.3
        * @brief 串口通信+紅外通信 通過串口發送紅外遙控器的解碼值到PC
        * @note單片機STC89C52RC MCU晶振11.0592MHZ
        *************************************************************************
        */

        本文引用地址:http://www.104case.com/article/201612/324709.htm

        #include

        void ConfigUart();
        void UartSend(unsigned char dat);
        void delayms(unsigned int xms);
        extern bit irflag;
        extern unsigned char ircode[4];
        extern void ConfigInfrared();

        void main()
        {
        ConfigUart();
        ConfigInfrared();

        while (1)
        {
        if (irflag) //接收到紅外數據
        {
        irflag = 0;
        UartSend(ircode[0]); //發送用戶碼
        delayms(100);//延時100ms
        UartSend(ircode[2]); //發送鍵碼
        }
        }
        }

        /**
        * @brief 延時xms
        * @param xms
        * @retval 無
        */
        void delayms(unsigned int xms)
        {
        unsigned int x, y;

        for (x = 0; x < xms; x++)
        for (y = 0; y < 110; y++);
        }

        /**
        * @brief 配置串口通信
        * @param 無
        * @retval 無
        */
        void ConfigUart()
        {
        TMOD &= 0x0F;//清零T1控制位
        TMOD |= 0x20;//T1方式2,八位自動重裝模式
        TH1 = 0xFD; //波特率 = 256-1/2^SMOD*T1溢出率 X=256-11059200/12/32/波特率
        TL1 = TH1;//波特率9600bps
        TR1 = 1;
        ET1 = 0;//只用T1的計數
        SCON |= 0x50;//串口方式1 SM0 SM1 SM2 REN TB8 RB8 TI RI 0101 0000
        /*
        SM0 = 0;
        SM1 = 1;//方式1 SM2多機通信位
        REN = 1;//允許接收數據
        TI = 0;//發送完成中斷標志
        RI = 0;//接收完成中斷標志
        */
        ES = 1;//開串口中斷
        EA = 1;//開總中斷
        }

        /**
        * @brief 串口發送一個字節數據到PC
        * @param 待發送數據
        * @retval 無
        */
        void UartSend(unsigned char dat)
        {
        SBUF = dat;
        //while (!TI);//等待發送完成,在中斷模式下不需要等待,否則進不了中斷
        }

        /**
        * @brief 串口中斷
        * @param 無
        * @retval 無
        */
        void Uart_ISP() interrupt 4 //串口中斷標號是4
        {
        if (TI) //等待發送完成
        { //發送完成
        TI = 0;//清零
        }
        }


        /**
        **************************************************************
        * @file infrared.c
        * @author xr
        * @date 2014年3月31日20:51:23
        * @version V1.2.3
        * @brief 紅外通信--紅外遙控器NEC協議解碼
        * @note單片機STC89C52RC MCU晶振11.0592MHZ
        **************************************************************
        */


        上一頁 1 2 下一頁

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 彭水| 册亨县| 吉林省| 乐至县| 古丈县| 开阳县| 榆社县| 柏乡县| 盐亭县| 永胜县| 吉木乃县| 聂荣县| 亚东县| 康马县| 防城港市| 天津市| 北安市| 化隆| 太保市| 信宜市| 白山市| 宁南县| 长乐市| 林芝县| 福建省| 景宁| 常宁市| 津南区| 新泰市| 广南县| 特克斯县| 文登市| 普宁市| 伊吾县| 罗山县| 德保县| 凭祥市| 平果县| 揭东县| 镇坪县| 尼木县|