欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

專注電子技術學習與研究
當前位置:單片機教程網 >> MCU設計實例 >> 瀏覽文章

用51單片機中斷法解碼pt2262無線遙控器

作者:佚名   來源:本站原創   點擊數:  更新時間:2009年09月18日   【字體:

/******************************************************************************************
pt2262解碼軟件修正版
使用了位操作代替前版本的位尋址,使用三個字節變量存儲獲取的數據,便于以后將地址和數據進行操作
增加了兩次數據比對的功能,降低誤碼的干擾
2007.8.24
接受模塊的信號輸出端接INT0中斷口。。。
P1.0,p1.1上接LED顯示接受的情況。。。
用pt2262無線遙控器解碼測試通過。。。
注意:使用的是4M的晶振以減少mcu對接受模塊的干擾。。。
程序開發:http://www.raoushi.com
運行平臺:51hei單片機開發板+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)
 {
  /**********編碼解析后執行代碼*******************


  ***********************/
 }   
}
/*************************************************************
中斷服務程序
通過探頭flagF的值判斷是否接收到sync信號
接收到的數據存入dataTMP的三個變量中
連續按鍵的確認:
   等待i9的值變為0;
 延時
   再次檢測i9的值是否為0;
   是0則認為按鍵中止。
*************************************************************/
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;  /*按鍵確認*/ 
  }
  i9++;
 }
}

/*******************
延時函數
  時間:1-2s
*******************/
void delay(unsigned char k)
{unsigned char i; 
for(i=0;i<k;i++)
for(tmp=0;tmp<10300;tmp++);  
}
 

關閉窗口