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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

51單片機(jī)NEC解碼頭文件irnec.h源程序

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

  20. #define  USER_H     0x01         //用戶碼高8位
  21. #define  USER_L     0xFB         //用戶碼低8位
  22. #define  Check_EN   0            //是否要校驗(yàn)16位用戶碼:不校驗(yàn)填0,校驗(yàn)則填1      
  23. #define  CPU_Fosc   12000000L    //輸入主頻,自適應(yīng)解碼(單位:Hz,范圍:6MHz ~ 40MHz)
  24. #define  CA_S       8            //長按時(shí)間設(shè)置,單位:108mS(即 108mS整數(shù)倍,10倍以上為宜)

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

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

  29. unsigned char IR_BT;     //解碼效果返回:0無效,1有效,2短按,3長按
  30. unsigned char NEC[4];    //解碼存放:16位用戶碼、操作碼正反碼
  31. unsigned char cntCA;     //長按計(jì)數(shù)
  32. unsigned int  cntStep;   //步數(shù)計(jì)
  33. bit                          IRa,IRb;   //接收腳電位狀態(tài)保存
  34. bit                          IRsync;    //同步標(biāo)志
  35. unsigned char BitN;      //位碼裝載數(shù)

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

  52.    cntStep++;    //步數(shù)累加
  53.    if(IR_BT==1)if(cntStep>300)IR_BT=2; //解碼有效后,如果無長按,120ms(400us×300)后默認(rèn)短按

  54.    IRb = IRa;    //保存上次電位狀態(tài)
  55.    IRa = IR;     //保存當(dāng)前電位狀態(tài)
  56.       
  57.    if(IRb && !IRa)    //是否下降沿(上次高,當(dāng)前低)
  58.    {
  59.       if(cntStep > Boot_Limit)   //超過同步時(shí)間?
  60.       {      
  61.           if(IR_BT==1)if(++cntCA>CA_S)IR_BT=3; //解碼有效后,繼續(xù)按住遙控>CA_S即長按
  62.           IRsync=0;                            //同步位清0
  63.       }
  64.       else if(cntStep > Boot_Lower){ IRsync=1; BitN=32; }   //同步位置1,裝載位碼數(shù)32                          
  65.       else if(IRsync)            //如果已同步
  66.       {
  67.          if(cntStep > Bit1_Limit)IRsync=0;                  
  68.          else
  69.          {      
  70.             NEC[3] >>= 1;                              
  71.             if(cntStep > Bit0_Limit)NEC[3] |= 0x80;    //“0”與“1”
  72.             if(--BitN == 0)                              
  73.             {
  74.                IRsync = 0;    //同步位清0

  75.                #if (Check_EN == 1)                                       
  76.                if((NEC[0]==USER_H)&&(NEC[1]==USER_L)&&(NEC[2]==~NEC[3]))    //校驗(yàn)16位用戶碼、操作碼正反碼
  77.                {  IR_BT=1; cntCA=0;  }     //解碼有效,接下來判斷:短按?長按?
  78.                #else
  79.                if(NEC[2]==~NEC[3]){ IR_BT=1; cntCA=0; }  //只校驗(yàn)操作碼正反碼
  80.                #endif                                       
  81.             }
  82.             else if((BitN & 0x07)== 0)    //NEC[3]每裝滿8位,移動(dòng)保存一次(即 BitN%8 == 0)
  83.             {   NEC[0]=NEC[1]; NEC[1]=NEC[2]; NEC[2]=NEC[3];   }
  84.          }
  85.       }
  86.       cntStep = 0;   //步數(shù)計(jì)清0
  87.    }
  88. }
復(fù)制代碼

頭文件使用方法詳見:http://www.zg4o1577.cn/bbs/dpj-218217-1.html
回復(fù)

使用道具 舉報(bào)

ID:624476 發(fā)表于 2022-3-25 14:02 | 顯示全部樓層
樓主你這代碼中沒有判斷長按松開。
回復(fù)

使用道具 舉報(bào)

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 精国产品一区二区三区四季综 | 亚洲综合在线网 | 日韩不卡视频在线观看 | 亚洲欧美精品国产一级在线 | 91精品久久久久久久久中文字幕 | 91精品一区二区三区久久久久久 | 国产精品亚洲一区二区三区在线 | 久久久国产一区 | 欧美日韩高清在线观看 | 亚洲性在线 | 99久久久国产精品 | 一区二区三区在线 | 女生羞羞网站 | 黄色片网此| 黑人中文字幕一区二区三区 | 欧美精品tv | 亚洲成人一二区 | 一本久久a久久精品亚洲 | 精品国产一区二区三区久久久蜜月 | 亚洲黄色成人网 | www视频在线观看 | 五月婷婷视频 | 国产精品视频一区二区三区 | 日本五月婷婷 | 欧美精品中文字幕久久二区 | 国内精品久久久久久影视8 最新黄色在线观看 | 看羞羞视频免费 | 国产精品视频久久久 | 免费福利视频一区二区三区 | 免费成人高清在线视频 | 日韩在线中文 | 国产激情视频 | 精品久久久久久久久久久久久 | 在线三级网址 | 亚洲欧洲精品一区 | 91av在线免费观看 | 三级在线观看 | 日本三级网址 | 国产成人精品一区二区三 | 一区二区三区在线 | av在线播放不卡 |