標(biāo)題:
基于STM32F103平臺(tái)PT2262解碼程序-親測可用
[打印本頁]
作者:
蘇州單片機(jī)項(xiàng)目
時(shí)間:
2017-11-15 16:50
標(biāo)題:
基于STM32F103平臺(tái)PT2262解碼程序-親測可用
附件是基于STM32F103平臺(tái)PT2262解碼程序,采用定時(shí)器精確定時(shí),不使用中斷,親測有效,并且集成了PT2262組幀程序,調(diào)用即可發(fā)送。使用邏輯分析儀對比波形,發(fā)送波形與標(biāo)準(zhǔn)波形基本一致!
0.png
(6.98 KB, 下載次數(shù): 97)
下載附件
2017-11-15 20:30 上傳
單片機(jī)源程序如下:
#include "includes.h"
/*******************************************************************************
* 結(jié)構(gòu)體
*******************************************************************************/
typedef struct
{
unsigned char high1;
unsigned char low1;
unsigned char high2;
unsigned char low2;
}PT2262_LEVEL; /*PT2262電平脈沖*/
/*******************************************************************************
* 局部變量
*******************************************************************************/
PT2262_SIGN pt2262_sign[12];
/*******************************************************************************
* 程序
*******************************************************************************/
bool Pt2262DecodeHandle(void)
{
int i=0,count=0;
PT2262_LEVEL pt2262_level[12]; /*pt2262一組12個(gè)信號(hào),1個(gè)信號(hào)2高2低*/
unsigned long sign_buffer[48]={0}; /*信號(hào)緩存4*12*/
if( ReadPt2262PinState()==0 ) /*低電平*/
{
while( !ReadPt2262PinState() )
{
/*計(jì)算低電平持續(xù)時(shí)間*/
Delayus(1);/*實(shí)際延遲3.5us左右*/
if( (count++)>5800 )
{
return false;
}
}
if( count>1715&&count<4286 )/*找到同步碼*/
{
while(1)
{
if( ReadPt2262PinState() )/*高電平*/
{
count=0;
while( ReadPt2262PinState() )
{
/*計(jì)算高電平持續(xù)時(shí)間*/
Delayus(1);
if( (count++)>514 )
{
return false;
}
}
if(count<28) /*高電平太短*/
{
return false;
}
sign_buffer[i]=count; /*記錄電平持續(xù)時(shí)間*/
i++;
}
if( !ReadPt2262PinState() ) /*低電平*/
{
count=0;
while( !ReadPt2262PinState() )
{
/*計(jì)算低電平持續(xù)時(shí)間*/
Delayus(1);
if( (count++)>514 )
{
return false;
}
}
if(count<28) /*低電平太短*/
{
return false;
}
sign_buffer[i]=count; /*記錄電平持續(xù)時(shí)間*/
i++;
}
if(i>47) /*當(dāng)i=48時(shí),表明已連續(xù)記錄48個(gè)有效脈沖*/
{
for(i=0;i<12;i++)
{
/*窄電平記為0 寬電平記為1*/
if(sign_buffer[i*4]<114)
{
pt2262_level[i].high1=0;
}
else
{
pt2262_level[i].high1=1;
}
if(sign_buffer[i*4+1]<114)
{
pt2262_level[i].low1=0;
}
else
{
pt2262_level[i].low1=1;
}
if(sign_buffer[i*4+2]<114)
{
pt2262_level[i].high2=0;
}
else
{
pt2262_level[i].high2=1;
}
if(sign_buffer[i*4+3]<114)
{
pt2262_level[i].low2=0;
}
else
{
pt2262_level[i].low2=1;
}
if( pt2262_level[i].high1==0&&pt2262_level[i].low1==1&&\
pt2262_level[i].high2==0&&pt2262_level[i].low2==1)
{
pt2262_sign[i]=PT2262_SIGN_LOW;
}
else if( pt2262_level[i].high1==1&&pt2262_level[i].low1==0&&\
pt2262_level[i].high2==1&&pt2262_level[i].low2==0)
{
pt2262_sign[i]=PT2262_SIGN_HIGH;
}
else if( pt2262_level[i].high1==0&&pt2262_level[i].low1==1&&\
pt2262_level[i].high2==1&&pt2262_level[i].low2==0)
{
pt2262_sign[i]=PT2262_SIGN_IDLE;
}
else
{
return false;
}
}
/*解碼成功*/
return true;
}
}
}
}
return false;
}
void Pt2262CodingHandle( PT2262_SIGN *p_code ,int length )
{
int i;
/*起始碼*/
CODING_SET_LOW();
Delayus(12000);
CODING_SET_HIGN();
for(i=0;i<length;i++)
{
switch(p_code[i])
{
case PT2262_SIGN_LOW:
/*0碼*/
CODING_SET_HIGN();
Delayus(380);
CODING_SET_LOW();
Delayus(1200);
CODING_SET_HIGN();
Delayus(380);
CODING_SET_LOW();
Delayus(1200);
break;
case PT2262_SIGN_HIGH:
/*1碼*/
CODING_SET_HIGN();
Delayus(1200);
CODING_SET_LOW();
……………………
…………限于本文篇幅 余下代碼請從51黑下載附件…………
復(fù)制代碼
所有資料51hei提供下載:
基于STM32F103平臺(tái)PT2262解碼及編碼程序.zip
(1.64 KB, 下載次數(shù): 189)
2017-11-15 16:45 上傳
點(diǎn)擊文件名下載附件
基于STM32F103平臺(tái)PT2262解碼程序
下載積分: 黑幣 -5
作者:
蘇州單片機(jī)項(xiàng)目
時(shí)間:
2017-11-16 08:30
注意,發(fā)送的時(shí)候有個(gè)bug,需要在for循環(huán)到最后一個(gè)的時(shí)候,發(fā)送一個(gè)高脈沖即可,增加的代碼如下
if(i==11)
{
CODING_SET_HIGN();
Delayus(380);
CODING_SET_LOW();
}
作者:
lzyscgy
時(shí)間:
2018-1-2 10:58
感謝分享!
作者:
碧空痕
時(shí)間:
2018-8-3 12:37
有沒有更詳細(xì)的使用方法或者完整的工程文件?
作者:
qsj_ic
時(shí)間:
2018-10-26 20:14
感謝分享
作者:
li121788501
時(shí)間:
2019-3-13 15:16
感謝樓主分享
作者:
nicole.088
時(shí)間:
2019-8-10 10:45
請假,如何將數(shù)據(jù)傳遞給Pt2262CodingHandle( PT2262_SIGN *p_code ,int length ); 比如我I想發(fā)送0xAA
作者:
vince
時(shí)間:
2020-11-19 20:31
哈哈,找到了這么老的帖子!
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1