找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 5462|回復(fù): 0
收起左側(cè)

學(xué)習(xí)型PT2262無線遙控開關(guān)程序(315M)--未驗(yàn)證

[復(fù)制鏈接]
ID:105323 發(fā)表于 2016-2-22 00:33 | 顯示全部樓層 |閱讀模式





/********************************************************************
    學(xué)習(xí)型PT2262無線遙控開關(guān)程序
STC系列89C58RD 晶振11.0952MHZ ~ 12MHZ
發(fā)射芯片采用的是PT2262芯片用4.7M的震蕩電阻315M發(fā)射
通電后運(yùn)行指示燈閃爍,按動(dòng)按鈕開關(guān)后P0.4輸出取反,當(dāng)輸出為低時(shí)運(yùn)行指示燈熄滅
長按按鈕開關(guān)約5s以上待運(yùn)行指示燈點(diǎn)亮?xí)r再松開按鈕則已進(jìn)入鍵值遙控學(xué)習(xí)狀態(tài)。
NEC編碼方式類型的搖控器對(duì)準(zhǔn)紅外頭,按下后要學(xué)習(xí)的鍵,待運(yùn)行指示燈轉(zhuǎn)為閃爍時(shí)學(xué)習(xí)完成。
P0.4  =  OUT控制高電平有效接NPN型三極管驅(qū)動(dòng)繼電器
P2.2  =  BZ輸出低電平有效接PNP型三極管驅(qū)動(dòng)蜂鳴器
P0.7  =  運(yùn)行指示燈(閃爍)+學(xué)習(xí)指示燈(長亮) 即學(xué)習(xí)板上的D1指示燈
P3.2  =  315MHZ無線一體化接收頭接(INT0)
P3.7  =  按鈕開關(guān)低電平有效 即學(xué)習(xí)板上的S5
程序設(shè)計(jì):LBQ691477940   2011-03-11
**********************************************************************/
#include<REG52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
#define RdCommand 0x01 //定義ISP的字節(jié)讀操作命令
#define PrgCommand 0x02//定義ISP的字節(jié)編程操作命令,前提是該字節(jié)是空,0FFh
#define EraseCommand 0x03// 定義ISP的扇區(qū)擦除操作命令,要某字節(jié)為空,要擦一扇區(qū)
#define WaitTime 0x01 //設(shè)置等待時(shí)間
/*=========================================================================
STC89C51 STC89C52內(nèi)置EEPROM容量起始地址2000~2FFFH      */
//#define EEPROM_ADD 0x2000
/*======================================================================
STC89C54RD ~ STC89C58RD 內(nèi)置EEPROM容量起始地址8000H~F3FFH    */
#define EEPROM_ADD 0x8000
//=======================================================================
sfr  AUXR = 0x8E; //擴(kuò)展RAM管理及禁止ALE輸出控制寄存器 (不可位尋址) 如調(diào)用AUXR=0x01;禁止ALE輸出,降低輻射干擾         
sfr ISP_DATA = 0xe2;  //SP/IAP操作時(shí)的數(shù)據(jù)寄存器。
sfr ISP_ADDRH = 0xe3;//ISP/IAP操作時(shí)的地址寄存器高八位。
sfr ISP_ADDRL = 0xe4;//ISP/IAP操作時(shí)的地址寄存器低八位。
sfr ISP_CMD = 0xe5;//ISP/IAP操作時(shí)的命令模式寄存器,須命令觸發(fā)寄存器觸發(fā)方可生效。
sfr ISP_TRIG = 0xe6;//ISP/IAP操作時(shí)的命令觸發(fā)寄存器。
sfr ISP_CONTR = 0xe7;//ISP/IAP控制寄存器。
uchar Ttotal[3],Rem_Code[3];
uchar num0,num1,num2,num3;
uint keynum,TimeCount;
//*************用到的I/O口定義**************
bit  sw_ok,ir_ok; //進(jìn)入學(xué)習(xí)狀態(tài)標(biāo)志位,接收編碼正確標(biāo)志位
sbit BEEP = P2^2; //BZ輸出
sbit OUT = P0^4; //OUT控制
sbit LED = P0^7; //運(yùn)行指示燈+學(xué)習(xí)指示燈
sbit SW = P3^7;  //手動(dòng)控制out開關(guān)
sbit hei_clk =P2^4;           //P2^4模擬串口時(shí)鐘
sbit hei_data=P2^5;          //P2^5模擬串口數(shù)據(jù)
sbit duan_x=P2^6;     //74HC573的鎖存LE端  U1  數(shù)碼管的段選端
sbit wei_x =P2^7;     //74HC573的鎖存LE端  U2  數(shù)碼管的位選端
sbit led =P1^4;
sbit Get_Rem=P3^2;//INT0,信號(hào)輸入
//================================================================
void out164(unsigned char k)
{
  unsigned char i;
  for(i=0;i<8;i++) //因?yàn)槭?/font>1字節(jié)是8位,所以循環(huán)8
   {
    hei_data=k&0x80; //將要發(fā)送的數(shù)據(jù)與上0X80(也就是取最高位)送到數(shù)據(jù)引腳上
    hei_clk=0; //時(shí)鐘引腳加低電平,以便下次拉高便可產(chǎn)生上升沿
    hei_clk=1; //低電平到高電平邊沿觸發(fā)到來,并行數(shù)據(jù)輸出至74hc164Q0-Q7
    k<<=1;     //將發(fā)送的數(shù)據(jù)左移1
   }
}
//--關(guān)閉點(diǎn)陣輸出,在每個(gè)程序的開頭調(diào)用一下可防止點(diǎn)陣時(shí)不時(shí)出現(xiàn)幾個(gè)亮條.
void guandz(void)
{
  out164(0x00);
}
//--讓所有led不亮
void guanled(void)
{
  P0=0x00;   //P0口全送高低平,讓所有段都不亮
  duan_x=1;  //u1 74hc573處于直通狀態(tài),也就是輸入0,輸出也是0,輸入1輸出也是1
  duan_x=0;  //鎖存 也就是保持74hc573現(xiàn)在這個(gè)時(shí)刻的輸出狀態(tài)一直不變
  P0=0xFF;
}
/* ================ 打開 ISP,IAP 功能 ================= */
void ISP_IAP_enable(void)
{
  EA = 0;       /* 關(guān)中斷   */
  ISP_CONTR = ISP_CONTR & 0x18;       /* 0001,1000 */
  ISP_CONTR = ISP_CONTR | WaitTime; /* 寫入硬件延時(shí) */
  ISP_CONTR = ISP_CONTR | 0x80;       /* ISPEN = 1  */
}
//===========================================
void main (void)  
{
  keynum = 0;
  AUXR=0x01;
  sw_ok = 0;
  ir_ok = 0;
  led=0;  //打開LED片選
  TMOD = 0x01; //設(shè)置定時(shí)器0為工作方式1(0000 0001)
  TH0 = (65536-45872)/256; // 11.0592mhz
  TL0 = (65536-45872)%256;
  EX0 = 1; // 設(shè)定接受INT0的中斷
  IT0 = 1;
  ET0 = 1;
  TR0 = 1;
  EA = 1;
  guandz(); //關(guān)閉點(diǎn)陣輸出
  guanled(); //關(guān)閉數(shù)碼管輸出
  num0 = byte_read(EEPROM_ADD+2);
  num2 = byte_read(EEPROM_ADD+0);
  num3 = byte_read(EEPROM_ADD+1);
  while (1)
   {
    if (SW == 0)
     {
      delay(5);
      LED = 1;
      while (SW == 0)
       {
        keynum++;
        delay(5);
        if (keynum > 500)
         {
          sw_ok = 1;//進(jìn)入學(xué)習(xí)狀態(tài)
          LED = 0;
          num1 = 0;
          TR0 = 0;
         }
       }
      if (keynum > 500)
       {
        keynum = 0;
       }
      else //短按
       {
        keynum = 0;
        OUT = ~OUT; //這里可加入控制命令,比如這里的當(dāng)解碼為01時(shí)取反P1.5
        BEEP = 0; //解碼成功后BZ響一次
        delay(10);
        BEEP = 1;
       }
     }
    if (ir_ok) //判斷是否開關(guān)已按下
     {
      ir_ok = 0;
      SectorErase(EEPROM_ADD);//擦除扇區(qū)
      arraywrite(EEPROM_ADD,3,Ttotal); //重新寫入數(shù)據(jù)
      num2 = byte_read(EEPROM_ADD+0);
      num3 = byte_read(EEPROM_ADD+1);
      num0 = byte_read(EEPROM_ADD+2); //讀出來備用
     }
    if (num1 >= 5)
     {
      num1 = 0;
      LED = ~LED;
      if(!OUT)
       {LED = 1;}
     }
   }
}
DbUwIgKt.rar (1.22 KB, 下載次數(shù): 403)

STC12C2052RD中斷方式學(xué)習(xí)型PT2262無線遙控開關(guān)視頻效果
電路請(qǐng)參閱用STC12C2052-1T單片機(jī)學(xué)習(xí)型紅外遙控開關(guān)中的電路圖,除了降壓電容改為684 / 一體化紅外接收頭改為一體化315M無線接收頭外其它完全一樣
STC系列12C2052 晶振11.0952MHZ ~ 12MHZ
發(fā)射芯片采用的是PT2262芯片用4.7M的震蕩電阻315M發(fā)射
通電后運(yùn)行指示燈閃爍,按動(dòng)按鈕開關(guān)后P1.7輸出取反,當(dāng)輸出為低時(shí)運(yùn)行指示燈熄滅
長按按鈕開關(guān)約5s以上待運(yùn)行指示燈點(diǎn)亮?xí)r再松開按鈕則已進(jìn)入鍵值遙控學(xué)習(xí)狀態(tài)。
按下后要學(xué)習(xí)的鍵,待運(yùn)行指示燈轉(zhuǎn)為閃爍時(shí)學(xué)習(xí)完成。
P1.3  =  OUT控制高電平有效接NPN型三極管驅(qū)動(dòng)繼電器
P1.0  =  BZ輸出低電平有效接PNP型三極管驅(qū)動(dòng)蜂鳴器
P1.7  =  運(yùn)行指示燈(閃爍)+學(xué)習(xí)指示燈(長亮)
P3.2  =  315MHZ無線一體化接收頭接(INT0)
P3.0  =  按鈕開關(guān)低電平有效



相關(guān)帖子

回復(fù)

使用道具 舉報(bào)

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表