新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > SAA3010紅外遙控接收的C程序源代碼

        SAA3010紅外遙控接收的C程序源代碼

        作者: 時間:2011-05-05 來源:網絡 收藏

        的C

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

        // 用單片機進行已經是很平常的應用了,基本上稍懂單片機就可以自己編//
        // 但往往很多人編的要么繁瑣,要么占用大量存儲器、CPU資源, //
        // 而且用于現場時還可能因為受到干擾而不能正常工作 //
        // 真正試過的都會發現,要想編個真正好用的不是那么簡單的 //

        // 其實,所有芯片的編碼都是比較簡單的(有限的狀態),只要仔細分析它的編碼//
        // 我們完全可以用狀態機的方式來處理各種可能的情況,甚至從被干擾的雜亂波形中找出正確的編碼//
        // 下面是基于狀態機的遙控接收程序示例: //
        //--------------------------------------------------------------------------//
        // //
        // (c) Copyright 2001-2003 xuwenjun //
        // All Rights Reserved //
        // V1.00 //
        //--------------------------------------------------------------------------//
        //標 題: 遙控芯片接收程序 //
        //文件名: ir_3010.c //
        //版 本: V1.00 //
        //修改人: xuwenjun E-mail:xuwenjun@21cn.com //
        //日 期: 03-06-14 //
        //描 述: SAA3010遙控芯片接收程序 //
        //--------------------------------------------------------------------------//
        //老版本: 無 老版本文件名: //
        //創建人: xuwenjun E-mail:xuwenjun@21cn.com //
        //日 期: 03-06-14 //
        //描 述: SAA3010遙控芯片接收程序 //
        // 當ykok=1時,ykcode中的數據就是接收到的遙控碼(14位的最后8位) //
        //--------------------------------------------------------------------------//
        //占用以下資源: //
        // 1. 遙控使用外部中斷0,接P3.2口 //
        // 2. 遙控使用定時計數器1 //
        // 3. 5.1字節data RAM //
        // 4. 293字節 code ROM //
        //--------------------------------------------------------------------------//
        //聲 明: //
        // 以下代碼僅免費提供給學習用途,但引用或修改后必須在文件中聲明出處. //
        // 如用于商業用途請與作者聯系. E-mail:xuwenjun@21cn.com //
        // 有問題請mailto xuwenjun@21cn.com 歡迎與我交流! //
        //--------------------------------------------------------------------------//

        #i nclude reg52.h>
        #define uchar unsigned char

        // SAA3010存儲定義
        uchar ykcode; //遙控碼(14位的最后8位)
        bit ykok; //遙控數據有效標志

        uchar ykbnum; //遙控已接收位數
        uchar ykbtc; //遙控中斷時 ykbtc=TH1
        uchar ykdelay; //遙控延時接收
        bdata uchar ykcodetemp; //遙控臨時碼
        sbit ykcodetemp0=ykcodetemp^0;


        // SAA3010端口定義
        //sbit YKIO=P3^3; //遙控使用外部中斷0,接P3.2口

        // SAA3010函數原型: 公用函數
        void YkInit(void); //遙控接收初始化
        unsigned char YkGetcode(void); //返回遙控碼
        bit YkTest(void); //檢查有無遙控信號

        /*
        // SAA3010函數原型: 公用函數
        extern void YkInit(void); //遙控接收初始化
        extern unsigned char YkGetcode(void); //返回遙控碼
        extern bit YkTest(void); //檢查有無遙控信號
        */

        /*
        // 外部引用四位LED顯示模塊 //
        extern unsigned char code tab_duam[]; //位映射
        extern void led_send(unsigned char d); //發送子程序
        extern void led_cls(void); //清除顯示
        extern void led_show(unsigned int n); //顯示數字子程序
        extern void led_showhh(unsigned int n); //16進制顯示數字子程序
        extern void led_test(void); //4LED測試函數
        extern void led_delay(unsigned char ms); //延遲函數
        */

        // SAA3010函數內容
        void YkInit(void) //遙控接收初始化
        {
        TMOD=0x11; //TMOD T0,T1均選用方式1(16位定時)
        SCON=0x00;
        TH1=0;
        TL1=0;
        IE|=0x89; //SETB EX0 0x1 外部中斷 0 允許
        //SETB ET0 0x8 定時器 1 中斷允許
        //SETB EA 0x80 開中斷
        IP|=0x01; //SETB INT0 中斷優先
        TCON |= 0x41; //TCON EX0下降沿觸發,啟動T1 //
        ykbnum=0;
        ykcodetemp=0;
        ykdelay=0;

        }

        unsigned char YkGetcode(void) //返回遙控碼
        {
        return(ykcode);
        }

        bit YkTest(void) //檢查有無遙控信號
        {
        return(ykok);
        }


        上一頁 1 2 下一頁

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 临猗县| 读书| 南阳市| 曲阳县| 定州市| 花垣县| 黄大仙区| 汪清县| 广安市| 贵港市| 宁晋县| 夏邑县| 惠东县| 阳春市| 韶山市| 五莲县| 莱州市| 衡东县| 梅河口市| 五大连池市| 鹤壁市| 嘉善县| 九江市| 扎兰屯市| 武平县| 西吉县| 遂宁市| 五寨县| 通江县| 厦门市| 府谷县| 云霄县| 本溪市| 镇安县| 台安县| 衢州市| 尤溪县| 咸丰县| 永胜县| 富宁县| 广南县|