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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3348|回復: 1
收起左側

STC89C52單片機EV1527/PT2262無線遙控接受解碼程序

[復制鏈接]
ID:1066697 發表于 2023-3-15 17:08 | 顯示全部樓層 |閱讀模式
EV1527 / PT2262學習型接收解碼    315或433M頻率

單片機源程序如下:
  1. /****************************************************************
  2. * 作者    :maigaokai
  3. *************************************************************/


  4. /*
  5. 1、EV1527/PT2262 按鍵解碼輸出,并有解碼有效輸出端。

  6. 2、程序采用中斷嵌套結構,定時時間準確,可輕松集成到您現有程序中,解碼精度不受其他程序塊影響。

  7. 3、通過學習鍵可學習40個遙控器編碼,使用芯片自帶EEPROM,無需外掛存儲。

  8. 4、提供keil5 c代碼,有詳細注釋,提供網絡技術支持。

  9. 該源碼適合初學者研究,或想在原有產品中增加功能又缺乏此類經驗的朋友。


  10. !!!按一下學習鍵指示燈亮一下滅,松開,再按一下遙控器,學習指示燈閃一下,表示學習成功
  11. 學習成功后,才能接收此遙控器的數據,否則沒反應!!!

  12. !!!按下學習按鍵6秒之內松開,超過6秒后無效并清除以前存儲的遙控器數據
  13. */






  14. #include "main.h"


  15. bit old_bit;           //保存上一次查詢到的電平狀態
  16. bit tb_ok;             //接收到同步的馬時置1   
  17. bit rf_ok;            //接收到一個完整的遙控命令后置1,通知解碼程序可以解碼了
  18. bit study;                  //進入學習狀態標志   
  19. bit rf_ok1,rf_ok2;        //接收成功臨時標志



  20. uchar  hh_w,ll_w;           //高,低電平寬度
  21. uchar  ma_n;                //接收到第幾位編碼了
  22. uchar  bma1,bma2,bma3,bma4; //用于接收過程存放遙控編碼
  23. uchar  mma1,mma2,mma3,mma4; //第一次接收到的編碼,用于解碼過程
  24. uchar  mmb1,mmb2,mmb3,mmb4; //第二次接收到的編碼


  25. uchar temp_T0;                        //t初值


  26. uint s_tim;                //定時






  27. #if 1

  28. void rx_data()
  29.    {          
  30.      uchar x;   

  31.      
  32.                      
  33.           TMR0=100;
  34.           TMR00;
  35.                   
  36.                        

  37.                 




  38.    
  39.      if (!RF) { ll_w++;old_bit=0; }  // 檢測到低電平 低電平時間加1,記錄本次電平狀態  old_rc5=保存上一次查詢到的電平狀態
  40.      
  41.      
  42.      

  43.      else        // 檢測到高電平
  44.        {
  45.          

  46.          
  47.                hh_w++;//記錄高電平時間
  48.          
  49.          if (!old_bit)// 檢測到從低到高的跳變,已檢測到一個完整(高-低)電平周期
  50.           {
  51.       
  52.             
  53.            
  54.             
  55.            if (((hh_w>=2)&&(hh_w<=7))&&((ll_w>=50)&&(ll_w<=180)))          //判同步碼          
  56.                {                                                       //下面是同步碼低電平判斷
  57.                                     if((ll_w>=100)&&(ll_w<=180))//PT2262=4.7M電阻,EV1527=390K
  58.                     {ma_n=0;tb_ok=1;bma1=0; bma2=0; bma3=0; bma4=0;
  59.                     }

  60.                     
  61.                 }

  62.                
  63.                
  64.            else if ((tb_ok)&&((ll_w>=10)&&(ll_w<=16)))         //數據低電平   
  65.                                          {        
  66.                                                  ma_n++;                                //已經接收到同步碼,判為0
  67.                                                  if(ma_n>23)
  68.                                                          {
  69.                                                            if(!rf_ok1)
  70.                                                                    {
  71.                                                                    mma1=bma1;mma2=bma2;mma3=bma3;mma4=bma4;//將接收到的編碼復制到解碼寄存器中                             
  72.                                        rf_ok1=1;
  73.                                        ma_n=0;                           
  74.                                        tb_ok=0;
  75.                                                                    s_tim=2500;                                                   
  76.                                                                    }
  77.                                                                 else
  78.                                                                         {
  79.                                                                          mmb1=bma1;mmb2=bma2;mmb3=bma3;mmb4=bma4;//將接收到的編碼復制到解碼寄存器中                             
  80.                                          rf_ok2=1;
  81.                                          ma_n=0;                              
  82.                                          tb_ok=0;                                                                                                                                               
  83.                                                                         }
  84.                                                                
  85.                                                          }
  86.                                           }  
  87.                  
  88.                   
  89.                   
  90.                   
  91.             else if ((tb_ok)&&((ll_w>=3)&&(ll_w<=6)))                   //數據高電平   
  92.                  { switch (ma_n)
  93.                      {
  94.                                           case 0 : { bma1=bma1 | 0x80; break; }//遙控地址編碼第1位
  95.                        case 1 : { bma1=bma1 | 0x40; break; }
  96.                        case 2 : { bma1=bma1 | 0x20; break; }
  97.                        case 3 : { bma1=bma1 | 0x10; break; }
  98.                        case 4 : { bma1=bma1 | 0x08; break; }
  99.                        case 5 : { bma1=bma1 | 0x04; break; }
  100.                        case 6 : { bma1=bma1 | 0x02; break; }
  101.                        case 7 : { bma1=bma1 | 0x01; break; }

  102.                        case 8 : { bma2=bma2 | 0x80; break; }
  103.                        case 9 : { bma2=bma2 | 0x40; break; }
  104.                        case 10: { bma2=bma2 | 0x20; break; }
  105.                        case 11: { bma2=bma2 | 0x10; break; }
  106.                        case 12: { bma2=bma2 | 0x08; break; }
  107.                        case 13: { bma2=bma2 | 0x04; break; }
  108.                        case 14: { bma2=bma2 | 0x02; break; }
  109.                        case 15: { bma2=bma2 | 0x01; break; }

  110.                        case 16: { bma3=bma3 | 0x80; break; }//2262按鍵碼第1位
  111.                        case 17: { bma3=bma3 | 0x40; break; }
  112.                        case 18: { bma3=bma3 | 0x20; break; }
  113.                        case 19: { bma3=bma3 | 0x10; break; }
  114.                        case 20: { bma4=bma4 | 0x80; break; }//1527按鍵碼第1位
  115.                        case 21: { bma4=bma4 | 0x40; break; }
  116.                        case 22: { bma4=bma4 | 0x20; break; }
  117.                        case 23:
  118.                            { bma4=bma4 | 0x10;                                          
  119.                                           if(!rf_ok1)
  120.                                                    {
  121.                                                   mma1=bma1;mma2=bma2;mma3=bma3;mma4=bma4;//將接收到的編碼復制到解碼寄存器中                             
  122.                                       rf_ok1=1;                                
  123.                                       tb_ok=0;
  124.                                                   ma_n=0;
  125.                                                   s_tim=2500;
  126.                                                   break;                                                                       
  127.                                                   }
  128.                                                  else
  129.                                                       {
  130.                                                        mmb1=bma1;mmb2=bma2;mmb3=bma3;mmb4=bma4;//將再次接收到的編碼復制到解碼寄存器中,                             
  131.                                        rf_ok2=1;                                
  132.                                        tb_ok=0;
  133.                                                        ma_n=0;
  134.                                                        break;                                                                                                                                                       
  135.                                                        }
  136.                                    
  137.                             }
  138.                      }
  139.                     ma_n++;
  140.                                        
  141.                   }
  142.                  
  143.                   
  144.             else {ma_n=0; tb_ok=0;bma1=0; bma2=0; bma3=0; bma4=0;hh_w=1;ll_w=0;}      //接收到不符合的高-低電平序列
  145.               
  146.                    ll_w=0;hh_w=1;
  147.                            }
  148.          
  149.          
  150.         old_bit=1;      // 記錄本次電平狀態
  151.      }
  152.   
  153.      
  154.      
  155.      
  156.      

  157.          if(rf_ok1)                //規定時間內接受到2幀相同的編碼數據才有效
  158.                 {       
  159.       
  160.    
  161.       
  162.                         s_tim--;
  163.                         if(!s_tim) rf_ok1=0;
  164.                         if(rf_ok2)
  165.                                 {
  166.         

  167.          
  168.                                   if((mma1==mmb1)&&(mma2==mmb2)&&(mma3==mmb3)&&(mma4==mmb4))//比較兩次接收到的編碼是否一致 OK
  169.                                            {
  170.                                           
  171.                                           rf_ok=1;
  172.                                           rf_ok1=0;
  173.                                           rf_ok2=0;                                         
  174.                                          }
  175.                                         else//接收數據無效  
  176.                                          {
  177.                                                   rf_ok=0;
  178.                                                   rf_ok1=0;
  179.                                                   rf_ok2=0;                                          
  180.                      }
  181.                                                                  
  182.                                 }                                       
  183.                   }
  184.                
  185.                        
  186.                        
  187.                        
  188.         #if defined(STUDY_NOSET)
  189.    if(rf_ok)                 //判斷
  190.                         {         
  191.                                 GIE=0;
  192.                                 rf_ok=0;
  193.                                 if(((mma3==0xc0)&&(!mma4))|((mma3==0x30)&&(!mma4))|((!mma3)&&(mma4==0xc0))|((!mma3)&&(mma4==0x30)))   //判斷是2262編碼
  194.                                         {  

  195.                   D0=(mma3 - 0xc0);    //取按鍵碼          
  196.                                                                         D1=(mma3 - 0x30);
  197.                                                                         D2=(mma4 - 0xc0);
  198.                                                                         D3=(mma4 - 0x30);
  199.             
  200.                                                                         decode_ok=0;
  201.                                                                         s=1500;

  202.                                                                                 
  203.                                         }
  204.                                         else                                         //判斷是1527編碼
  205.                                                 {         
  206.                
  207.                       D0=(mma4 - 0x80);    //取按鍵碼          
  208.                                                                                         D1=(mma4 - 0x40);
  209.                                                                                         D2=(mma4 - 0x20);
  210.                                                                                         D3=(mma4 - 0x10);       
  211.               
  212.                                                                                         decode_ok=0;                                       
  213.                                                                                         s=1500;        //解碼有效輸出時間                                                       
  214.                                                                                                
  215.                                                 }
  216.                                          GIE=1;
  217.                         }                       
  218.                         #endif
  219.                        
  220.       
  221.       
  222.       #if defined(STUDY_SET)
  223. ////////////////////////////////////////////////////////////////////                       
  224. if((rf_ok)&&(!study))                 //判斷是否是學習狀態
  225.                         {         
  226.                
  227.                                 rf_ok=0;
  228.                                 if(((mma3==0xc0)&&(!mma4))|((mma3==0x30)&&(!mma4))|((!mma3)&&(mma4==0xc0))|((!mma3)&&(mma4==0x30)))   //判斷是2262編碼
  229.                                         {  
  230.                                            for(x=0;x<40;x++)
  231.                                                    {
  232.                                                         if((mma1==EEPROM_read(x*3+1))&&(mma2==EEPROM_read(x*3+2)))
  233.                                                                 {
  234.                                                                         D0=(mma3 - 0xc0);    //取按鍵碼          
  235.                                                                         D1=(mma3 - 0x30);
  236.                                                                         D2=(mma4 - 0xc0);
  237.                                                                         D3=(mma4 - 0x30);       
  238.        
  239.                                                                         decode_ok=0;
  240.                                                                         s_tim=1500;
  241.                                                                         break;
  242.                                                                 }
  243.                                                                                                
  244.                                                 }
  245.                                                                                 
  246.                                         }
  247.                                         else                                         //判斷是1527編碼
  248.                                                 {         
  249.                                                      for(x=0;x<40;x++)
  250.                                                                    {   
  251.                                                                         if((mma1==EEPROM_read(x*3+1))&&(mma2==EEPROM_read(x*3+2))&&(mma3==EEPROM_read(x*3+3)))
  252.                                                                                 {                                                                                       
  253.                                                                                         D0=(mma4 - 0x80);    //取按鍵碼          
  254.                                                                                         D1=(mma4 - 0x40);
  255.                                                                                         D2=(mma4 - 0x20);
  256.                                                                                         D3=(mma4 - 0x10);       
  257.                                                                                                                                                  
  258.                                                                                         decode_ok=0;                                       
  259.                                                                                         s_tim=1500;        //解碼有效輸出時間
  260.                                                                                         break;
  261.                                                                                 }
  262.                                                                                                                
  263.                                                                 }
  264.                                                                                                
  265.                                                 }
  266.                                        
  267.                         }                       

  268. /////////////////////////////////////////////////////////////////////////
  269.    #endif
  270.       
  271.       
  272.       
  273.       
  274.       
  275.       
  276.       
  277.       
  278.       
  279.      if(!decode_ok)//解碼有效輸出
  280.                   {
  281.                           s_tim--;
  282.                           if(!s_tim)
  283.                                  {
  284.                                         decode_ok=1;//關信號燈
  285.                                         if(!LM_SEL)    //  鎖存/暫態 選擇
  286.                                                 {
  287.                                                         D0=1;
  288.                                                         D1=1;
  289.                                                         D2=1;
  290.                                                         D3=1;
  291.                                                 }
  292.                                  }
  293.                                   
  294.                    }


  295.    }


  296. #endif

  297.    
  298.    
  299.    
  300.    
  301.    
  302.    
  303.    
  304.    
  305.    
  306.    
  307.    
  308.    
  309.    
  310.    
  311.    
  312.    
  313. void KEY_study()        //遙控器學習
  314. {       
  315.         uchar num_rf;
  316.         uchar d_num=0;                       

  317. ……………………

  318. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼
Keil代碼下載:
Keil代碼.7z (24.53 KB, 下載次數: 81)
回復

使用道具 舉報

ID:1045494 發表于 2024-7-23 20:59 | 顯示全部樓層
樓主,晶振頻率多少!!!!!!!!!!
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 91天堂网 | 久久久123 | 一区日韩| 亚洲成人免费视频在线 | 少妇精品久久久久久久久久 | 色必久久 | 久久99精品久久久 | 色网在线看 | 亚洲成人精品在线 | 在线国产一区二区 | av网站观看| 99亚洲综合 | 国产精品一区二区在线免费观看 | 欧美三区在线观看 | 青青草综合网 | 久久亚洲一区 | 日韩精品一区二区三区四区 | 中文字幕国产 | 九九热精品在线视频 | 欧美一二三 | 精品一区二区av | 久久久久久久久久久久91 | 午夜精品久久久久久久久久久久久 | 亚洲国产精品日韩av不卡在线 | 久久一二区 | 99福利视频 | 天天草av| 91精品国产色综合久久不卡蜜臀 | 亚洲一区 | 中文字幕视频在线 | 国产亚洲欧美另类一区二区三区 | 亚洲综合大片69999 | 成人久久久 | 久久久不卡网国产精品一区 | 色综合久久久 | 亚洲91精品| 日韩视频中文字幕 | 米奇7777狠狠狠狠视频 | 亚洲性人人天天夜夜摸 | 91亚洲精品国偷拍自产在线观看 | av天天看|