久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 3121|回復(fù): 2
收起左側(cè)

在紅外NEC子程序基礎(chǔ)上如何寫出,寫出控制51單片LED的程序?

[復(fù)制鏈接]
ID:102056 發(fā)表于 2016-11-15 11:30 | 顯示全部樓層 |閱讀模式
//*********************【 NEC解碼頭文件 】*******************
//
//     簡(jiǎn)介:本程序適用于NCE解碼:(9ms+4.5ms)引導(dǎo)碼+32位編碼。
//           兼容STC所有型號(hào)(包括 1T 和 12T 系列),可以定義任意I/O作紅外接收腳,
//                         自適應(yīng)解碼主頻:6MHz ~ 40MHz。
//
// 使用條件:占用系統(tǒng)定時(shí)器0,開啟定時(shí)器0中斷(如使用其它定時(shí)器請(qǐng)自改IR_Init();初始化函數(shù))
//
// 使用說明:填相關(guān)宏定義:USER_H、USER_L、Check_EN、CPU_Fosc、IR,
//           上電初始化函數(shù)IR_Init(),
//           在定時(shí)器0中斷中調(diào)用IR_NEC()解碼函數(shù),
//           解碼有效時(shí),IR_BT=2即短按,IR_BT=3即長(zhǎng)按,由用戶清0,
//           解碼存放:用戶碼高8位NEC[0],用戶碼低8位NEC[1],操作碼NEC[2],操作碼反碼NEC[3]。
//
//【供用戶調(diào)用的函數(shù)】
//    IR_Init();                         //接收初始化,開啟定時(shí)器0中斷400us
//    IR_NEC();                             //紅外線解碼(解NEC編碼)
//          
//***************************************************************/
#ifndef __IR_NEC_H__
#define __IR_NEC_H__




//【用戶必填項(xiàng):USER_H、USER_L、Check_EN、CPU_Fosc、IR】
#define  USER_H     0x80                         //用戶碼高8位
#define  USER_L     0x7F                         //用戶碼低8位
#define  Check_EN   0                             //是否要校驗(yàn)16位用戶碼:不校驗(yàn)填0,校驗(yàn)則填1       
#define  CPU_Fosc   12000000             //輸入主頻,自適應(yīng)解碼(單位:Hz,范圍:6MHz ~ 40MHz)
#define  CA_S       8                             //長(zhǎng)按時(shí)間設(shè)置,單位:108mS(即 108mS整數(shù)倍,10倍以上為宜)


sbit IR = P3^2;                                  //紅外線接口(任意引腳)


#define  Step       400                             //紅外采樣步長(zhǎng):400us
#define  TH_H       ((65536-Step*(CPU_Fosc/300)/40000)/256)  //定時(shí)器高8位基準(zhǔn)賦值
#define  TH_L       ((65536-Step*(CPU_Fosc/300)/40000)%256)  //定時(shí)器低8位基準(zhǔn)賦值


uint8   IR_BT;                         //解碼效果返回:0無(wú)效,1有效,2短按,3長(zhǎng)按
uint8   NEC[4];                         //解碼存放:16位用戶碼、操作碼正反碼
uint8   cntCA;                         //長(zhǎng)按計(jì)數(shù)
uint16  cntStep;                         //步數(shù)計(jì)
bit     IRa,IRb;                         //電位狀態(tài)保存
bit     IRsync;                                 //同步標(biāo)志
uint8   BitN;                //位碼裝載數(shù)




/*┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈
函數(shù):紅外線解碼初始化
┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈*/
void IR_Init()
{
        TMOD &= 0xF0;           //清定時(shí)器0
        TMOD |= 0x01;           //定時(shí)器0:16位定時(shí)器
        TL0 = TH_L;               //每步時(shí)間
        TH0 = TH_H;
        ET0 = 1;
        EA  = 1;
        TR0 = 1;
}


/*┈┈┈┈┈┈┈┈┈┈ 基準(zhǔn) ┈┈┈┈┈┈┈┈┈┈┈*/
#define    Boot_Limit            (((9000+4500) +2000)/Step)          //引導(dǎo)碼周期上限   
#define    Boot_Lower            (((9000+4500) -2000)/Step)          //引導(dǎo)碼周期下限   
#define    Bit1_Limit       ((2250 +800)/Step)                  //“1”周期上限
#define    Bit0_Limit       ((1125 +400)/Step)                          //“0”周期上限
/*┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈
函數(shù):紅外線NEC周期采樣解碼法(定時(shí)中斷,下降沿查詢周期時(shí)間)
全局變量:IR_BT = 0無(wú)效
                  1有效,待繼續(xù)判斷長(zhǎng)、短按(如不需要判斷長(zhǎng)、短按,則直接使用)
                              2短按
                              3長(zhǎng)按
┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈*/
void IR_NEC()
{          
        TL0 = TH_L;               //重賦值
        TH0 = TH_H;       


        cntStep++;                   //步數(shù)采樣
        if(IR_BT==1)if(cntStep>300)IR_BT=2;//解碼有效后,如果無(wú)長(zhǎng)按,120ms(400us×300)后默認(rèn)短按


        IRb = IRa;                   //上次電位狀態(tài)
        IRa = IR;                   //當(dāng)前電位狀態(tài)
       
        if(IRb && !IRa)                                            //是否下降沿(上次高,當(dāng)前低)
        {
                if(cntStep > Boot_Limit)      //超過同步時(shí)間?
                {       
                    if(IR_BT==1)if(++cntCA>CA_S)IR_BT=3; //解碼有效后,繼續(xù)按住遙控>CA_S即長(zhǎng)按
                        IRsync=0;                                  //同步位清0
                }
                else if(cntStep > Boot_Lower){ IRsync=1; BitN=32; }//同步位置1,裝載位碼數(shù)                          
                else if(IRsync)                                                       //如果已同步
                {
                        if(cntStep > Bit1_Limit)IRsync=0;                   
                        else
                        {       
                                NEC[3] >>= 1;                               
                                if(cntStep > Bit0_Limit)NEC[3] |= 0x80;    //“0”與“1”
                if(--BitN == 0)                               
                                {
                                        IRsync = 0;                                     //同步位清0
                            #if (Check_EN == 1)                                       
                                        if((NEC[0]==USER_H)&&(NEC[1]==USER_L)&&(NEC[2]==~NEC[3])) //校驗(yàn)16位用戶碼、操作碼正反碼
                                         {  IR_BT=1; cntCA=0;  }             //解碼有效,接下來判斷:短按?長(zhǎng)按?
                                        #else
                                        if(NEC[2]==~NEC[3]){ IR_BT=1; cntCA=0; } //校驗(yàn)操作碼正反碼
                                        #endif                                       
                                }
                                else if((BitN & 0x07)== 0)       //NEC[3]每裝滿8位,移動(dòng)保存一次(即 BitN%8 == 0)
                                {        NEC[0]=NEC[1]; NEC[1]=NEC[2]; NEC[2]=NEC[3];   }
                        }
                }
                cntStep = 0;   //步數(shù)計(jì)清0
        }
}


//取消相關(guān)宏定義
#undef CPU_Fosc


#endif

相關(guān)帖子

回復(fù)

使用道具 舉報(bào)

ID:81808 發(fā)表于 2016-11-15 23:20 | 顯示全部樓層
紅外接收與數(shù)碼管顯示應(yīng)該是2個(gè)不同的函數(shù),自己寫一個(gè)顯示程序,讀取接收的變量,直接工作即可啊!
回復(fù)

使用道具 舉報(bào)

ID:102056 發(fā)表于 2016-11-15 23:36 來自觸屏版 | 顯示全部樓層
yanjibao 發(fā)表于 2016-11-15 23:20
紅外接收與數(shù)碼管顯示應(yīng)該是2個(gè)不同的函數(shù),自己寫一個(gè)顯示程序,讀取接收的變量,直接工作即可啊!

我現(xiàn)在只想弄得如何控制LED,還不想先控制數(shù)碼管顯示,我真的不是很清楚該取紅外什么值去控制LED。那個(gè)變量該如何取,經(jīng)過怎樣處理去控制LED。
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 日本爱爱视频 | 国产综合精品一区二区三区 | av中文在线播放 | 欧美日韩国产传媒 | 日本亚洲精品 | 久久综合伊人 | 国产精品久久久亚洲 | 精品电影 | 日本精a在线观看 | 午夜寂寞网站 | 久久精品免费观看 | 色黄视频在线 | 亚洲一区二区在线 | 色综合av | 91精品久久久久久久久久入口 | 久热电影 | 一区二区三区免费 | 欧美日韩在线一区二区三区 | 国产一区二区三区视频在线观看 | 亚洲午夜在线 | 三级视频国产 | 日本91av视频| 亚洲国产精选 | 久久免费观看视频 | 97久久国产| 手机看片在线播放 | 精久久久 | 欧美男人的天堂 | 日韩免费视频一区二区 | 免费一二区 | 欧美成人精品欧美一级 | 99视频免费播放 | 91香蕉视频在线观看 | 国产视频亚洲视频 | 精品国产91 | 中文字幕在线观看第一页 | 涩涩视频在线观看 | 久久久久国产一区二区三区四区 | 亚洲激情在线 | 五月婷婷 六月丁香 | 一区二区三区电影网 |