标题:
51单片机无线多路温度采集系统 通信控制机和采集节点代码
[打印本页]
作者:
v帆帆帆帆
时间:
2019-7-23 09:57
标题:
51单片机无线多路温度采集系统 通信控制机和采集节点代码
本课题设计的是一套无线多路温度数据采集系统,主要用于对环境温度的采集与监控。系统采用基于无线网络的设计思想和温度采集技术。无线传输避免了远距离布线所带来的施工困难,成本高的缺点。本设计用AT89C51单片机为主要硬件,设计了包括温度采集,温度显示,系统控制,串口通信等外围电路。单片机AT89C51作为主单片机完成测量和控制以及与通信单片机的数据通信、无线收发控制等功能。无线温度数据采集系统是利用下位机设置温度上下限和实时温度的采集,并将结果传输到上位机,以达到对温度的比较、控制。
主要模块:AT89C51 温度采集 温度传感器DS18B20 RS-232 MAX813 无线收发模块PTR2000
0.png
(4.92 KB, 下载次数: 66)
下载附件
2019-7-24 03:53 上传
0.png
(50.25 KB, 下载次数: 75)
下载附件
2019-7-24 03:54 上传
通信控制机代码+采集节点代码
单片机源程序如下:
/**************************************************************************************
*文件名称:main.c
*说明:温度采集节点主函数文件
*功能:管理各驱动函数实现无线温度采集
*修改:无
*版本:V1.0.0
*作者:YuanDong
*时间:2009.07.03
*************************************************************************************/
#include "nRF905.h"
#include "ds18b20.h"
#include "Include.h"
/**********************变量定义******************************************************/
uchar TxMemory[80]; //无线发送数据缓冲区
uchar TxRxd=0; //寄存器接收指针
uchar TxTxd=0; //寄存器发送指针
uchar TxZuShu=0; //每包发送的组数
uint TxBufGeShu=0; //无线接收寄存器中未发送完的个数
uchar TXFlag=0; //包结束标志位
extern void nRF_Delay(uint time); //延时函数,单位一个时钟周期
/****************************************************************************************
*函数名称:CPU_Init(void)
*函数功能:系统初始化
*函数入口:无
*函数出口:无
***************************************************************************************/
void cpu_Init(void)
{
nRF905_Init(); //nRF905初始化
ds18b20_init(); //ds18b20初始化
serial_Init(); //串口通信初始化
relay_Init(); //继电器输出初始化
buzzer_Init(); //扬声器输出初始化
init_key(); //键盘初始化
sei();
}
/******************************************************************************************函数名称:DataDispose(uchar num)
*函数功能:数据处理子函数
*函数入口:要处理的缓冲区数据个数num
*函数出口:无
*****************************************************************************************/
void DataDispose(uchar num)
{
uchar i;
for(i=0;i<num;i++)
{
TxdBuf[i]=TxMemory[TxTxd];
TxTxd++;
if(TxTxd>79)
TxTxd=0;
TxBufGeShu--; //发送了1个字节,个数减1
}
TxdBuf[4]=(TxZuShu<<4)|num; //标志字节,高位是组号,低位是这组里的字节个数
TxZuShu++;
if(TxZuShu>15)
TxZuShu=0;
for(i=0;i<3;i++)
{
nRF905_SendData();
}
}
/*****************************************************************************************
*函数名称:ReceiveEnd(void)
*函数功能:从nRF905接收完一包数据后,数据处理子函数
*函数入口:无
*函数出口:无
*****************************************************************************************/
void ReceiveEnd(void)
{
if(TxBufGeShu>=4) //还可以分组
for(;TxBufGeShu>=4;)
DataDispose(4); //整组,每组为四个字节
if(TxBufGeShu>0) //分完组后剩余的字节,不多于4个
{
DataDispose(TxBufGeShu);
}
TXFlag=0;
sei(); //开总中断
}
/******************************************************************************************函数名称:TxdMain(void)
*函数功能:向nRF905发送数据主函数
*函数入口:无
*函数出口:无
*****************************************************************************************/
void TxdMain(void)
{
if(TXFlag==1)
ReceiveEnd();
else
{
if(TxBufGeShu>=4) //接收并积累够4个字节后,分组发送
DataDispose(4); //整组,每组为四个字节
}
}
/*****************************************************************************************
*函数名称:main(void)
*函数功能:主函数
*函数入口:无
*函数出口:无
*****************************************************************************************/
void main(void)
{
uchar i;
CPU_Init(); //CPU初始化
for(i=0;i<79;i++)
TxMemory[i]=i;
while(1)
{
RxdMain();
if((UartBusy==0)&&(RxBufGeShu==0)) SendPoint=RxRxd;
if((UartBusy==0)&&(RxBufGeShu>0)) //检查串口中断是否停止
{
UartBusy=1;
RxBufGeShu--;
UDR=RxMemory[SendPoint];
}
}//end while
}
复制代码
所有资料51hei提供下载:
51单片机无线多路温度采集系统.zip
(36.54 KB, 下载次数: 77)
2019-7-23 09:47 上传
点击文件名下载附件
下载积分: 黑币 -5
作者:
zzcdfp
时间:
2019-8-24 16:55
谢谢分享 好东西
作者:
158987
时间:
2019-9-10 11:42
谢谢分享 好东西
作者:
Captain銭
时间:
2019-10-19 12:30
谢谢分享 好东西
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1