在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,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首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > AVR單片機(jī)紅外解碼程序

        AVR單片機(jī)紅外解碼程序

        作者: 時間:2016-11-10 來源:網(wǎng)絡(luò) 收藏
        在網(wǎng)絡(luò)上基本上沒有avr的紅外遙控解碼函數(shù),有的也不是ICC的。為了大家的需要,我特地把自己項(xiàng)目需要的紅外解碼函數(shù)發(fā)上博客,希望對需要的人有所幫助。本解碼方法是偉納電子51單片機(jī)的解碼方法,算是移植吧,應(yīng)用的是掃描方式,需要的可以加上外中斷,用中斷方式反應(yīng)會更快,更實(shí)時。本解碼程序的關(guān)鍵在于延時函數(shù),如果要移植到別的單片機(jī)或別的晶振時,一定要把延時調(diào)好。

        頭文件:

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

        /******************************************
        * 程序名稱: 遙控接收程序
        * 程序功能: 遙控操作
        * 目標(biāo)硬件: AVR MCU "ATMEGA128" 16.0000MHz
        * 文件名稱:telecontrol.c
        * 創(chuàng)建日期: 2009-02
        * 原創(chuàng)作者: zhaojun
        ******************************************/
        #ifndef TELECONTROL_H
        #define TELECONTROL_H

        // ************** 管腳定義

        #define IR 5
        #define IN_IR (PINE&(1<#define SET_IR_IN (DDRE &= ~(1<#define SET_IR_PORT (PORTE |= (1<

        // ************* 函數(shù)申明

        extern void IRInit(void); // 初始化紅外端口
        extern void IR_decode(void); // 紅外解碼函數(shù)

        // ************* 全局變量申明

        extern uint8 IRCOM[4]; // 紅外編碼暫存

        #endif

        C文件:

        /******************************************
        * 程序名稱: 遙控接收程序
        * 程序功能: 遙控操作
        * 目標(biāo)硬件: AVR MCU "ATMEGA128" 16.0000MHz
        * 文件名稱:telecontrol.c
        * 創(chuàng)建日期: 2009-02
        * 原創(chuàng)作者: zhaojun
        ******************************************/

        #include "..SOURCEconfig.h"

        uint8 IRCOM[4]; // IRCOM[0]和IRCOM[1]存放用戶編碼;IRCOM[2]鍵值碼暫存
        // IRCOM[3]鍵值反碼存放.

        /*****************************************************
        函 數(shù) 名:void IRInit(void)
        功 能:紅外引腳初始化
        說 明:無
        入口參數(shù):無
        返 回 值:無
        *****************************************************/
        void IRInit(void)
        {
        SET_IR_IN; // 設(shè)置端口為輸入
        SET_IR_PORT; // 開上拉電阻
        }

        /*****************************************************
        函 數(shù) 名:void IR_decode(void)
        功 能:紅外解碼函數(shù)
        說 明:利用普通端口解碼
        入口參數(shù):無
        返 回 值:無
        *****************************************************/
        void IR_decode(void)
        {
        uint8 i,j,k,num = 0;

        do // 讀引導(dǎo)碼
        {
        for (i=0; i<4; i++)
        {
        if (!IN_IR) break;
        if (i == 3)
        {
        return;
        }
        }
        DelayIR(20);
        }while (IN_IR);

        while(!IN_IR){DelayIR(1);} // 等IR變?yōu)楦唠娖?br />
        // 讀4字節(jié)按鍵編碼 = 16位的用戶碼+8位鍵值碼+8位鍵值反碼
        for (j=0; j<4; j++)
        { // 解碼原理:0=0.8ms的低電平+0.4ms的高電平;1=0.8ms的低電平+1.6ms的高電平
        for (k=0; k<8; k++) // 8位一接收
        {
        while (IN_IR){DelayIR(1);} // 等 IR 變?yōu)榈碗娖?br /> while (!IN_IR){DelayIR(1);} // 等 IR 變?yōu)楦唠娖?
        while (IN_IR) // 計(jì)算IR高電平時長
        {
        DelayIR(1);
        num++;
        if (num >= 30)
        {
        return;
        }
        }

        IRCOM[j] >>= 1; // 接收數(shù)據(jù)右移一位
        if (num >= 8)
        {
        IRCOM[j] |= 0x80; // 電平長度大于等于8,則寫入高電平
        }
        num = 0;

        } // 讀完一字節(jié)
        } // 按鍵4字節(jié)讀完
        // 接收數(shù)據(jù)檢測
        if (IRCOM[2] !=~ IRCOM[3]) // 8位鍵碼!=8位鍵反碼:按鍵錯誤
        {
        return;
        }
        Ringing(1,100,50); // 蜂鳴器響1聲
        }

        /********************************************************************
        End Of File
        ********************************************************************/

        延時函數(shù):

        /*****************************************************
        函 數(shù) 名:void DelayIR()
        功 能:紅外解碼延時函數(shù)
        說 明:0.14MS延時函數(shù)
        入口參數(shù):tt
        返 回 值:無
        *****************************************************/
        void DelayIR(uint8 tt)
        {
        uint16 i;

        while(tt--)
        {
        for (i=315; i>0; i--)
        {
        asm(" nop");
        }
        }
        }



        評論


        技術(shù)專區(qū)

        關(guān)閉
        ×

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