久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4857|回復: 8
打印 上一主題 下一主題
收起左側

求個最簡單的315無線模塊控制的程序

  [復制鏈接]
跳轉到指定樓層
樓主
淘寶上買的,兩塊錢的無線模塊
買了沒研究透,不會用 ,求一個最最簡單的控制程序(控制一個流水燈的就行),(怕難的我就看不懂了
在這里提前謝謝大佬了

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

[@(C8(]QK(BYB1_8N`}PR3T.png
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏2 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:315304 發表于 2018-4-24 14:31 | 只看該作者
有人嗎,求大佬路過時·,順便回復一下
回復

使用道具 舉報

板凳
ID:46999 發表于 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;
}
回復

使用道具 舉報

地板
ID:26275 發表于 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;
}


評分

參與人數 1黑幣 +50 收起 理由
admin + 50 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

5#
ID:354292 發表于 2018-6-19 14:25 | 只看該作者
百度上搜索有呢
回復

使用道具 舉報

6#
ID:26275 發表于 2018-6-19 20:52 | 只看該作者
lsqm18 發表于 2018-6-19 14:25
百度上搜索有呢

有,照搬照抄是不能用的,
回復

使用道具 舉報

7#
ID:354993 發表于 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;
回復

使用道具 舉報

8#
ID:387856 發表于 2019-3-3 09:45 | 只看該作者
cqqwing 發表于 2018-6-18 23:45
我手上用的模塊和樓主的一樣, 不帶編解碼芯片的。

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

嗯   這層樓的 回答不錯 一看就懂。但是我有點不明白,協議里面,為什么要加個下降沿呢?有了頭碼,0碼,1碼,結束碼不就可以了嗎?不會是為了加強一步坑干擾吧,那可以不用了。
回復

使用道具 舉報

9#
ID:472242 發表于 2019-3-3 21:14 | 只看該作者
同紅外發射是一個道理,用你的數據合成調頻
回復

使用道具 舉報

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

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 日本a∨精品中文字幕在线 亚洲91视频 | 日韩视频在线免费观看 | www.蜜桃av | av一区在线观看 | 国产精品美女www | 91欧美激情一区二区三区成人 | 99久久久国产精品免费消防器 | 国产一级视频在线观看 | 亚洲成人午夜在线 | 亚洲精品99| 成人精品视频免费 | 精品熟人一区二区三区四区 | 欧美日韩在线视频一区二区 | 成人免费共享视频 | 精品久久网| 免费毛片网 | 亚洲美乳中文字幕 | 中文字幕免费在线观看 | 日韩在线精品强乱中文字幕 | 九九热这里只有精品在线观看 | 日韩午夜 | 日日操天天射 | 国产探花在线精品一区二区 | 成人一区二区三区视频 | 日本久久www成人免 成人久久久久 | 亚洲综合区 | 成人网av | 欧美一区二区三区在线免费观看 | 国产成人精品亚洲日本在线观看 | 欧美一级黑人aaaaaaa做受 | 国产精品99久久久久久宅男 | 日韩精品在线视频免费观看 | 黑人性hd | 一级高清免费毛片 | 久久成人一区 | 亚洲国产欧美一区 | 情侣酒店偷拍一区二区在线播放 | 男女午夜激情视频 | wwww.xxxx免费 | 中文在线亚洲 | 久久机热|