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

標題: 求個最簡單的315無線模塊控制的程序 [打印本頁]

作者: 灰叔    時間: 2018-4-24 14:30
標題: 求個最簡單的315無線模塊控制的程序
淘寶上買的,兩塊錢的無線模塊
買了沒研究透,不會用 ,求一個最最簡單的控制程序(控制一個流水燈的就行),(怕難的我就看不懂了
在這里提前謝謝大佬了

[@(C8(]QK(BYB1_8N`}PR3T.png (49.91 KB, 下載次數: 65)

[@(C8(]QK(BYB1_8N`}PR3T.png

作者: 灰叔    時間: 2018-4-24 14:31
有人嗎,求大佬路過時·,順便回復一下
作者: 維超    時間: 2018-4-24 17:07
//聲明:資源來自熱心分享的某大大。感謝他的分享。自個驗證其正確性
//自適應頻率的2262解碼代碼 晶振11.0592到22.1184MHZ
#include"AT89x52.h"
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit shou = P3^2;
//=========================================================================
void InitTimer0(void)
{
  TMOD = 0x11;    //定時器1,定時器0用模式1 16位計時用,12T
  EA = 1;
  ET0 = 1;
  ET1=1;
}
//========================================================================
void main(void)
{
  InitTimer0();
  EX0=1;
  while(1);
}
//========================================================================
void ex0(void) interrupt 0
{
  bit err=0;
  uchar i,tl,th,ma1,ma2,ma3;
  uchar TimeCount;
  uint l,m;
  EX0=0;
  TR1=1;
  i=0;
  if(TimeCount>0)//當按鍵按下釋放后該值不在賦值就同通過遞減直到該值等于0
   {
    TimeCount--;//等于0后表示按鍵釋放
   }
  while(shou==0);
  while(i<24)
   {
    while(shou==0);        //等待高電平到來
    tl=TL1;
    th=TH1;
    TH1=TL1=0;         //記錄低電平長度并初始化高電平頭
    l=th;
    l=((l<<8)+tl);
    if(i==0)         //處理低電平
     {
      if(l>2360)      
       {        //確認是引導頭
        m=l/31;
       }
      else         //不符合規則(出錯)
       {
        i=0;
        TR1=0;
        TH1=TL1=0;
        err=1;
        break;
       }
     }
    else
     {
     if(((l>(m-(m/4)))&&(l<(m+(m/4))))||((l>((m*3)-(m/2)))&&(l<((m*3)+(m/2)))));
     else
      {
       i=0;
       TR1=0;
       TH1=TL1=0;
       err=1;
       break;
      }        
     }
    while(shou==1);      //等待低電平到來
    th=TH1;
    tl=TL1;
    TH1=TL1=0;
    l=th;
    l=((l<<8)+tl);
    //  if((l>460)&&(l<760))    //短為0  短610
    if(((l>(m-(m/4)))&&(l<(m+(m/4)))))
     {
      i++;
      ma1<<=1; //糾正了LZ的高低位相反問題
     }
    //  else if((l>1577)&&(l<1977))  //長為1  長1777
    else if(((l>((m*3)-(m/2)))&&(l<((m*3)+(m/2)))))
     {
      i++;
      ma1<<=1; //糾正了LZ的高低位相反問題
      ma1+=1;  //糾正了LZ的高低位相反問題
     }
    else        //不符合規則出錯
     {
      i=0;
      TR1=0;
      TH1=TL1=0;
      err=1;
      break;
     }
    if(i==8)
     {
      ma3=ma1;
      //SBUF=ma3;
      //P1=ma3;
     }
    if(i==16)
     {
      ma2=ma1;
      //SBUF=ma2;
      //P1=ma2;
     }
    if(i==24)////解碼成功結束
     {
      
      if(TimeCount==0)//為0表示是新的一次按下對其進行處理,如過該值大于0表示已經按下不在處理
       {  
        ACC=ma1;
        if(ACC==0xC0)
        //P1=0xef;
        P1_0=~P1_0;
        if(ACC==0x30)
        //P1=0xdf;
        P1_1=~P1_1;
        if(ACC==0x0c)
        //P1=0xbf;
        P1_2=~P1_2;
        if(ACC==0x03)
        //P0=0x7f;
        P1_3=~P1_3;
       }
      TimeCount=30;//防止按鍵沒放開直在取反,保證按1次只做1次處理
     }
   }
  TR1=0;
  TH1=0;
  TL1=0;
  EX0=1;
}

作者: cqqwing    時間: 2018-6-18 23:45
維超 發表于 2018-4-24 17:07
//聲明:資源來自熱心分享的某大大。感謝他的分享。自個驗證其正確性
//自適應頻率的2262解碼代碼 晶振11. ...

我手上用的模塊和樓主的一樣, 不帶編解碼芯片的。

這個程序有些看不懂呢,每個人寫程序的習慣和手法不太一樣,基本是邊靠猜想,邊理解,但對于這個理解實在不夠深,

我這里也寫了個遙控程序,請幫忙看下是否有錯,本意是發射端按下任意一個按鍵, 接收端對應的LED 能亮,但是我寫好了,也燒寫到單片機里去,就是沒反應,看來好半天也沒檢查出來問題

編碼前先定義的協議規則定義如下:
  下降沿: 1ms的高電平,隨后500us的低電平。v0
  起始位: 4ms的高電平,隨后4ms的低電平。v2
  數據1: 2ms的高電平,隨后500us的低電平。v1
  數據0: 1ms的高電平,隨后500us的低電平。v3
  結束位:4ms的低電平。
  以上是通信協議規則,只要收發雙方都遵循該協議規則,
則實現對接收端的多路控制。


//發射模塊c程序

#include<reg52.h>
#define uchar unsigned char
sbit key0=P3^4;
sbit key1=P3^5;
sbit key2=P3^6;
sbit key3=P3^7;
sbit TX=P2^0;

uchar m;

void v0();
void v1();
void v2();
void v3();
void delay_315();

void main()
{
uchar i;
bit dong=0;   //開定時器0中斷
TMOD=0X01;
TH0=(65536-100)/256;
TL0=(65536-100)%256;
  EA=1;
ET0=1;
TR0=1;
TX=0;

while(1)       //發送指令0
{
  if(key0==0)
  {
    delay_315();
    while(key0==0){v3();v2();v0();v0();v0();m=0;while(m<40);}  
    dong=1;
  }   
                       
           
  if(key1==0)  //發送指令1
  {
   delay_315();
   while(key1==0){v3();v2();v0();v0();v1();m=0;while(m<40);}
   dong=1;
  }        
                  
  
  if(key2==0)
  {
   delay_315();
   while(key2==0){v3();v2();v0();v1();v0();m=0;while(m<40);}
   dong=1;   
  }

   if(key3==0)
  {
   delay_315();
   while(key3==0){v3();v2();v0();v1();v1();m=0;while(m<40);}
   dong=1;  
  }

  if(dong==1)
  {
   dong=0;
   for(i=0;i<5;i++){v3();v2();v1();v0();v0();m=0;while(m<40);}
   }
}
}


void timer0() interrupt 1
{
TH0=(65536-100)/256;

TL0=(65536-100)%256;
m++;
TF0=0;
}


void v0()         // 1MS高電平 500us低電平
{
m=0;
while(m<10)
TX=1;
m=0;
while(m<5)
TX=0;
}

void v1()        // 2MS高電平 500us低電平
{
m=0;
while(m<20)
TX=1;
m=0;
while(m<5)
TX=0;  
}

void v2()       // 4MS高電平 4ms低電平
{
m=0;
while(m<40)
TX=1;
m=0;
while(m<40)
TX=0;  
}

void v3()        // 1MS高電平 500us低電平
{
m=0;
while(m<10)
TX=1;
m=0;
while(m<5)
TX=0;  

}


void delay_315()
{
uchar i,j;
for(i=0;i<10;i++)
  for(j=0;j<110;j++);
}






//接收程序  接收程序  接收程序







#include<reg52.h>
#define uchar unsigned char
sbit RX=P3^3;
sbit red0=P0^0;
sbit red1=P0^1;
sbit red2=P0^2;
sbit red3=P0^3;
sbit red4=P0^4;



uchar m;
bit n;
void main()
{
uchar a,b,c,p,x,y;   //定義存取的數據
TMOD=0X01;
TH0=(65536-100)/256;   //開定時器0
TL0=(65536-100)%256;  
EA=1;
ET0=1;
TR0=1;
EX1=1;
IT1=1;
P0=0XFF;
p=5;
x=0;

while(1)
{
  if(n==1)
  {
   while(RX==0);   //讀取協議下降沿
   m=0;
   EX1=0;
   while(RX==1);
   if(m>35&&m<45)  //讀取協議起始位高電平
   {
    m=0;
    while(RX==0);
    if(m>35&&m<45)   //讀取協議起始位低電平
    {      
     m=0;
     while(RX==1);          //讀取數據1
     if(m>5&&m<15)a=0;
     if(m>15&&m<25)a=4;
     while(RX==0);      
     m=0;

     while(RX==1);   //讀取數據2
     if(m>5&&m<15)b=0;
     if(m>15&&m<25)b=2;
     while(RX==0);      
     m=0;

     while(RX==1);   //讀取數據3
     if(m>5&&m<15)c=0;
     if(m>15&&m<25)c=1;
     while(RX==0);      
     m=0;
   

     p=a+b+c;     
     x++;
     if(x==1)y=p;   
     if(x==2)     //連續收到兩次數據才進入匹配
     {
      x=0;
      if(y==p)
      {
       switch(p)
       {

        case 0:red0=0;red1=1;red2=1;red3=1;red4=1;
         break;
        case 1:red0=1;red1=0;red2=1;red3=1;red4=1;
         break;
        case 2:red0=1;red1=1;red2=0;red3=1;red4=1;
         break;
        case 3:red0=1;red1=1;red2=1;red3=0;red4=1;
         break;  
        case 4:red0=1;red1=1;red2=1;red3=1;red4=0;
         break;
       }
      }  
     }
    }
   }   
  }   
}
}



void INT_1() interrupt 2
{
n=1;
}

void timer0() interrupt 1  
{
   
TH0=(65536-100)/256;  
TL0=(65536-100)%256;
m++;
TF0=0;
}



作者: lsqm18    時間: 2018-6-19 14:25
百度上搜索有呢
作者: cqqwing    時間: 2018-6-19 20:52
lsqm18 發表于 2018-6-19 14:25
百度上搜索有呢

有,照搬照抄是不能用的,
作者: 51啊    時間: 2018-6-20 10:52
while(RX==1);  
     if(m>5&&m<15)b=0;
     if(m>15&&m<25)b=2;
     while(RX==0);      
     m=0;
作者: liuhailan5757    時間: 2019-3-3 09:45
cqqwing 發表于 2018-6-18 23:45
我手上用的模塊和樓主的一樣, 不帶編解碼芯片的。

這個程序有些看不懂呢,每個人寫程序的習慣和手法 ...

嗯   這層樓的 回答不錯 一看就懂。但是我有點不明白,協議里面,為什么要加個下降沿呢?有了頭碼,0碼,1碼,結束碼不就可以了嗎?不會是為了加強一步坑干擾吧,那可以不用了。
作者: shuisheng60    時間: 2019-3-3 21:14
同紅外發射是一個道理,用你的數據合成調頻




歡迎光臨 (http://www.raoushi.com/bbs/) Powered by Discuz! X3.1