用51單片機(jī)中斷法解碼pt2262無(wú)線遙控器
/***********************************************
pt2262解碼軟件修正版
使用了位操作代替前版本的位尋址,使用三個(gè)字節(jié)變量存儲(chǔ)獲取的數(shù)據(jù),便于以后將地址和數(shù)據(jù)進(jìn)行操作
增加了兩次數(shù)據(jù)比對(duì)的功能,降低誤碼的干擾
2007.8.24
接受模塊的信號(hào)輸出端接INT0中斷口。。。
P1.0,p1.1上接LED顯示接受的情況。。。
用pt2262無(wú)線遙控器解碼測(cè)試通過(guò)。。。
注意:使用的是4M的晶振以減少mcu對(duì)接受模塊的干擾。。。
程序開(kāi)發(fā):http://www.51hei.com
運(yùn)行平臺(tái):51hei單片機(jī)開(kāi)發(fā)板+315m無(wú)線模塊,用杜邦線連接.
使用時(shí)可能要改變檢測(cè)的特征值,視遙控的中心頻率而定,可以通過(guò)pt2262上的電阻改變*********************************************/
#include reg52.h>
unsigned int tmp,t1=0;
unsigned char i9=0,t2;
char *dataTMP;
unsigned char dataTMP0,dataTMP1,dataTMP2,datacheck;
unsigned char bdata oeCON;
sbit UD0=oeCON^0;
sbit UD1=oeCON^1;
sbit OC0=oeCON^2;
sbit OC1=oeCON^3;
sbit p10=P1^0;
sbit p11=P1^1;
sbit p32=P3^2;
bit flagF=1,press;
void up_down();
void open_close();
void delay(unsigned char);
void main()
{IT0=1;
EX0=1;
TMOD=0x09;
EA=1;
TR0=1;
P3=0xff;
UD0=1;
UD1=0;
OC0=1;
OC1=0;
while(1)
{p10=p32;
if(datacheck==0xff)
{
/**********編碼解析后執(zhí)行代碼*******************
***********************/
}
}
/*************************************************************
中斷服務(wù)程序
通過(guò)探頭flagF的值判斷是否接收到sync信號(hào)
接收到的數(shù)據(jù)存入dataTMP的三個(gè)變量中
連續(xù)按鍵的確認(rèn):
等待i9的值變?yōu)?;
延時(shí)
再次檢測(cè)i9的值是否為0;
是0則認(rèn)為按鍵中止。
*************************************************************/
int0() interrupt 0
{
tmp=TH0*256+TL0;
TH0=0x0;
TL0=0x0;
if(flagF)
{
if(tmp>1295tmp1300)
{p11=~p11;flagF=0;}
}
else
{
if(i99) dataTMP=dataTMP0;
else
{dataTMP=i917?(dataTMP1):(dataTMP2);}
(*dataTMP)=1;
if(tmp>100tmp150)
(*dataTMP)=(*dataTMP)|0x01;
else if(!(tmp>10tmp100))
{
flagF=1;
i9=0;
}
if(i9==24)
{
if(datacheck!=dataTMP2)
datacheck=dataTMP2;
else
datacheck=0xff;/*按鍵確認(rèn)*/
}
i9++;
}
}
/*******************
延時(shí)函數(shù)
時(shí)間:1-2s
*******************/
void delay(unsigned char k)
{unsigned char i;
for(i=0;ik;i++)
for(tmp=0;tmp10300;tmp++);
}
萬(wàn)能遙控器相關(guān)文章:萬(wàn)能遙控器代碼
51單片機(jī)相關(guān)文章:51單片機(jī)教程
評(píng)論