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

標題: 基于STM32F103平臺PT2262解碼程序-親測可用 [打印本頁]

作者: 蘇州單片機項目    時間: 2017-11-15 16:50
標題: 基于STM32F103平臺PT2262解碼程序-親測可用
附件是基于STM32F103平臺PT2262解碼程序,采用定時器精確定時,不使用中斷,親測有效,并且集成了PT2262組幀程序,調用即可發送。使用邏輯分析儀對比波形,發送波形與標準波形基本一致!


單片機源程序如下:
  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)



作者: 蘇州單片機項目    時間: 2017-11-16 08:30
注意,發送的時候有個bug,需要在for循環到最后一個的時候,發送一個高脈沖即可,增加的代碼如下
if(i==11)
{
            CODING_SET_HIGN();
            Delayus(380);
            CODING_SET_LOW();
}
作者: lzyscgy    時間: 2018-1-2 10:58
感謝分享!
作者: 碧空痕    時間: 2018-8-3 12:37
有沒有更詳細的使用方法或者完整的工程文件?
作者: qsj_ic    時間: 2018-10-26 20:14
感謝分享
作者: li121788501    時間: 2019-3-13 15:16
感謝樓主分享
作者: nicole.088    時間: 2019-8-10 10:45
請假,如何將數據傳遞給Pt2262CodingHandle( PT2262_SIGN *p_code ,int length ); 比如我I想發送0xAA
作者: vince    時間: 2020-11-19 20:31
哈哈,找到了這么老的帖子!




歡迎光臨 (http://m.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 日韩一区二区三区在线 | 久久精品视 | 亚洲免费小视频 | 日韩在线播放视频 | 午夜影院免费 | 日韩欧美在线观看 | 成人精品在线视频 | 天堂影院av | 成人久久av | 日本高清中文字幕 | 亚洲综合第一页 | 六十路av | 欧美一区二区三 | 精品毛片一区二区三区 | 欧美成人精品欧美一级乱黄 | 亚洲综合在线视频 | 在线观看黄网 | 免费一级黄色录像 | 啪啪网站免费 | 黄色av观看 | 日韩二三区 | 涩五月婷婷 | 啪啪综合网 | 黄色片视频网站 | 欧美大片91 | 青青国产在线 | 婷婷丁香激情 | 一区二区三区四区在线视频 | 久热在线 | 国产精品国产三级国产 | 91插插插插插 | 成人亚洲精品 | 免费一区二区三区 | 欧美黄色三级视频 | 国产九九热 | 波多野结衣一区二区三区在线观看 | 97av视频 | 91超碰在线观看 | 亚洲精品福利视频 | 精品少妇v888av| 午夜你懂的 |