找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4871|回复: 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 单片机教程网

快速回复 返回顶部 返回列表