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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 8730|回復: 7
收起左側

基于STM32F103平臺PT2262解碼程序-親測可用

  [復制鏈接]
ID:244587 發表于 2017-11-15 16:50 | 顯示全部樓層 |閱讀模式
附件是基于STM32F103平臺PT2262解碼程序,采用定時器精確定時,不使用中斷,親測有效,并且集成了PT2262組幀程序,調用即可發送。使用邏輯分析儀對比波形,發送波形與標準波形基本一致!
0.png

單片機源程序如下:
  1. #include "includes.h"

  2. /*******************************************************************************
  3. * 結構體
  4. *******************************************************************************/
  5. typedef struct  
  6. {
  7.     unsigned char high1;
  8.     unsigned char low1;
  9.     unsigned char high2;
  10.     unsigned char low2;
  11. }PT2262_LEVEL; /*PT2262電平脈沖*/

  12. /*******************************************************************************
  13. * 局部變量
  14. *******************************************************************************/
  15. PT2262_SIGN   pt2262_sign[12];

  16. /*******************************************************************************
  17. * 程序
  18. *******************************************************************************/
  19. bool Pt2262DecodeHandle(void)
  20. {
  21.     int i=0,count=0;
  22.     PT2262_LEVEL  pt2262_level[12];     /*pt2262一組12個信號,1個信號2高2低*/
  23.     unsigned long sign_buffer[48]={0};  /*信號緩存4*12*/
  24.    
  25.     if( ReadPt2262PinState()==0 ) /*低電平*/
  26.     {
  27.         while( !ReadPt2262PinState() )
  28.         {
  29.             /*計算低電平持續時間*/
  30.             Delayus(1);/*實際延遲3.5us左右*/
  31.             if( (count++)>5800 )
  32.             {
  33.                 return false;
  34.             }
  35.         }
  36.         
  37.         if( count>1715&&count<4286 )/*找到同步碼*/
  38.         {
  39.             while(1)
  40.             {
  41.                 if( ReadPt2262PinState() )/*高電平*/
  42.                 {
  43.                     count=0;
  44.                     while( ReadPt2262PinState() )
  45.                     {
  46.                         /*計算高電平持續時間*/
  47.                         Delayus(1);
  48.                         if( (count++)>514 )
  49.                         {
  50.                             return false;
  51.                         }
  52.                     }
  53.                     if(count<28) /*高電平太短*/
  54.                     {
  55.                         return false;
  56.                     }
  57.                     sign_buffer[i]=count; /*記錄電平持續時間*/
  58.                     i++;
  59.                 }
  60.                
  61.                 if( !ReadPt2262PinState() ) /*低電平*/
  62.                 {
  63.                     count=0;
  64.                     while( !ReadPt2262PinState() )
  65.                     {
  66.                         /*計算低電平持續時間*/
  67.                         Delayus(1);
  68.                         if( (count++)>514 )
  69.                         {
  70.                             return false;
  71.                         }
  72.                     }
  73.                     if(count<28) /*低電平太短*/
  74.                     {
  75.                         return false;
  76.                     }
  77.                     sign_buffer[i]=count; /*記錄電平持續時間*/
  78.                     i++;
  79.                 }
  80.                
  81.                 if(i>47) /*當i=48時,表明已連續記錄48個有效脈沖*/
  82.                 {
  83.                     for(i=0;i<12;i++)
  84.                     {
  85.                         /*窄電平記為0 寬電平記為1*/
  86.                         if(sign_buffer[i*4]<114)
  87.                         {
  88.                             pt2262_level[i].high1=0;
  89.                         }
  90.                         else
  91.                         {
  92.                             pt2262_level[i].high1=1;
  93.                         }
  94.                         
  95.                         if(sign_buffer[i*4+1]<114)
  96.                         {
  97.                             pt2262_level[i].low1=0;
  98.                         }
  99.                         else
  100.                         {
  101.                             pt2262_level[i].low1=1;
  102.                         }
  103.                         
  104.                         if(sign_buffer[i*4+2]<114)
  105.                         {
  106.                             pt2262_level[i].high2=0;
  107.                         }
  108.                         else
  109.                         {
  110.                             pt2262_level[i].high2=1;
  111.                         }
  112.                         
  113.                         if(sign_buffer[i*4+3]<114)
  114.                         {
  115.                             pt2262_level[i].low2=0;
  116.                         }
  117.                         else
  118.                         {
  119.                             pt2262_level[i].low2=1;
  120.                         }
  121.                         
  122.                         if( pt2262_level[i].high1==0&&pt2262_level[i].low1==1&&\
  123.                             pt2262_level[i].high2==0&&pt2262_level[i].low2==1)
  124.                         {
  125.                             pt2262_sign[i]=PT2262_SIGN_LOW;
  126.                         }
  127.                         else if( pt2262_level[i].high1==1&&pt2262_level[i].low1==0&&\
  128.                             pt2262_level[i].high2==1&&pt2262_level[i].low2==0)
  129.                         {
  130.                             pt2262_sign[i]=PT2262_SIGN_HIGH;       
  131.                         }
  132.                         else if( pt2262_level[i].high1==0&&pt2262_level[i].low1==1&&\
  133.                             pt2262_level[i].high2==1&&pt2262_level[i].low2==0)
  134.                         {
  135.                             pt2262_sign[i]=PT2262_SIGN_IDLE;
  136.                         }
  137.                         else
  138.                         {
  139.                             return false;
  140.                         }
  141.                     }
  142.                     /*解碼成功*/
  143.                     return true;
  144.                 }
  145.             }
  146.         }
  147.     }
  148.     return false;       
  149. }

  150. void Pt2262CodingHandle( PT2262_SIGN *p_code ,int length )
  151. {
  152.     int i;
  153.    
  154.     /*起始碼*/
  155.     CODING_SET_LOW();
  156.     Delayus(12000);
  157.     CODING_SET_HIGN();
  158.    
  159.     for(i=0;i<length;i++)
  160.     {
  161.         switch(p_code[i])
  162.         {
  163.         case PT2262_SIGN_LOW:
  164.             /*0碼*/
  165.             CODING_SET_HIGN();
  166.             Delayus(380);
  167.             CODING_SET_LOW();
  168.             Delayus(1200);
  169.             CODING_SET_HIGN();
  170.             Delayus(380);
  171.             CODING_SET_LOW();
  172.             Delayus(1200);
  173.             break;
  174.         case PT2262_SIGN_HIGH:
  175.             /*1碼*/
  176.             CODING_SET_HIGN();
  177.             Delayus(1200);
  178.             CODING_SET_LOW();
  179. ……………………

  180. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼

所有資料51hei提供下載:
基于STM32F103平臺PT2262解碼及編碼程序.zip (1.64 KB, 下載次數: 189)

評分

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

查看全部評分

回復

使用道具 舉報

ID:244587 發表于 2017-11-16 08:30 | 顯示全部樓層
注意,發送的時候有個bug,需要在for循環到最后一個的時候,發送一個高脈沖即可,增加的代碼如下
if(i==11)
{
            CODING_SET_HIGN();
            Delayus(380);
            CODING_SET_LOW();
}
回復

使用道具 舉報

ID:270049 發表于 2018-1-2 10:58 | 顯示全部樓層
感謝分享!
回復

使用道具 舉報

ID:250777 發表于 2018-8-3 12:37 | 顯示全部樓層
有沒有更詳細的使用方法或者完整的工程文件?
回復

使用道具 舉報

ID:231092 發表于 2018-10-26 20:14 | 顯示全部樓層
感謝分享
回復

使用道具 舉報

ID:220853 發表于 2019-3-13 15:16 | 顯示全部樓層
感謝樓主分享
回復

使用道具 舉報

ID:170675 發表于 2019-8-10 10:45 | 顯示全部樓層
請假,如何將數據傳遞給Pt2262CodingHandle( PT2262_SIGN *p_code ,int length ); 比如我I想發送0xAA
回復

使用道具 舉報

ID:75737 發表于 2020-11-19 20:31 | 顯示全部樓層
哈哈,找到了這么老的帖子!
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲精品一区在线观看 | 伊人网在线播放 | 国产精品久久久久久亚洲调教 | 91精品国产一区二区三区动漫 | 一区视频在线播放 | 福利视频日韩 | 盗摄精品av一区二区三区 | 99精品一区二区 | 国产精品美女久久久久久免费 | 桃花av在线 | 免费看黄视频网站 | 一区二区精品 | 久久久久国产一区二区三区四区 | 久久ww| 精品一区二区三区在线视频 | 日韩精品在线播放 | 在线观看成人 | 亚洲第一av | 亚洲不卡在线观看 | 国产精品一区二区在线 | 91xxx在线观看 | 九一在线观看 | 在线播放国产一区二区三区 | 日本精品免费在线观看 | 亚洲精品视频在线看 | av黄色在线 | www.99热这里只有精品 | 91久久久久久 | 人人色视频 | 国产精品毛片一区二区三区 | 日韩在线观看精品 | 精品中文字幕在线 | 久久中文字幕一区 | 免费一区在线 | 久久亚洲一区 | 91久久久久 | 久久久九九 | 亚洲男女视频在线观看 | 国产成人jvid在线播放 | 国产欧美一区二区三区日本久久久 | 国产精品亚洲成在人线 |