找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3986|回复: 3
打印 上一主题 下一主题
收起左侧

51单片机无线多路温度采集系统 通信控制机和采集节点代码

[复制链接]
跳转到指定楼层
楼主
本课题设计的是一套无线多路温度数据采集系统,主要用于对环境温度的采集与监控。系统采用基于无线网络的设计思想和温度采集技术。无线传输避免了远距离布线所带来的施工困难,成本高的缺点。本设计用AT89C51单片机为主要硬件,设计了包括温度采集,温度显示,系统控制,串口通信等外围电路。单片机AT89C51作为主单片机完成测量和控制以及与通信单片机的数据通信、无线收发控制等功能。无线温度数据采集系统是利用下位机设置温度上下限和实时温度的采集,并将结果传输到上位机,以达到对温度的比较、控制。
主要模块:AT89C51      温度采集     温度传感器DS18B20   RS-232  MAX813      无线收发模块PTR2000


通信控制机代码+采集节点代码

单片机源程序如下:
  1. /**************************************************************************************
  2. *文件名称:main.c
  3. *说明:温度采集节点主函数文件
  4. *功能:管理各驱动函数实现无线温度采集
  5. *修改:无
  6. *版本:V1.0.0
  7. *作者:YuanDong
  8. *时间:2009.07.03
  9. *************************************************************************************/
  10. #include "nRF905.h"
  11. #include "ds18b20.h"
  12. #include "Include.h"
  13. /**********************变量定义******************************************************/
  14. uchar TxMemory[80];                //无线发送数据缓冲区        
  15. uchar TxRxd=0;                                //寄存器接收指针
  16. uchar TxTxd=0;                                //寄存器发送指针
  17. uchar TxZuShu=0;                        //每包发送的组数
  18. uint  TxBufGeShu=0;                //无线接收寄存器中未发送完的个数
  19. uchar TXFlag=0;                                //包结束标志位
  20. extern void nRF_Delay(uint time);  //延时函数,单位一个时钟周期
  21. /****************************************************************************************
  22. *函数名称:CPU_Init(void)
  23. *函数功能:系统初始化
  24. *函数入口:无
  25. *函数出口:无
  26. ***************************************************************************************/
  27. void cpu_Init(void)
  28. {
  29.         nRF905_Init();                         //nRF905初始化
  30.         ds18b20_init();     //ds18b20初始化
  31.         serial_Init();       //串口通信初始化
  32.         relay_Init();        //继电器输出初始化
  33.         buzzer_Init();       //扬声器输出初始化
  34.         init_key();          //键盘初始化
  35.         
  36.         sei();
  37. }
  38. /******************************************************************************************函数名称:DataDispose(uchar num)
  39. *函数功能:数据处理子函数
  40. *函数入口:要处理的缓冲区数据个数num
  41. *函数出口:无
  42. *****************************************************************************************/
  43. void DataDispose(uchar num)
  44. {
  45.         uchar i;
  46.   for(i=0;i<num;i++)
  47.         {
  48.                 TxdBuf[i]=TxMemory[TxTxd];
  49.                 TxTxd++;
  50.                 if(TxTxd>79)        
  51.                          TxTxd=0;
  52.                 TxBufGeShu--;                                                      //发送了1个字节,个数减1
  53.         }

  54.         TxdBuf[4]=(TxZuShu<<4)|num;                        //标志字节,高位是组号,低位是这组里的字节个数
  55.         TxZuShu++;
  56.         if(TxZuShu>15)        
  57.                  TxZuShu=0;
  58.         for(i=0;i<3;i++)
  59.         {
  60.                  nRF905_SendData();
  61.         }
  62. }
  63. /*****************************************************************************************
  64. *函数名称:ReceiveEnd(void)
  65. *函数功能:从nRF905接收完一包数据后,数据处理子函数
  66. *函数入口:无
  67. *函数出口:无
  68. *****************************************************************************************/
  69. void ReceiveEnd(void)
  70. {
  71.         if(TxBufGeShu>=4)                                                //还可以分组
  72.                 for(;TxBufGeShu>=4;)
  73.                         DataDispose(4);                                        //整组,每组为四个字节               
  74.         if(TxBufGeShu>0)                                                //分完组后剩余的字节,不多于4个
  75.         {
  76.                 DataDispose(TxBufGeShu);
  77.         }
  78.         TXFlag=0;
  79.         sei();                                                         //开总中断
  80. }
  81. /******************************************************************************************函数名称:TxdMain(void)
  82. *函数功能:向nRF905发送数据主函数
  83. *函数入口:无
  84. *函数出口:无
  85. *****************************************************************************************/
  86. void TxdMain(void)
  87. {
  88.         if(TXFlag==1)
  89.                 ReceiveEnd();
  90.         else
  91.         {
  92.                 if(TxBufGeShu>=4)                                //接收并积累够4个字节后,分组发送
  93.                         DataDispose(4);                                //整组,每组为四个字节
  94.         }
  95. }
  96. /*****************************************************************************************
  97. *函数名称:main(void)
  98. *函数功能:主函数
  99. *函数入口:无
  100. *函数出口:无
  101. *****************************************************************************************/
  102. void main(void)
  103. {
  104.         uchar i;
  105.         CPU_Init();                                                //CPU初始化
  106.         for(i=0;i<79;i++)
  107.                 TxMemory[i]=i;
  108.         
  109.         while(1)
  110.            {        
  111.                 RxdMain();
  112.                 if((UartBusy==0)&&(RxBufGeShu==0))  SendPoint=RxRxd;
  113.                 if((UartBusy==0)&&(RxBufGeShu>0))   //检查串口中断是否停止
  114.                 {
  115.                         UartBusy=1;        
  116.                         RxBufGeShu--;
  117.                         UDR=RxMemory[SendPoint];
  118.                 }
  119.            }//end while
  120. }
复制代码

所有资料51hei提供下载:
51单片机无线多路温度采集系统.zip (36.54 KB, 下载次数: 77)

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:603222 发表于 2019-8-24 16:55 | 只看该作者
谢谢分享 好东西
回复

使用道具 举报

板凳
ID:609834 发表于 2019-9-10 11:42 | 只看该作者
谢谢分享 好东西
回复

使用道具 举报

地板
ID:625659 发表于 2019-10-19 12:30 | 只看该作者
谢谢分享 好东西
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表