找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

帖子
查看: 4914|回復(fù): 8
收起左側(cè)

求個(gè)最簡(jiǎn)單的315無線模塊控制的程序

  [復(fù)制鏈接]
ID:315304 發(fā)表于 2018-4-24 14:30 | 顯示全部樓層 |閱讀模式
淘寶上買的,兩塊錢的無線模塊
買了沒研究透,不會(huì)用 ,求一個(gè)最最簡(jiǎn)單的控制程序(控制一個(gè)流水燈的就行),(怕難的我就看不懂了
在這里提前謝謝大佬了
[@(C8(]QK(BYB1_8N`}PR3T.png
回復(fù)

使用道具 舉報(bào)

ID:315304 發(fā)表于 2018-4-24 14:31 | 顯示全部樓層
有人嗎,求大佬路過時(shí)·,順便回復(fù)一下
回復(fù)

使用道具 舉報(bào)

ID:46999 發(fā)表于 2018-4-24 17:07 | 顯示全部樓層
//聲明:資源來自熱心分享的某大大。感謝他的分享。自個(gè)驗(yàn)證其正確性
//自適應(yīng)頻率的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;    //定時(shí)器1,定時(shí)器0用模式1 16位計(jì)時(shí)用,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)//當(dāng)按鍵按下釋放后該值不在賦值就同通過遞減直到該值等于0
   {
    TimeCount--;//等于0后表示按鍵釋放
   }
  while(shou==0);
  while(i<24)
   {
    while(shou==0);        //等待高電平到來
    tl=TL1;
    th=TH1;
    TH1=TL1=0;         //記錄低電平長(zhǎng)度并初始化高電平頭
    l=th;
    l=((l<<8)+tl);
    if(i==0)         //處理低電平
     {
      if(l>2360)      
       {        //確認(rèn)是引導(dǎo)頭
        m=l/31;
       }
      else         //不符合規(guī)則(出錯(cuò))
       {
        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))  //長(zhǎng)為1  長(zhǎng)1777
    else if(((l>((m*3)-(m/2)))&&(l<((m*3)+(m/2)))))
     {
      i++;
      ma1<<=1; //糾正了LZ的高低位相反問題
      ma1+=1;  //糾正了LZ的高低位相反問題
     }
    else        //不符合規(guī)則出錯(cuò)
     {
      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)////解碼成功結(jié)束
     {
      
      if(TimeCount==0)//為0表示是新的一次按下對(duì)其進(jìn)行處理,如過該值大于0表示已經(jīng)按下不在處理
       {  
        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;
}
回復(fù)

使用道具 舉報(bào)

ID:26275 發(fā)表于 2018-6-18 23:45 | 顯示全部樓層
維超 發(fā)表于 2018-4-24 17:07
//聲明:資源來自熱心分享的某大大。感謝他的分享。自個(gè)驗(yàn)證其正確性
//自適應(yīng)頻率的2262解碼代碼 晶振11. ...

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

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

我這里也寫了個(gè)遙控程序,請(qǐng)幫忙看下是否有錯(cuò),本意是發(fā)射端按下任意一個(gè)按鍵, 接收端對(duì)應(yīng)的LED 能亮,但是我寫好了,也燒寫到單片機(jī)里去,就是沒反應(yīng),看來好半天也沒檢查出來問題

編碼前先定義的協(xié)議規(guī)則定義如下:
  下降沿: 1ms的高電平,隨后500us的低電平。v0
  起始位: 4ms的高電平,隨后4ms的低電平。v2
  數(shù)據(jù)1: 2ms的高電平,隨后500us的低電平。v1
  數(shù)據(jù)0: 1ms的高電平,隨后500us的低電平。v3
  結(jié)束位:4ms的低電平。
  以上是通信協(xié)議規(guī)則,只要收發(fā)雙方都遵循該協(xié)議規(guī)則,
則實(shí)現(xiàn)對(duì)接收端的多路控制。


//發(fā)射模塊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;   //開定時(shí)器0中斷
TMOD=0X01;
TH0=(65536-100)/256;
TL0=(65536-100)%256;
  EA=1;
ET0=1;
TR0=1;
TX=0;

while(1)       //發(fā)送指令0
{
  if(key0==0)
  {
    delay_315();
    while(key0==0){v3();v2();v0();v0();v0();m=0;while(m<40);}  
    dong=1;
  }   
                       
           
  if(key1==0)  //發(fā)送指令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;   //定義存取的數(shù)據(jù)
TMOD=0X01;
TH0=(65536-100)/256;   //開定時(shí)器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);   //讀取協(xié)議下降沿
   m=0;
   EX1=0;
   while(RX==1);
   if(m>35&&m<45)  //讀取協(xié)議起始位高電平
   {
    m=0;
    while(RX==0);
    if(m>35&&m<45)   //讀取協(xié)議起始位低電平
    {      
     m=0;
     while(RX==1);          //讀取數(shù)據(jù)1
     if(m>5&&m<15)a=0;
     if(m>15&&m<25)a=4;
     while(RX==0);      
     m=0;

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

     while(RX==1);   //讀取數(shù)據(jù)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ù)收到兩次數(shù)據(jù)才進(jìn)入匹配
     {
      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;
}


評(píng)分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 回帖助人的獎(jiǎng)勵(lì)!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

ID:354292 發(fā)表于 2018-6-19 14:25 | 顯示全部樓層
百度上搜索有呢
回復(fù)

使用道具 舉報(bào)

ID:26275 發(fā)表于 2018-6-19 20:52 | 顯示全部樓層

有,照搬照抄是不能用的,
回復(fù)

使用道具 舉報(bào)

ID:354993 發(fā)表于 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;
回復(fù)

使用道具 舉報(bào)

ID:387856 發(fā)表于 2019-3-3 09:45 | 顯示全部樓層
cqqwing 發(fā)表于 2018-6-18 23:45
我手上用的模塊和樓主的一樣, 不帶編解碼芯片的。

這個(gè)程序有些看不懂呢,每個(gè)人寫程序的習(xí)慣和手法 ...

嗯   這層樓的 回答不錯(cuò) 一看就懂。但是我有點(diǎn)不明白,協(xié)議里面,為什么要加個(gè)下降沿呢?有了頭碼,0碼,1碼,結(jié)束碼不就可以了嗎?不會(huì)是為了加強(qiáng)一步坑干擾吧,那可以不用了。
回復(fù)

使用道具 舉報(bào)

ID:472242 發(fā)表于 2019-3-3 21:14 | 顯示全部樓層
同紅外發(fā)射是一個(gè)道理,用你的數(shù)據(jù)合成調(diào)頻
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

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