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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 6645|回復(fù): 8
打印 上一主題 下一主題
收起左側(cè)

用pic16f630 MCU實現(xiàn)的315MHZ無線軟件解碼和編碼.代替PT2272和pt2262

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:86688 發(fā)表于 2019-3-8 14:16 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
  1. #include <pic.h>   
  2. //#include <pic16630.h>   
  3. #define uchar unsigned char   
  4. #define uint unsigned int   
  5. #define PORTAIT(adr,bit) ((unsigned)(&adr)*8+(bit)) ///絕對尋址位操作指令   
  6. #define PORTCIT(adr,bit)((unsigned)(&adr)*8+(bit)) ///絕對尋址位操作指令   


  7. static bit KEY1 @ PORTAIT(PORTA,0);   
  8. static bit KEY2 @ PORTAIT(PORTA,1);   
  9. static bit KEY3 @ PORTAIT(PORTA,4);   
  10. static bit KEY4 @ PORTAIT(PORTA,5);   

  11. static bit DECODE_POWER_ON_OFF @ PORTCIT(PORTC,0);   
  12. static bit LED1 @ PORTCIT(PORTC,1);   
  13. static bit LED2 @ PORTCIT(PORTC,5);   
  14. static bit BEEP @ PORTCIT(PORTC,2);   
  15. static bit DIN  @ PORTCIT(PORTC,3);   
  16. static bit DOUT @ PORTCIT(PORTC,4);   

  17. uint i;   

  18. uchar keyCode;   
  19. bit sign_key;   




  20. #define Err 0xFF                //當(dāng)解碼程序發(fā)現(xiàn)接收的數(shù)據(jù)是無效數(shù)據(jù)時返回此值   

  21. char DeviceAddr[9]="1010ffff";  //報警器的地址,1 接高電平,0 接低電平(地), F 為懸空.(人可讀)   

  22. uchar AddrH,AddrL;              //產(chǎn)品地址(機可讀)   

  23. void delay_150us(uchar t)   
  24. {   uchar k;   
  25.     uchar j;   
  26.       for(k=t;k>0;k--)   
  27.       for(j=50;--j;);   
  28. }   
  29. void delay_50us(uchar t)   
  30. {        
  31.       uchar k;   
  32.       uchar i;   
  33.       for(k=t;k>0;k--)   
  34.       for(i=14;--i;);   
  35. }   

  36. void Convert()          //人可讀地址轉(zhuǎn)換為MCU可讀   
  37. {   
  38.     uchar i;   
  39.     for(i=0;i<4;i++){   
  40.         if(DeviceAddr[i]=='0')   
  41.         {   AddrH<<=2;   
  42.             AddrH|=0;   
  43.         }   
  44.         if(DeviceAddr[i]=='1')   
  45.         {   
  46.             AddrH<<=2;   
  47.             AddrH|=3;   
  48.         }   
  49.         if(DeviceAddr[i]=='f')   
  50.         {   
  51.             AddrH<<=2;   
  52.             AddrH|=1;   
  53.         }   
  54.     }   
  55.         for(i=4;i<8;i++){   
  56.         if(DeviceAddr[i]=='0')   
  57.         {      
  58.             AddrL<<=2;   
  59.             AddrL|=0;              
  60.         }   
  61.         if(DeviceAddr[i]=='1')   
  62.         {   
  63.             AddrL<<=2;   
  64.             AddrL|=3;   
  65.         }   
  66.         if(DeviceAddr[i]=='f')   
  67.         {   
  68.             AddrL<<=2;   
  69.             AddrL|=1;   
  70.         }   
  71.     }   
  72. }   
  73. void Send(uchar *DAddr,uchar SendData)   
  74. {       uchar temp,i;   
  75.         DOUT=1;   
  76.         delay_150us(2);   
  77.         DOUT=0;   
  78.         delay_150us(60);   
  79.         for(i=0;i<8;i++)//Send AddrCode   
  80.         {   temp=*DAddr++;   
  81.             if(temp=='1')   
  82.             {   DOUT=1;   
  83.                 delay_150us(6);   
  84.                 DOUT=0;   
  85.                 delay_150us(2);   
  86.                 DOUT=1;   
  87.                 delay_150us(6);   
  88.                 DOUT=0;   
  89.                 delay_150us(2);               
  90.             }   
  91.             if(temp=='f')   
  92.             {   DOUT=1;   
  93.                 delay_150us(2);   
  94.                 DOUT=0;   
  95.                 delay_150us(6);   
  96.                 DOUT=1;   
  97.                 delay_150us(6);   
  98.                 DOUT=0;   
  99.                 delay_150us(2);   
  100.             }   
  101.             if(temp=='0')   
  102.             {   DOUT=1;   
  103.                 delay_150us(2);   
  104.                 DOUT=0;   
  105.                 delay_150us(6);   
  106.                 DOUT=1;   
  107.                 delay_150us(2);   
  108.                 DOUT=0;   
  109.                 delay_150us(6);   
  110.             }   
  111.         }   
  112.         for(i=0;i<4;i++)///Send Data   
  113.         {   if(SendData&(8>>i))   
  114.             {   
  115.                 DOUT=1;   
  116.                 delay_150us(6);   
  117.                 DOUT=0;   
  118.                 delay_150us(2);   
  119.                 ////////////////////   
  120.                 DOUT=1;   
  121.                 delay_150us(6);   
  122.                 DOUT=0;   
  123.                 delay_150us(2);   
  124.             }   
  125.             else   
  126.             {         
  127.                 DOUT=1;   
  128.                 delay_150us(2);   
  129.                 DOUT=0;   
  130.                 delay_150us(6);   
  131.                 ///   
  132.                 DOUT=1;   
  133.                 delay_150us(2);   
  134.                 DOUT=0;   
  135.                 delay_150us(6);   
  136.             }   
  137.         }   
  138. }   
  139. uchar GetData()//解碼程序   
  140. {      
  141.          uchar i,j,k;   
  142.          uchar ReadCode[3],GetCode;   
  143.          //------------------------找同步頭-------------------------   
  144.          if(!DIN)return Err;   
  145.          delay_150us(3);   
  146.          for(i=0;i<28;i++)   
  147.          {   
  148.             if(DIN)return Err;   
  149.             delay_150us(2);   
  150.          }   
  151.          for(i=0;i<30;i++)   
  152.          {   
  153.             if(DIN)break;   
  154.             delay_50us(1);   
  155.             if(i>25)return Err;//如果超時則返回   
  156.          }   
  157.         //-----------------------接收地址碼和數(shù)據(jù)碼-----------------   
  158.          for(j=0;j<3;j++)   
  159.          {   
  160.             for(i=0;i<8;i++)   
  161.             {   
  162.                 delay_150us(2);   
  163.                 delay_50us(1);   
  164.                 ReadCode[j]=ReadCode[j]<<1;   
  165.                 ReadCode[j]=ReadCode[j]|DIN;   
  166.                 if(DIN)   
  167.                 {       //while(DIN);//等待0出現(xiàn)   
  168.                         for(k=0;k<255;k++)   
  169.                          {  delay_50us(2);   
  170.                             if(DIN==0)break;   
  171.                             if(k>12)return Err;//超時,返回錯誤代碼   
  172.                          }   
  173.                 }   
  174.                 //while(!DIN);//等待1出現(xiàn)   
  175.                 for(k=0;k<255;k++)   
  176.                  {  delay_50us(2);   
  177.                     if(DIN==1)break;   
  178.                     if(k>12)return Err;//超時,返回錯誤代碼   
  179.                  }   
  180.             }   
  181.          }            
  182.         //-------------------校驗地址及運算數(shù)據(jù)---------------------   
  183.               if(ReadCode[0]!=AddrH)return Err;   
  184.               if(ReadCode[1]!=AddrL)return Err;//校驗地址   
  185.               GetCode=ReadCode[2]&0x01;   
  186.               GetCode|=(ReadCode[2]&0x04)>>1;   
  187.               GetCode|=(ReadCode[2]&0x10)>>2;   
  188.               GetCode|=(ReadCode[2]&0x40)>>3;   
  189.               return GetCode;   
  190. }   


  191. void delay(){ for(i=6553;i!=0;i--)continue;}   

  192. void beep(void)   
  193. {   uchar i;   
  194.     for(i=0;i<0xff;i++)   
  195.     {   delay_150us(5);   
  196.         BEEP=!BEEP;   
  197.     }   
  198.     BEEP=0;   
  199. }   

  200. void interrupt ISR(void) //中斷服務(wù)程序   
  201. {   
  202.     if(RAIE && RAIF)   
  203.     {   RAIF = 0;   
  204.         delay();   
  205.         if(KEY1==0){sign_key=1;keyCode=1;}   
  206.         if(KEY2==0){sign_key=1;keyCode=2;}   
  207.         if(KEY3==0){sign_key=1;keyCode=3;}   
  208.         if(KEY4==0){sign_key=1;keyCode=4;}   
  209.         //PORTA = PORTA;   
  210.     }   
  211. /* if(T0IE && T0IF) //判TMR0 中斷  
  212.     {  
  213.         T0IF = 0; //清除TMR0 中斷標(biāo)誌  
  214.     }  
  215.     if(TMR1IE && TMR1IF) //判TMR1 中斷  
  216.     {  
  217.         TMR1IF = 0; //清除TMR1 中斷標(biāo)誌  
  218.     }*/   
  219. }   

  220. void main()   
  221. {   

  222. uchar mydata;   

  223.     DOUT=0; //發(fā)送數(shù)據(jù)端口上電為低電平   
  224.     CMCON=0x07;     //關(guān)閉比較器   
  225.     TRISA=0x33;     //PORTA_1為輸入。   
  226.     OPTION=0x7f;    //弱上拉全局控制位使能   
  227.     WPUA=0xFF;      //PORTA弱上拉控制位使能   
  228.     TRISC=0x08;     //設(shè)置C口輸入輸出   

  229.   RAIF=0;           //中斷標(biāo)誌位清零   
  230.   PORTA=0x00;       //配合  PORTA = PORTA 給電平中斷做準(zhǔn)備   
  231.   RAIE=1;           //A口電平中斷允許   
  232.   IOCA=0x33;        //A口各個中斷允許   
  233.   GIE =1;           //總中斷允許   
  234.   PORTA = PORTA;      
  235.   Convert();   
  236.   Send("1010ffff",1);   
  237. for(;;){   
  238.     if(sign_key)   
  239.         {   switch(keyCode){   
  240.             case 1:   
  241.                 LED1=0;   
  242.                 Send(DeviceAddr,1);   
  243.                 Send(DeviceAddr,1);   
  244.                 Send(DeviceAddr,1);   
  245.                 Send(DeviceAddr,1);   
  246.                 break;   
  247.             case 2:   
  248.                 Send(DeviceAddr,2);   
  249.                 Send(DeviceAddr,2);   
  250.                 Send(DeviceAddr,2);   
  251.                 Send(DeviceAddr,2);   
  252.                 LED1=1;   
  253.                 break;   
  254.             case 3:   
  255.                 Send(DeviceAddr,4);   
  256.                 Send(DeviceAddr,4);   
  257.                 Send(DeviceAddr,4);   
  258.                 Send(DeviceAddr,4);   
  259.                 LED2=1;   
  260.                 DECODE_POWER_ON_OFF=1;   
  261.                 break;   
  262.             case 4:   
  263.                 Send(DeviceAddr,8);   
  264.                 Send(DeviceAddr,8);   
  265.                 Send(DeviceAddr,8);   
  266.                 Send(DeviceAddr,8);   
  267.                 DECODE_POWER_ON_OFF=0;   
  268.                 LED2=0;   
  269.                 break;   
  270.             }   
  271.             sign_key=0;   
  272.             //beep();   
  273.         }   

  274.         mydata=GetData();   
  275.             if(mydata!=Err)   
  276.             {   
  277.                 if(mydata==1)LED1=0;   
  278.                 if(mydata==2)LED1=1;   
  279.                 if(mydata==4)LED2=0;   
  280.                 if(mydata==8)LED2=1;   
  281.             }   


  282. }   



  283. }   
復(fù)制代碼

評分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

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

使用道具 舉報

沙發(fā)
ID:300165 發(fā)表于 2020-9-26 19:13 | 只看該作者
穩(wěn)定就好,省錢了
回復(fù)

使用道具 舉報

板凳
ID:582276 發(fā)表于 2020-11-15 17:34 | 只看該作者
630代2262有點得不償失
回復(fù)

使用道具 舉報

地板
ID:851448 發(fā)表于 2020-11-30 00:45 | 只看該作者
可以的,不用浪費錢了
回復(fù)

使用道具 舉報

5#
ID:745362 發(fā)表于 2021-1-29 16:40 來自手機 | 只看該作者
nanfuB 發(fā)表于 2020-11-15 17:34
630代2262有點得不償失

你說的那些1.2.毛的芯片嗎
回復(fù)

使用道具 舉報

6#
ID:935260 發(fā)表于 2021-7-2 09:53 | 只看該作者
XSBCL 發(fā)表于 2021-1-29 16:40
你說的那些1.2.毛的芯片嗎

使用過PIC的和國產(chǎn),臺席的芯片,PIC的性能確實好一些,輸出波形穩(wěn)定。
回復(fù)

使用道具 舉報

7#
ID:1088608 發(fā)表于 2023-7-16 00:42 | 只看該作者
有沒有流程圖看看
回復(fù)

使用道具 舉報

8#
ID:103411 發(fā)表于 2023-11-7 16:16 | 只看該作者
學(xué)習(xí)一下解碼方法,感謝樓主分享。
回復(fù)

使用道具 舉報

9#
ID:1108700 發(fā)表于 2024-1-9 21:30 | 只看該作者
用一,兩毛的能做嗎
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 国产精品久久久亚洲 | 91av导航 | 久久国内精品 | 在线看片网站 | 欧美性受xxx | 久久国产美女视频 | 久久精品国产清自在天天线 | 99热在线播放 | 在线观看中文字幕亚洲 | 天天欧美| 亚洲高清免费 | 高清欧美性猛交xxxx黑人猛交 | 中文字幕 国产 | 91av视频在线观看 | 欧美一区精品 | 久久精品网 | 影音先锋男 | 国产91久久久久久 | 欧美一卡二卡在线 | 久久青草av| 日韩精品久久久久久 | 欧美日韩在线免费观看 | 免费xxxx大片国产在线 | 亚洲欧美激情国产综合久久久 | 成人精品国产一区二区4080 | 黄色免费av | 欧美精品久久久久久久久久 | 97精品一区二区 | 国产高清精品一区二区三区 | 精品videossex高潮汇编 | 精品国产乱码久久久久久丨区2区 | 久久手机在线视频 | 涩涩视频大全 | 91视频免费 | 一区二区电影网 | 亚洲最色网站 | av永久| 欧美一区二区三区高清视频 | 国产成人av免费看 | 日韩字幕一区 | 91精品国产91久久久久久吃药 |