|
/****************************************************************************************** pt2262解碼軟件修正版 使用了位操作代替前版本的位尋址,使用三個字節(jié)變量存儲獲取的數(shù)據(jù),便于以后將地址和數(shù)據(jù)進(jìn)行操作 增加了兩次數(shù)據(jù)比對的功能,降低誤碼的干擾 2007.8.24 接受模塊的信號輸出端接INT0中斷口。。。 P1.0,p1.1上接LED顯示接受的情況。。。 用pt2262無線遙控器解碼測試通過。。。 注意:使用的是4M的晶振以減少mcu對接受模塊的干擾。。。 程序開發(fā):http://www.51hei.com 運行平臺:51hei單片機(jī)開發(fā)板+315m無線模塊,用杜邦線連接. 使用時可能要改變檢測的特征值,視遙控的中心頻率而定,可以通過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ù)程序 通過探頭flagF的值判斷是否接收到sync信號 接收到的數(shù)據(jù)存入dataTMP的三個變量中 連續(xù)按鍵的確認(rèn): 等待i9的值變?yōu)?; 延時 再次檢測i9的值是否為0; 是0則認(rèn)為按鍵中止。 *************************************************************/ int0() interrupt 0 { tmp=TH0*256+TL0; TH0=0x0; TL0=0x0; if(flagF) { if(tmp>1295&&tmp<1300) {p11=~p11;flagF=0;} } else { if(i9<9) dataTMP=&dataTMP0; else {dataTMP=i9<17?(&dataTMP1):(&dataTMP2);} (*dataTMP)<<=1; if(tmp>100&&tmp<150) (*dataTMP)=(*dataTMP)|0x01; else if(!(tmp>10&&tmp<100)) { flagF=1; i9=0; } if(i9==24) { if(datacheck!=dataTMP2) datacheck=dataTMP2; else datacheck=0xff; /*按鍵確認(rèn)*/ } i9++; } }
/******************* 延時函數(shù) 時間:1-2s *******************/ void delay(unsigned char k) {unsigned char i; for(i=0;i<k;i++) for(tmp=0;tmp<10300;tmp++); }
|