您好,欢迎来到微智科技网。
搜索
您的当前位置:首页51单片机编码控制315无线模块传送指令

51单片机编码控制315无线模块传送指令

来源:微智科技网


无线电编码程序设计思想

该项目利用单通道无线电实现了多路遥控功能。遥控距离100m左右。

单通道无线电路若想实现多路遥控,必须对无线电进行编码,该项目利用单片机进行编解码,实现了16路无线电控制。在进行无线电编码前必须先定义一个协议规则。

现定义如下:

下降沿: 1ms的高电平,随后500us的低电平。v0

起始位: 4ms的高电平,随后4ms的低电平。v2

数据1: 2ms的高电平,随后500us的低电平。v1

数据0: 1ms的高电平,随后500us的低电平。v3

结束位:4ms的低电平。

以上就是通信协议规则,只要无线电收发双方都遵循该协议规则,则实现对小车的多路控制将非常容易。

//发射模块c程序

#include

#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) {

if(key0==0)

//发送指令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() {

m=0;

while(m<20)

TX=1;

// 2MS高电平 500us低电平

m=0;

while(m<5)

TX=0;

}

void v2() {

m=0;

while(m<40)

TX=1;

m=0;

while(m<40)

TX=0;

}

// 4MS高电平 4ms低电平

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; TL0=(65536-100)%256; EA=1;

ET0=1;

TR0=1;

EX1=1;

IT1=1;

P0=0XFF;

p=5;

//开定时器0

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;

}

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- 7swz.com 版权所有 赣ICP备2024042798号-8

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务