标题: 315Mhz无线模块单片机软解码接收程序 [打印本页]

作者: liuda    时间: 2015-1-21 18:31
标题: 315Mhz无线模块单片机软解码接收程序
# include<reg52.h>
# define uint unsigned int
# define uchar unsigned char

sbit DATA=P3^2;
sbit rs=P2^6;          //1602引脚定义
sbit rw=P2^5;
sbit e=P2^7;
uchar dat,num;

uchar code table[]="0123456789ABCDEF";
uchar code table1[]="Receive:";        //液晶固定部分显示
uchar code table2[]="Re_data:0x";

void write_data (uchar dat);         //1602写数据
void write_com (uchar com);         //1602写命令
unsigned char pow(unsigned char n,unsigned char m);        //n的m次方函数
uchar receive(void);                          //接收处理函数  
void gd();                        //液晶固定部分显示

void delay (uint xms)        //1602延时
{
uint i,j;
for (i = xms; i > 0; i--)
for (j = 110; j > 0; j--);
}

void delay1(unsigned char t)//延时程序
{
unsigned char n;
for(;t>0;t--)
for(n=40;n>0;n--);  
}

unsigned char pow(unsigned char n,unsigned char m)//n的m次方函数
{
unsigned  char t,result=1;
for(t=0;t<m;t++){result=n*result;}
return result;
}

void init_1602()
{
    e = 0;        //1602初始化
write_com (0x38);
    write_com (0x0c);
write_com (0x06);
write_com (0x01);
gd();
}

/*1602液晶代码部分        ------------------------------ */
void write_com (uchar com)        //写命令
{
rs = 0;
rw = 0;
P0 = com;
delay (5);
e = 1;
delay (5);
e = 0;
}

void write_data (uchar dat)         //写数据
{
rs = 1;
rw = 0;
P0 = dat;
delay (5);
e = 1;
delay (5);
e = 0;
}

void gd()        //液晶固定部分显示
{
    write_com(0x80);
for(num=0;num<8;num++)
{
   write_data(table1[num]);
delay(5);
}
write_com(0x80+0x40);
for(num=0;num<10;num++)
{
   write_data(table2[num]);
delay(5);
}
}

uchar receive(void)//接收处理函数
{
unsigned char guid=0,result[12],i,key=0,res=0,t,time=0;
while(1)//捕获前导命令
{
while(DATA==1){t++;if(t>=90){delay1(100);return 0;}}//防止错误数据导致的死循环
if(t>=60&&t<95){t=0;key++;time=0;if(key>3)break;}//获得前导命令跳出循环,清除计时信号
else if(time>100){delay1(100);return 0;}//长0,错误信号返回0
else {t=0;time++;}//计时垒加,清除t
}  
t=0;
time=0;
for(i=1;i<13;)             //校验码及数据的接收共12位数据
{
while(DATA==1){t++;if(t>=95){delay1(100);return 0;}}//防止错误信号导致的死循环
if(t>=60&&t<95){t=0;i=1;time=0;}//去除多余的前导命令
else if(t>=28&&t<60){result[i-1]=1;i++;time=0;}//捕获数据1
else if(t>0&&t<27){result[i-1]=0;i++;time=0;}//捕获数据0
if(time>100)return 0; //消除长0的干扰确保数据正确
t=0;   //清零
time++;//计时       
}
if(result[0]==1&&result[1]==0&&result[2]==1&&result[3]==0)//判断校验码
for(i=0;i<8;i++){res+=pow(2,i)*result[11-i];}//将结果转换为十进制数据
return res;//返回得到的结果
}

void display(uchar dat)        //液晶数据显示
{
    uchar a,b;
a=dat/16;
b=dat%16;
if(a>9)
a=a+0;
if(b>9)
b=b+0;
write_com(0x80+0x4A);
write_data(table[a]);delay(5);
write_data(table[b]);delay(5);
}

void main()
{
init_1602();        //1602初始化
while(1)
{
dat=receive();
if(dat)                                  //显示
{
      write_com(0x80+0x08);
  write_data('O');delay(5);
  write_data('K');delay(5);
  write_data('!');delay(5);
  display(dat);
}
else
{
      write_com(0x80+0x08);
  write_data('N');delay(5);
  write_data('O');delay(5);
  write_data('!');delay(5);
  write_com(0x80+0x4A);
  write_data(' ');delay(5);
  write_data(' ');delay(5);
}
}
}
作者: 南天白云    时间: 2015-1-23 15:10
315Mhz无线模块单片机软解码接收程序:程序下载来看看,希望有人。
作者: ziyoufeixiang    时间: 2015-1-29 09:35
呵呵,先收藏了,马上要弄这个,屯资料!
作者: 南天白云    时间: 2015-1-31 17:24
315Mhz无线模块单片机软解码接收程序:我下载了,经过试验好像不行哦,

作者: glamor    时间: 2015-4-11 23:09
请问楼主接受灵敏度如何,怎么样保证远距离接收的可靠性
作者: bhjyqjs    时间: 2015-5-28 16:02
程序写的相当不错,赞一个
作者: hjjleon    时间: 2015-7-6 16:16
呵呵,先收藏了,马上要弄这个,屯资料!
作者: hjjleon    时间: 2015-7-6 16:16
程序写的相当不错,赞一个
作者: w835228863    时间: 2015-7-27 23:00
hjjleon 发表于 2015-7-6 16:16
呵呵,先收藏了,马上要弄这个,屯资料!

哥们,你做315m发射接收了吗?资料给我一份呗,我也要弄这个,有些不大懂,452634017@qq.com麻烦了
作者: zbysir51888    时间: 2015-8-18 22:51
我也想做一个,先下载下来。
作者: 美丽人生美    时间: 2015-10-1 23:44
我有一个牛人搞的很不错的   不过不是C   是编译后的烧录软件   很牛的
作者: 美丽人生美    时间: 2015-10-1 23:44
我有个很牛的   谁要
作者: xiakun123xyz    时间: 2016-1-2 08:31
美丽人生美 发表于 2015-10-1 23:44
我有个很牛的   谁要

我想要,加我Q838284304
作者: absflash    时间: 2016-1-12 12:09
1602显示正常,就是收不到数据,我买的315和433的接收模块咋一模一样,发射用的2262,匹配电阻需要改动吗
作者: absflash    时间: 2016-1-12 12:11
还有这个晶振多少,12和11.0592都没反应
作者: 美丽人生美    时间: 2016-4-1 13:31
没用定时器和外中断吗,听说别人编这个程序是要用的   
作者: msaf    时间: 2016-4-23 12:23
美丽人生美 发表于 2015-10-1 23:44
我有个很牛的   谁要

多牛,我要

作者: sxz538    时间: 2016-6-13 10:36
有没有配套的电路图?
作者: 3154    时间: 2016-7-14 15:40
看的不是太懂的
作者: qwqwqas    时间: 2016-11-28 18:03
美丽人生美 发表于 2015-10-1 23:44
我有个很牛的   谁要

实现无线传输了吗
作者: zqy181818    时间: 2017-3-19 19:49
不错的资料,感谢楼主的分享。
作者: dragon19790000    时间: 2017-6-1 20:42
楼主威武!!!
作者: zzh2118    时间: 2020-10-7 14:10
楼主出来解释一下啊  定时器和中断没有开 这个程序用不了吧
作者: 新乡家电维修    时间: 2020-10-11 21:05
uestchina 发表于 2015-7-11 08:11
这个不是自适应的。LZ又没有告知解码晶体,发射的电阻。实际应用还要好好研究研究。

我写的程序是自适应震荡电阻的解码程序

作者: yw125942181    时间: 2025-5-27 14:21
如何在保证通讯正常的情况下尽量降低433接收端功耗?




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1