分别编译下载代码到at89c52和stm32f103c8t6中
对于51单片机收发数据显示在了lcd1602上
对于stm32 数据则是显示在0.96寸的oled上
屏幕只是用来查看调试用,对于用不到屏幕的,把屏幕相关代码删掉就可以了
该代码可以用于
51------51
51------32
32-----32
这三种之间任意搭配 都是兼容的
具体接线如下
也可以下载下面的百度网盘链接自己打开工程文件查看更改
51接线 也可自己更改
stm32f103
可以看明白吧 就比如ce接gpiob下的第5个io口
对于显示屏我这么接的
stm32:0.96寸的oled
51:lcd1602
接下来是主要内容了
主函数文件下的两个数组分别用来存数据用 ,
接收到数据后就会把数据存在里面。把需要发送的数据放数组2里面,然后调用writfifo();函数 ,就发射出去了。(括号里填写发送数组里的几个字节)。
对于接收调用readfifo();函数 ,然后就会把接收到的数据存放到数组1里.。
void main()
{unsigned char a=0;
LCD_Init();
nrfinit();
while(1)
{
while(a==0)//a是用来判断选择发射还是接收模式的
{if(readdata(0x00)!=0x0f||readdata(0x1d)!=0x40){mode(1);}//判断是不是进入了接收模式
readfifo();LCD_ShowString(1,1,"mode resive");//lcd1602显示模式
LCD_ShowNum(2,1,shuju1[0],2);LCD_ShowNum(2,4,shuju1[1],2);
LCD_ShowNum(2,7,shuju1[30],2);LCD_ShowNum(2,10,shuju1[31],2);
LCD_ShowNum(2,14,shuju1[2],2);
//这几行是显示接收到的数据 注意shuju1[].shuju1[]这两个数组的第零位不可用 是用来显示这次传输了多少个字节
delay1ms(100);
if(P3_1==0){a++;delay1ms(1000);}
}
while(a==1)
{if(readdata(0x00)!=0x0e||readdata(0x1d)!=0x40){mode(0);}
LCD_ShowString(1,1,"mode shoot");
delay1ms(100);
if(P3_2==0){writefifo(3);}
if(P3_1==0){a--;delay1ms(1000);}
}
}
}
对于相关子函数在这
注意:本代码包括通讯协议等全部为作者本人自己参考芯片手册编写
代码全网独此一份 如需转发或者推广 希望大家附上本人原csdn链接
开源仅供大家学习 、了解这个模块 因此代码写的不是特别规范
文件百度网盘下载:提取码 6y7lhttps://pan.baidu.com/s/18hk_kVFp6x9YpMCAhengdg?pwd=6y7l < 点击这下载