标题:
STM32+PT100热敏电阻测温nrf24L01无线通信程序
[打印本页]
作者:
彧龍
时间:
2018-12-21 23:39
标题:
STM32+PT100热敏电阻测温nrf24L01无线通信程序
用于PT100的测量采集,并通过NRF通信。核心包括电压采集与数据转换与发送。
单片机源程序如下:
#include "led.h"
#include "delay.h"
#include "key.h"
#include "sys.h"
#include "lcd.h"
#include "usart.h"
#include "24l01.h"
#include "adc.h"
u8 s_zb[10]={0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39};
u8 Cs_cl[14]={0xD6,0xD8,0xD0,0xC2,0xBF,0xAA,0xCA,0xBC,0xB2,0xE2,0xC1,0xBF,0x0D,0x0A};
void Vccc(float dy);
void Temc(float wd);
void Ssdc(float sd);
int main(void)
{ int k=0;
u16 adcx;
float T,S,V;
u8 RX_Buf[4]; //只存4位
Adc_Init();
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置中断优先级分组为组2:2位抢占优先级,2位响应优先级
delay_init(); //延时函数初始化
uart_init(115200); //串口初始化为115200
LED_Init();
NRF24L01_Init(); //NRF24L01初始化
NRF24L01_RX_Mode(); //接受模式
while(NRF24L01_Check())//检查NRF24L01
{
printf ("NRF24L01 Error!!\n\r");
delay_ms(200);
}
printf ("NRF24L01 OK!!\n\r");
while(1)
{
if (k==1)
{
L1: NRF24L01_TX_Mode();
NRF24L01_TxPacket(Cs_cl);
NRF24L01_RX_Mode(); //接受模式
}
if(NRF24L01_RxPacket(RX_Buf)==RESET)//接收到数据
{
// T=26.5;
adcx=Get_Adc_Average(ADC_Channel_1,100);
S=adcx; //四位数
V=(float)adcx*(3.3/4096);
T=V*10; //
// V=adcx;
LED0 =!LED0;
switch(RX_Buf[1])//到时根据题目要求RX_Buf[1]&RX_Buf[2],RX_Buf[0]为字长
{
case 0x30:Ssdc(S);/*添加题目所需执行指令;*/break;
case 0x31:Vccc(V);/*添加题目所需执行指令;*/break;
case 0x32: goto L1;
default:Temc(T); break;
}
}
}
}
void Temc(float wd)
//void temc(void)
{ //float wd=47.3;
int sw,gw,yw;
//u8 s_zb[10]={0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39};
u8 T_buf[14]={0xCE,0xC2,0xB6,0xC8,0xCA,0xC7,0x20,0x20,0x2E,0x20,0xA1,0xE6,0x0D,0x0A};//温度是 **.* ℃
sw=(int)(wd/10); //十位
T_buf[6]=s_zb[sw];
gw=(int)(wd-10*sw); // 个位
T_buf[7]=s_zb[gw];
yw=(int)(wd*10-100*sw-10*gw); // 一位
T_buf[9]=s_zb[yw];
// u8 i=0x0D,p=0x0A;
// tmp_buf[12]=i;
// tmp_buf[13]=p; //外部赋值 可以改变
//u8 tmp_buf[3]={0xC0,0xEE,0xC3};
NRF24L01_TX_Mode();
NRF24L01_TxPacket(T_buf);
NRF24L01_RX_Mode(); //接受模式
}
void Vccc(float dy)
{
int gw,yw,ew;
//u8 s_zb[10]={0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39};
u8 V_buf[13]={0xB5,0xE7,0xD1,0xB9,0xCA,0xC7,0x20,0x2E,0x20,0x20,0x56,0x0D,0x0A};//电压是*.**V
gw=(int)dy; //个位
V_buf[6]=s_zb[gw];
yw=(int)(10*dy-10*gw); // 一位
V_buf[8]=s_zb[yw];
ew=(int)(dy*100-100*gw-10*yw); // 二位
V_buf[9]=s_zb[ew];
// u8 tmp_buf[5]={'2','3','5',0x0D,0x0A};
NRF24L01_TX_Mode();
NRF24L01_TxPacket(V_buf);
NRF24L01_RX_Mode(); //接受模式
}
void Ssdc(float sd)
//void temc(void)
{ //float wd=47.3;
int qw,bw,sw,gw,yw;
//u8 s_zb[10]={0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39};
u8 SD_buf[18]={0xCA,0xAA,0xB6,0xC8,0xCA,0xC7,0x20,0x20,0x20,0x20,0x2E,0x20,0x25,0x52,0x48,0x0D,0x0A};//湿度是 **.* ℃
qw=(int)(sd/1000); //千位
SD_buf[6]=s_zb[qw];
bw=(int)((sd-1000*qw)/100); //百位
SD_buf[7]=s_zb[bw];
sw=(int)((sd-1000*qw-100*bw)/10); //十位
SD_buf[8]=s_zb[sw];
gw=(int)(sd-1000*qw-100*bw-10*sw); // 个位
SD_buf[9]=s_zb[gw];
yw=(int)((sd-1000*qw-100*bw-10*sw-gw)*10); // 一位
SD_buf[11]=s_zb[yw];
// u8 i=0x0D,p=0x0A;
// tmp_buf[12]=i;
// tmp_buf[13]=p; //外部赋值 可以改变
//u8 tmp_buf[3]={0xC0,0xEE,0xC3};
NRF24L01_TX_Mode();
NRF24L01_TxPacket(SD_buf);
NRF24L01_RX_Mode(); //接受模式
}
复制代码
所有资料51hei提供下载:
1_1采集发送_基本.7z
(206.08 KB, 下载次数: 155)
2018-12-22 01:10 上传
点击文件名下载附件
下载积分: 黑币 -5
作者:
15717737432
时间:
2020-8-6 14:59
真的是好资料,学到了,感谢大佬分享
作者:
yxdz1358
时间:
2022-5-29 15:28
这个有原理图吗, 我觉得关键是电路图
作者:
huaishang
时间:
2024-6-7 16:45
真的是好资,感谢大佬分享
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1