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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1124|回復: 0
打印 上一主題 下一主題
收起左側

EV1527學習碼無線遙控汽車防盜器單片機程序資料

[復制鏈接]
跳轉到指定樓層
樓主
ID:1012383 發表于 2024-7-30 08:45 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
EV1527是一片由CMOS設計制造的可預
燒內碼的學習碼編碼芯片,由軟件解碼。內碼共有2O位
元可預燒100萬組內碼組合,大大降低了使用編碼上重復
的機率。更重要的是其不可復制性,并且由于可以自學
習,當發射模塊丟了,只要對接收模塊進行自學習就可以
使原先的發射模塊失效,大大提高了安全性

單片機源程序如下:
  1. /*

  2. ;======================硬件結構======================
  3. ;
  4. ;                          __________
  5. ;         
  6. ;     
  7. */

  8. //8路控制程序
  9. //
  10. #include <pic.h>
  11. __CONFIG( WDTDIS  & PWRTEN &INTOSCIO & MCLRDIS & BOREN & CPD &  CPROTECT);


  12. #define uchar unsigned char
  13. #define uint  unsigned int




  14. #define rfin                 RA0
  15. #define        learnkey    RA5
  16. #define        LED                        RA4
  17. #define   VT        RA1

  18. #define        OUT1                        RC2
  19. #define        OUT2                        RC1
  20. #define        OUT3                        RC0
  21. #define        OUT4                        RA2
  22. #define        L_M                                RC5



  23. #define        max_how                15




  24. //學習變量
  25. uchar        learnbuf0;
  26. uchar        learnbuf1;
  27. uchar        learnbuf2;
  28. //===================//
  29. bit        learnf;
  30. bit        fun_out;
  31. bit learn_ok;
  32. bit        fun_ok;

  33. //========================//
  34. //記時間變量
  35. uchar        temp0;
  36. uchar        temp1;
  37. uchar        temp2;

  38. uchar        out_temp0;
  39. uchar        out_temp1;

  40. //=========================//
  41. //RF接收變量
  42. uchar        rec_count;
  43. uchar        lo_buf;
  44. uchar        hi_buf;
  45. uchar        cs2;
  46. uchar        cs1;
  47. uchar        cs0;

  48. //RF接收標志
  49. bit        rfstart1;
  50. bit        rfstart;
  51. bit        rfok;
  52. bit  rf_er;//接收失敗



  53. //===============================//
  54. //定時中斷
  55. void interrupt all ()
  56. {

  57.                

  58.         CLRWDT();
  59.         temp0++;
  60.         out_temp0++;
  61. if(T0IF==1)
  62.                         {
  63.                         T0IF=0;
  64.                         TMR0=0;
  65.                
  66.                         }

  67. if(TMR1IF==1)
  68.                           {
  69.                         TMR1IF=0;//清中斷標志位
  70.                         TMR1L=180;
  71.                         TMR1H=255;
  72.                        
  73.                         }
  74. if(out_temp0>200)
  75.                         {
  76.                         out_temp0=0;
  77.                         out_temp1++;
  78.                                 if(out_temp1>20)
  79.                                         {
  80.                                         out_temp1=0;
  81.                                         VT=0;

  82.                                                 if(L_M==0)
  83.                                                 {
  84.                                                 OUT1=0;
  85.                                                 OUT2=0;
  86.                                                 OUT3=0;
  87.                                                 OUT4=0;
  88.                                                 }
  89.                                         }
  90. /*

  91.                                 if(out_temp1>30)
  92.                                         {
  93.                                         out_temp1=0;

  94.                                         if(L_M==0)
  95.                                                 {
  96.                                                 OUT1=0;
  97.                                                 OUT2=0;
  98.                                                 OUT3=0;
  99.                                                 OUT4=0;
  100.                                                 }
  101.                                
  102.                                         }
  103. */

  104.                         }





  105.                
  106. //時間程序
  107. if(temp0>200)//2MS
  108.                         {
  109.                         CLRWDT();
  110.                         temp0=0;
  111.                         temp1++;
  112.                         if(temp1>10)
  113.                                                 {
  114.                                                 fun_ok=0;
  115.                                        
  116.                                                 }

  117.                         if(temp1>50)
  118.                                                 {
  119.                                        
  120.                                                
  121.                                                 }

  122.                         if(temp1>8)
  123.                                                 {
  124.                                                 learn_ok=0;//400ms

  125.                                                 }

  126.                         if(temp1>200)
  127.                                                 {
  128.                                                
  129.                                                 CLRWDT();
  130.                                                 temp1=0;
  131.                                                 temp2++;
  132.                                                 if(temp2>6)
  133.                                                                 {
  134.                                                                 learnf=0;//學習時間為20秒
  135.                                                                 }
  136.                                                 }
  137.                         }

  138. //RF接受程序

  139.    if(rfin==1)
  140.              {  

  141.                         if(rfstart1==1)//由低到高開始接收
  142.                                                 {
  143.                                                         if(lo_buf>hi_buf)//判斷是否低電平
  144.                                                                                          {
  145.                                                                                         if(lo_buf>5&&lo_buf<19&&hi_buf>2&&hi_buf<9)
  146.                                                                                                                                   {
  147.                                                                                                                                 rec_count++;//是低電平
  148.                                                                                                                                 cs0<<=1;//移動一位                       
  149.                                                                                                                             }
  150.                                                                                         else
  151.                                                                                                                                 {//接收失敗       
  152.                                                                                                                                 rf_er=1;
  153.                                                                                                                                 }
  154.                                                                        
  155.                                                                                      }       
  156.                                
  157.                                                           else if(lo_buf<hi_buf)//判斷是否低高電平
  158.                                                                                            {
  159.                                                                                         if(lo_buf>2&&lo_buf<9&&hi_buf>5&&hi_buf<19)//判斷高電平是否大于900US和低電平大于200US
  160.                                                                                                                            {
  161.                                                                                                                          rec_count++;//是高電平
  162.                                                                                                                          cs0<<=1;//移動一位
  163.                                                                                                                          cs0++;
  164.                                                                                                                        
  165.                                                                                                                          }
  166.                                                                                  else
  167.                                                                                                                      {       
  168.                                                                                                                
  169.                                                                                                                                 rf_er=1;
  170.                                                                                                                          }
  171.                                                                                  
  172.                                                                                     }


  173.                                                      else if(lo_buf==hi_buf)
  174.                                                                                         {                               
  175.                                                                                
  176.                                                                                         rf_er=1;               
  177.                                                                                         }


  178.                                                   if(rf_er==1)
  179.                                                                         {
  180.                                                                         rfstart=0;//接收失敗       
  181.                                                                         rec_count=0;
  182.                                                                         rfok=0;
  183.                                                                         }
  184.                                                   else
  185.                                                                         {
  186.                                                                         if(rec_count==8){cs2=cs0;}
  187.                                                                     else if(rec_count==16){cs1=cs0;}               
  188.                                               
  189.                                                                         }
  190.             
  191.                                     
  192.                                                    if(rec_count==24)
  193.                                                                  {
  194.                                                                    rfok=1;//接收成功        
  195.                                                                  }
  196.                                              hi_buf=0;//rfstart1==1函數                          
  197.                                                 }

  198.                                                                                   
  199.          else   if(lo_buf>30&&lo_buf<180)//判斷同步頭
  200.                                       {                                                                     
  201.                                                   rfstart=1;//檢測到正確的同步頭                                               
  202.                                                   rec_count=0;//接收位數,清除0                                                                                                                                                                                                       
  203.                                       }

  204.                 hi_buf++;                                                                                                            
  205.                 lo_buf=0;
  206.                 rfstart1=0;
  207.             rf_er=0;//接收失敗標志
  208.            }
  209.                                                                                                    
  210.                  
  211.                                                                                                
  212. //===================================//                                                                                                                                                                                                                                                                                                                                                                                                                                                                
  213. else
  214.              {      //輸入端口為低電         
  215.                         lo_buf++;        
  216.                         if(rfstart==1)//開始接收標志
  217.                                         {
  218.                                         rfstart1=1;
  219.                                         }
  220.                         else
  221.                                         {
  222.                                 hi_buf=0;   
  223.                                         }
  224.                  }
  225.   }//TMR1IF==1函數內



  226.           



  227.        
  228. //==============================//                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   
  229. void learnkeypr(void)
  230.                         {

  231.                         if(learn_ok==0)//正在學習
  232.                                         {
  233.                                        
  234.                                         uchar  i,b;
  235.                                         uint        j;
  236.                                         LED=0;
  237.                                         CLRWDT();
  238.                                         CLRWDT();
  239.                                         CLRWDT();
  240.                                                
  241.                                         if(learnkey==0)
  242.                                                                 {
  243.                                                                
  244.                                                                         //LED=1;
  245.                                                                         for(j=0;j<=50000;j++){}
  246.                                                                         if(learnkey==0)                                               
  247.                                                                                                 {
  248.                                                                                                 PORTC=0;
  249.                                                                                                 PORTA=0;
  250.                                                                                                 LED=1;
  251.                                                                                                 temp0=0;
  252.                                                                                                 temp1=0;
  253.                                                                                                 temp2=0;
  254.                                                                                                 while((temp2<2)&&learnkey==0)//6==20S
  255.                                                                                                                                         {
  256.                                                                                                                                         LED=1;
  257.                                                                                                                                         CLRWDT();
  258.                
  259.                                                                                                                                         }//長按25秒擦除EE                                                                       
  260.                                                                                                 if(learnkey==0)
  261.                                                                                                                          {
  262.                                                                                                                         LED=1;                       
  263.                                                                                                                         b=0x0ff;
  264.                                                                                                                         for(i=0;i<=127;i++){EEPROM_WRITE(i=i,b);}                                       
  265.                                                                                                                         LED=0;
  266.                                                                                                                         CLRWDT();
  267.                                                                                                                         while(learnkey==0){}                                                                                                                                       
  268.                                                                                                                         }
  269.                                                                                                 else       
  270.                                                                                                                         {
  271.                                                                                                                
  272.                                                                                                                         CLRWDT();

  273.                                                                                                                         temp0=0;
  274.                                                                                                                         temp1=0;
  275.                                                                                                                         temp2=0;
  276.                                                                                                                
  277.                                                                                                                         LED=0;
  278.                                                                                                                         learnf=1;//進入學習
  279.                                                                                                                         }
  280.                                                                                                         }
  281.                                                                 }

  282.                                         }
  283.                         }


  284.                                                

  285. //===============================================//

  286.                                        
  287. void init(void){        //初始化函數
  288.                 CLRWDT();
  289.         OSCCAL=_READ_OSCCAL_DATA();
  290.                 CMCON=0X07;  //關閉比較器
  291. //MOVLW           TRISAV                               ; 0111B
  292. //MOVWF           TRISA
  293. //MOVLW     TRISBV
  294. //MOVWF            TRISC


  295.                 TRISA=0b11101001;
  296.                 TRISC=0b11111000;
  297.        
  298.                 GIE=1;//開總中斷
  299.                 PEIE=1;
  300.                 TMR1IE=1;   //開啟定時中斷1
  301.                 T0IE=0;                //關閉定時器1中斷
  302.                 OPTION=0X00; //開內部上拉
  303.                 T1CON=0X01;//使用定時器1
  304.                 TMR1L=180;
  305.                 TMR1H=255;  //定義100US中斷一次
  306.                 WPUA=0X0;//關閉上拉
  307.        
  308.                 PORTA=0;
  309.                 PORTC=0;
  310.                         }

  311. void learnok(void)
  312.                         {
  313.                                 LED=1;//學習成功
  314.                                 learn_ok=1;//學習成功
  315.                                 learnf=0;
  316.                                 temp0=0;
  317.                                 temp1=0;
  318.                                 temp2=0;

  319.                         }
  320. void save_learn(void)

  321.                         {
  322.                                
  323.                                 EEPROM_WRITE(127,learnbuf0);//存入指針
  324.                                 learnbuf0=learnbuf0*3;
  325.                                 EEPROM_WRITE(learnbuf0=learnbuf0,cs0);
  326.                                 learnbuf0++;
  327.                                 EEPROM_WRITE(learnbuf0=learnbuf0,cs1);
  328.                                 learnbuf0++;
  329.                                 EEPROM_WRITE(learnbuf0=learnbuf0,cs2);

  330.                                 learnok();
  331.                        
  332.                                
  333.                         }

復制代碼


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏3 分享淘帖 頂1 踩
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: a免费在线 | 日韩免费高清视频 | 天天天天天天天干 | 99热国产在线播放 | 中文字幕成人av | 欧美激情在线播放 | 久在草| 久久国产精品首页 | 亚洲毛片 | 久色网| 在线精品一区 | 羞羞视频在线免费 | 日韩精品在线免费观看 | 蜜桃精品视频在线 | 日韩欧美一区二区三区在线播放 | 欧美一级二级在线观看 | 久久精品成人 | 一级a爱片性色毛片免费 | 欧美久久久久 | 日韩欧美精品一区 | 黄色一级毛片 | 久久久久久久久精 | 黄色毛片在线观看 | 国产免费一区二区三区免费视频 | 一区中文字幕 | 天天看天天操 | 精品欧美乱码久久久久久1区2区 | 日本国产精品视频 | 国产精品一级 | 国产免费观看一区 | 91国内视频在线 | 成人不卡| 成人精品 | 深夜福利影院 | 精品国产乱码久久久久久88av | 一级黄色片一级黄色片 | 欧美高清dvd | 国产91在线观看 | 四虎影院新地址 | 成人国产精品久久 | 欧美一级电影免费观看 |