找回密码
 立即注册

QQ登录

只需一步,快速开始

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

基于51单片机的无线温湿度控制系统

[复制链接]
跳转到指定楼层
楼主

单片机源程序如下:
  1. //宏定义
  2. #define uchar unsigned char
  3. #define uint unsigned int


  4. //头函数
  5. #include <reg51.h>
  6. #include <intrins.h>
  7. //屏幕函数调用
  8. #include "Lcd.h"   
  9. //无线模块
  10. #include "api.h"
  11. #include "nRF24L01P.h"
  12. //继电器定义
  13. sbit jiangwen=P3^5;
  14. sbit shengwen=P3^4;
  15. sbit choushi=P3^3;
  16. sbit jiashi=P3^2;
  17. //LED 管脚定义
  18. sbit TXLED_R=P1^3;
  19. sbit RXLED_Y=P1^5;
  20. //蜂鸣器
  21. sbit Feng=P1^2;
  22. //蜂鸣器闪烁标志位
  23. bit shan=0;
  24. #include "KEY.h"



  25. //主机询问命令
  26. uchar CMD[]={0xaa,0xbb,0xcc,0xdd};
  27. uchar Mode=0;
  28. uchar temp=0;
  29. uchar KK=0;
  30. //报警温湿度
  31. uchar TNumber=30,RHNumber=50,TX=20,HX=40;

  32. //主函数
  33. void main()
  34. {
  35.         TH0=0x4b;
  36.         TL0=0xff;//赋初值
  37.         TMOD=0x01;//设置工作方式
  38.         EA=1;//打开中断总开关
  39.         ET0=1;//打开允许开关
  40.         TR0=1;
  41.         //LCD初始化显示
  42.         Init_LCD();
  43.         delay_ms(250);
  44.         TXLED_R=0;                                          //初始化
  45.         RXLED_Y=0;
  46.         init_io();                           //无线初始化IO
  47.         RX_Mode();                           //设置为接收模式
  48.         TXLED_R=1;
  49.         RXLED_Y=1;
  50.         /////////////////////////////////////////////
  51.         TXLED_R=0;                                          //发送指示灯
  52.         ////////////////////////////////////////////////////////////////////////////////
  53.         //循环显示
  54.         while(1)
  55.         {
  56.                 TXLED_R=0;                                          //发送指示灯       
  57.            TX_ACK();                                      //发送询问信号       
  58.                 sta = SPI_Read(STATUS);                  //读状态寄存器
  59.                 TXLED_R=1;                                          //发送指示灯       
  60.                 if(RX_DR)                                           //判断是否接受到数据
  61.                 {
  62.                         SPI_Read_Buf(RD_RX_PLOAD, RX_BUF, TX_PLOAD_WIDTH);  // 从RX FIFO读出数据
  63.                         flag = 1;
  64.                 }
  65.                 delay_ms(100);
  66.                 SPI_RW_Reg(WRITE_REG + STATUS, sta);  // 清除RX_DS中断标志
  67.                 if(flag==1)                            // 接受完成
  68.                 {
  69.                         Mode=0;
  70.                         flag=0;
  71.                 }
  72.                 else                                                 //设备丢失
  73.                 {
  74.                         Mode=1;
  75.                 }       

  76.                 //显示
  77.                 //数据显示
  78.                 if(Mode==0)
  79.                 {               
  80.                         RXLED_Y=0;                               
  81.                         if(temp!=1)//重新初始化
  82.                         {
  83.                                 display1();
  84.                                 temp=1;
  85.                         }
  86.                         display2(RX_BUF[1],RX_BUF[2]);//显示读数
  87.                         if(RX_BUF[1]>TNumber) //温度超标降温
  88.                         {
  89.                                 jiangwen=0;
  90.                         }
  91.                         else
  92.                         {
  93.                                 jiangwen=1;
  94.                         }
  95.                         if(RX_BUF[1]<TX) //温度过低升温
  96.                         {
  97.                                 shengwen=0;
  98.                         }
  99.                         else
  100.                         {
  101.                                 shengwen=1;
  102.                         }
  103.                         if(RX_BUF[2]>RHNumber) //湿度超标抽湿
  104.                         {
  105.                                 choushi=0;
  106.                         }
  107.                         else
  108.                         {
  109.                                 choushi=1;
  110.                         }
  111.                         if(RX_BUF[2]<HX) //湿度过低加湿
  112.                         {
  113.                                 jiashi=0;
  114.                         }
  115.                         else
  116.                         {
  117.                                 jiashi=1;
  118.                         }
  119.                         if(((RX_BUF[1]>TNumber||RX_BUF[2]>RHNumber||RX_BUF[1]<TX||RX_BUF[2]<HX))&&(shan==1)) //超阀值蜂鸣器报警
  120.                         {
  121.                                 Feng=0;
  122.                         }
  123.                         else
  124.                         {
  125.                                 Feng=1;
  126.                         }
  127.                         RXLED_Y=1;       
  128.                 }
  129.                 //读取键值
  130.                 KK=KEY_();
  131.                 if(KK==3)//调整模式
  132.                 {
  133.                         Mode=2;
  134.                         KK=0;
  135.                 }
  136.                 //数据显示不在线
  137.            if(Mode==1)
  138.                 {
  139.                         if(temp!=2)
  140.                                 NoLine();//设备丢失
  141.                         temp=2;
  142.                 }
  143.                 //键盘
  144.                 else if(Mode==2)
  145.                 {
  146.                         temp=3;
  147.                         display3();
  148.                         display4(TNumber,RHNumber,TX,HX);
  149.                         write_com(0x0f);//打开光标
  150.                         write_com(0x80+5);
  151.                         //调温上限
  152.                         while(KK!=3)
  153.                         {
  154.                                 //读取键值
  155.                                 KK=KEY_();
  156.                                 if(KK==1)//++
  157.                                 {
  158.                                         TNumber++;
  159.                                         if(TNumber==51)
  160.                                                 TNumber=50;
  161.                                         display4(TNumber,RHNumber,TX,HX);
  162.                                         write_com(0x0f);//打开光标
  163.                                         write_com(0x80+5);
  164.                                 }
  165.                                 if(KK==2)//--       
  166.                                 {
  167.                                         TNumber--;
  168.                                         if(TNumber==TX)
  169.                                                 TNumber++;
  170.                                         display4(TNumber,RHNumber,TX,HX);
  171.                                         write_com(0x0f);//打开光标
  172.                                         write_com(0x80+5);                               
  173.                                 }
  174.                         }
  175.                         KK=0;
  176.                         write_com(0x0f);//打开光标
  177.                         write_com(0x80+0x40+5);
  178.                         //调温x下限
  179.                         while(KK!=3)
  180.                         {
  181.                                 //读取键值
  182.                                 KK=KEY_();
  183.                                 if(KK==1)//++
  184.                                 {
  185.                                         TX++;
  186.                                         if(TX==TNumber)
  187.                                                 TX--;
  188.                                         display4(TNumber,RHNumber,TX,HX);
  189.                                         write_com(0x0f);//打开光标
  190.                                         write_com(0x80+0x40+5);
  191.                                 }
  192.                                 if(KK==2)//--       
  193.                                 {
  194.                                         TX--;
  195.                                         if(TX==0xff)
  196.                                                 TX=0;
  197.                                         display4(TNumber,RHNumber,TX,HX);
  198.                                         write_com(0x0f);//打开光标
  199.                                         write_com(0x80+0x40+5);                               
  200.                                 }
  201.                         }
  202.                         KK=0;
  203.                         write_com(0x0f);//打开光标
  204.                         write_com(0x80+14);
  205.                         //调湿 上
  206.                         while(KK!=3)
  207.                         {
  208.                                 //读取键值
  209.                                 KK=KEY_();       
  210.                                 if(KK==1)//++
  211.                                 {
  212.                                         RHNumber++;
  213.                                         if(RHNumber==91)
  214.                                                 RHNumber=90;
  215.                                         display4(TNumber,RHNumber,TX,HX);
  216.                                         write_com(0x0f);//打开光标
  217.                                         write_com(0x80+14);
  218.                                 }
  219.                                 if(KK==2)//--       
  220.                                 {
  221.                                         RHNumber--;
  222.                                         if(RHNumber==HX)
  223.                                                 RHNumber++;       
  224.                                         display4(TNumber,RHNumber,TX,HX);
  225.                                         write_com(0x0f);//打开光标
  226.                                         write_com(0x80+14);                       
  227.                                 }
  228.                         }
  229.                         KK=0;
  230.                         write_com(0x0f);//打开光标
  231.                         write_com(0x80+0x40+14);
  232.                                 //调湿 下
  233.                         while(KK!=3)
  234.                         {
  235.                                 //读取键值
  236.                                 KK=KEY_();       
  237.                                 if(KK==1)//++
  238.                                 {
  239.                                         HX++;
  240.                                         if(HX==RHNumber)
  241.                                                 HX--;
  242.                                         display4(TNumber,RHNumber,TX,HX);
  243.                                         write_com(0x0f);//打开光标
  244. ……………………

  245. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码

所有资料51hei提供下载:




基于51单片机的无线温湿度控制系统
展开

基于51单片机的无线温湿度控制系统

商品类型:
全新商品
剩余时间:
成交结束
5 黑币

5 黑币

0.png (2.43 KB, 下载次数: 35)

0.png

基于51单片机的无线温湿度控制系统.rar

542.46 KB, 下载次数: , 下载积分: 黑币 -5

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

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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