用于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, 下载次数: 154)
|