找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 8675|回復(fù): 9
打印 上一主題 下一主題
收起左側(cè)

基于51單片機(jī)的蔬菜大棚溫濕度智能控制系統(tǒng)程序設(shè)計(jì)

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:395590 發(fā)表于 2019-11-25 19:02 | 只看該作者 |只看大圖 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
基于51單片機(jī)的蔬菜大棚溫濕度智能控制系統(tǒng)設(shè)計(jì)模塊使用:使用dht11、74hc595數(shù)碼管模塊、繼電器模塊
任務(wù)
1)根據(jù)檢測(cè)到的溫濕度信息控制通風(fēng)與加熱;
2)采用MCU、溫濕度傳感器、繼電器、按鍵、數(shù)碼管等;
3)通過按鍵設(shè)定大棚溫濕度報(bào)警值;
4)上傳信息到PC機(jī);
5)當(dāng)溫度或適度超限時(shí)用繼電器控制小燈狀態(tài)模擬相應(yīng)動(dòng)作的發(fā)生。



單片機(jī)源程序如下:
  1. ////////////////////////////////////////////////////10.3            17:58////////////////////////////////////////////////////////
  2. #include <reg52.h> //包含頭文件,一般情況不需要改動(dòng),頭文件包含特殊功能寄存器的定義
  3. #include <intrins.h>
  4. #include <math.h>
  5. #define uchar unsigned char
  6. #define uint unsigned int       
  7. sbit RS = P1^0;   //定義端口
  8. sbit RW = P1^1;
  9. sbit EN = P2^5;
  10. sbit DU = P2^0;
  11. sbit WE = P2^1;
  12. sbit Data = P3^6;//定義數(shù)據(jù)線


  13. uchar rec_dat[19];   //用于顯示的接收數(shù)據(jù)數(shù)組

  14. #define RS_CLR RS=0
  15. #define RS_SET RS=1

  16. #define RW_CLR RW=0
  17. #define RW_SET RW=1

  18. #define EN_CLR EN=0
  19. #define EN_SET EN=1

  20. #define DataPort P0


  21. void cmg88()//關(guān)數(shù)碼管,點(diǎn)陣函數(shù)
  22. {
  23. DU=1;  
  24. P0=0X00;
  25. DU=0;
  26. }
  27. /*------------------------------------------------
  28. uS延時(shí)函數(shù),含有輸入?yún)?shù) unsigned char t,無返回值
  29. unsigned char 是定義無符號(hào)字符變量,其值的范圍是
  30. 0~255 這里使用晶振12M,精確延時(shí)請(qǐng)使用匯編,大致延時(shí)
  31. 長度如下 T=tx2+5 uS
  32. ------------------------------------------------*/
  33. void DelayUs2x(unsigned char t)
  34. {   
  35. while(--t);
  36. }
  37. /*------------------------------------------------
  38. mS延時(shí)函數(shù),含有輸入?yún)?shù) unsigned char t,無返回值
  39. unsigned char 是定義無符號(hào)字符變量,其值的范圍是
  40. 0~255 這里使用晶振12M,精確延時(shí)請(qǐng)使用匯編
  41. ------------------------------------------------*/
  42. void DelayMs(unsigned char t)
  43. {
  44.      
  45. while(t--)
  46. {
  47.      //大致延時(shí)1mS
  48.      DelayUs2x(245);
  49.          DelayUs2x(245);
  50. }
  51. }

  52. //              判忙函數(shù)
  53. bit LCD_Check_Busy(void)
  54. {
  55. DataPort= 0xFF;
  56. RS_CLR;
  57. RW_SET;
  58. EN_CLR;
  59. _nop_();
  60. EN_SET;
  61. return (bit)(DataPort & 0x80);
  62. }
  63. //             寫入命令函數(shù)
  64. void LCD_Write_Com(unsigned char com)
  65. {  
  66. while(LCD_Check_Busy()); //忙則等待
  67. RS_CLR;
  68. RW_CLR;
  69. EN_SET;
  70. DataPort= com;
  71. _nop_();
  72. EN_CLR;
  73. }
  74. //             寫入數(shù)據(jù)函數(shù)
  75. void LCD_Write_Data(unsigned char Data)
  76. {
  77. while(LCD_Check_Busy()); //忙則等待
  78. RS_SET;
  79. RW_CLR;
  80. EN_SET;
  81. DataPort= Data;
  82. _nop_();
  83. EN_CLR;
  84. }

  85. //               清屏函數(shù)
  86. void LCD_Clear(void)
  87. {
  88. LCD_Write_Com(0x01);
  89. DelayMs(5);
  90. }
  91. //             寫入字符串函數(shù)
  92. void LCD_Write_String(unsigned char x,unsigned char y,unsigned char *s)
  93. {     
  94. if (y == 0)
  95.         {     
  96.          LCD_Write_Com(0x80 + x);     //表示第一行
  97.         }
  98. else
  99.         {      
  100.         LCD_Write_Com(0xC0 + x);      //表示第二行
  101.         }        
  102. while (*s)
  103.         {     
  104. LCD_Write_Data( *s);     
  105. s ++;     
  106.         }
  107. }
  108.    //           寫入字符函數(shù)
  109. void LCD_Write_Char(unsigned char x,unsigned char y,unsigned char Data)
  110. {     
  111. if (y == 0)
  112.         {     
  113.         LCD_Write_Com(0x80 + x);     
  114.         }   
  115. else
  116.         {     
  117.         LCD_Write_Com(0xC0 + x);     
  118.         }        
  119. LCD_Write_Data( Data);  
  120. }
  121. //             初始化函數(shù)
  122. void LCD_Init(void)
  123. {
  124.    LCD_Write_Com(0x38);    /*顯示模式設(shè)置*/
  125.    DelayMs(5);
  126.    LCD_Write_Com(0x38);
  127.    DelayMs(5);
  128.    LCD_Write_Com(0x38);
  129.    DelayMs(5);
  130.    LCD_Write_Com(0x38);  
  131.    LCD_Write_Com(0x08);    /*顯示關(guān)閉*/
  132.    LCD_Write_Com(0x01);    /*顯示清屏*/
  133.    LCD_Write_Com(0x06);    /*顯示光標(biāo)移動(dòng)設(shè)置*/
  134.    DelayMs(5);
  135.    LCD_Write_Com(0x0C);    /*顯示開及光標(biāo)設(shè)置*/
  136.    }
  137.    

  138. /*------------------------------------------------
  139.               DHT11延時(shí)函數(shù)
  140. ------------------------------------------------*/
  141. void DHT11_delay_us(uchar n)
  142. {
  143.     while(--n);
  144. }

  145. void DHT11_delay_ms(uint z)
  146. {
  147.    uint i,j;
  148.    for(i=z;i>0;i--)
  149.       for(j=110;j>0;j--);
  150. }
  151. /*------------------------------------------------
  152.               DHT11開始信號(hào)
  153. ------------------------------------------------*/
  154. void DHT11_start()
  155. {
  156.    Data=1;
  157.    DHT11_delay_us(2);
  158.    Data=0;
  159.    DHT11_delay_ms(20);   //延時(shí)18ms以上
  160.    Data=1;
  161.    DHT11_delay_us(30);
  162. }
  163. //             接收八位二進(jìn)制
  164. uchar DHT11_rec_byte()      //接收一個(gè)字節(jié)
  165. {
  166.    uchar i,dat=0;
  167.   for(i=0;i<8;i++)    //從高到低依次接收8位數(shù)據(jù)
  168.    {         
  169.       while(!Data);   ////等待50us低電平過去
  170.       DHT11_delay_us(8);     //延時(shí)60us,如果還為高則數(shù)據(jù)為1,否則為0
  171.       dat<<=1;           //移位使正確接收8位數(shù)據(jù),數(shù)據(jù)為0時(shí)直接移位
  172.       if(Data==1)    //數(shù)據(jù)為1時(shí),使dat加1來接收數(shù)據(jù)1
  173.          dat+=1;
  174.       while(Data);  //等待數(shù)據(jù)線拉低   
  175.     }  
  176.     return dat;
  177. }
  178. //              接收40bit數(shù)據(jù)

  179. void DHT11_receive()      //接收40位的數(shù)據(jù)
  180. {
  181.     uchar R_H,R_L,T_H,T_L,RH,RL,TH,TL,revise;
  182.     DHT11_start();

  183.     if(Data==0)
  184.     {
  185.        
  186.         while(Data==0);   //等待拉高     
  187.                
  188.         DHT11_delay_us(40);  //拉高后延時(shí)80us
  189.         R_H=DHT11_rec_byte();    //接收濕度高八位  
  190.         R_L=DHT11_rec_byte();    //接收濕度低八位  
  191.         T_H=DHT11_rec_byte();    //接收溫度高八位  
  192.         T_L=DHT11_rec_byte();    //接收溫度低八位
  193.         revise=DHT11_rec_byte(); //接收校正位
  194.                          
  195.         DHT11_delay_us(25);    //結(jié)束

  196.         if((R_H+R_L+T_H+T_L)==revise)      //校正
  197.         {
  198.             RH=R_H;
  199.             RL=R_L;
  200.             TH=T_H;
  201.             TL=T_L;
  202.         }
  203.         /*數(shù)據(jù)處理,方便顯示*/
  204.         rec_dat[0]='0'+(RH/10);
  205.         rec_dat[1]='0'+(RH%10);
  206.                 rec_dat[2] =' ';
  207.                 rec_dat[3] = 'R' ;
  208.                 rec_dat[4] = 'H';
  209.         rec_dat[5]=' ';
  210.         rec_dat[6]=' ';
  211.         rec_dat[7]=' ';
  212.         rec_dat[8]=' ';
  213.         rec_dat[9]='0'+(TH/10);
  214.         rec_dat[10]='0'+(TH%10);
  215.                 rec_dat[11] =' ';
  216.                 rec_dat[12] = 'C';
  217.                 rec_dat[13] = ' ' ;
  218.         rec_dat[14]=' ';
  219.                 rec_dat[15] =(RH/10);
  220.                 rec_dat[16] =(RH%10);
  221.                 rec_dat[17] =(TH/10) ;
  222.         rec_dat[18]=(TH%10);
  223.     }
  224. }
  225. /////////////////數(shù)碼管///////////////////////////////////////////////

  226.   
  227. unsigned char code fseg[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
  228. unsigned char code segbit[]={0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01};
  229. unsigned char  disbuf[8]={0,0,0,0,0,0,0,0};
  230. unsigned char code LED_0F[];                // LED字模表

  231. sbit DIO = P1^0;                                //串行數(shù)據(jù)輸入
  232. sbit rclck  = P1^1;                                //時(shí)鐘脈沖信號(hào)——上升沿有效
  233. sbit SCLK = P1^2;                                //打入信號(hào)————上升沿有效

  234. //-----------------------------------------------------------------------------
  235. // 全局變量
  236. uchar LED[8];        //用于LED的8位顯示緩存
  237.   


  238. unsigned char code LED_0F[] =
  239. {// 0         1          2           3        4         5          6           7        8         9          A           b        C    d          E    F    -
  240.         0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x8C,0xBF,0xC6,0xA1,0x86,0xFF,0xbf
  241. };

  242. void LED_OUT(uchar X)
  243. {
  244.         uchar i;
  245.         for(i=8;i>=1;i--)
  246.         {
  247.                 if (X&0x80) DIO=1; else DIO=0;
  248.                 X<<=1;
  249.                 SCLK = 0;
  250.                 SCLK = 1;
  251.         }
  252. }  

  253. void LED8_Display (void)
  254. {
  255.         unsigned char code *led_table;          // 查表指針
  256.         uchar i;
  257.         //顯示第1位
  258.         led_table = LED_0F + LED[0];
  259.         i = *led_table;

  260.         LED_OUT(i);                       
  261.         LED_OUT(0x01);               

  262.         rclck = 0;
  263.         rclck = 1;
  264.         //顯示第2位
  265.         led_table = LED_0F + LED[1];
  266.         i = *led_table;

  267.         LED_OUT(i);               
  268.         LED_OUT(0x02);               

  269.         rclck = 0;
  270.         rclck = 1;
  271.         //顯示第3位
  272.         led_table = LED_0F + LED[2];
  273.         i = *led_table;

  274.         LED_OUT(i);                       
  275.         LED_OUT(0x04);       

  276.         rclck = 0;
  277.         rclck = 1;
  278.         //顯示第4位
  279.         led_table = LED_0F + LED[3];
  280.         i = *led_table;

  281.         LED_OUT(i);                       
  282.         LED_OUT(0x08);               

  283.         rclck = 0;
  284.         rclck = 1;
  285.                 led_table = LED_0F + LED[4];
  286.         i = *led_table;
  287.         LED_OUT(i);                       
  288.         LED_OUT(0x10);       
  289.         rclck = 0;
  290.         rclck = 1;         
  291.                  
  292.                 //顯示第6位
  293.         led_table = LED_0F + LED[5];
  294.         i = *led_table;

  295.         LED_OUT(i);                       
  296.         LED_OUT(0x20);       

  297.         rclck = 0;
  298.         rclck = 1;
  299.                  //顯示第7位
  300.         led_table = LED_0F + LED[6];
  301.         i = *led_table;

  302.         LED_OUT(i);                       
  303.         LED_OUT(0x40);       

  304.         rclck = 0;
  305.         rclck = 1;         
  306.                          //顯示第8位
  307.         led_table = LED_0F + LED[7];
  308.         i = *led_table;

  309.         LED_OUT(i);               
  310.         LED_OUT(0x80);       

  311.         rclck = 0;
  312.         rclck = 1;
  313.         }


  314. void LED2_Display (uchar *wei)
  315. {
  316.         unsigned char code *led_table;          // 查表指針
  317.         uchar i;
  318. if(wei==1)
  319. {
  320.         //顯示第1位
  321.         led_table = LED_0F + LED[0];
  322.         i = *led_table;

  323.         LED_OUT(i);                       
  324.         LED_OUT(0x01);               

  325.         rclck = 0;
  326.         rclck = 1;
  327.         //顯示第2位
  328.         led_table = LED_0F + LED[1];
  329.         i = *led_table;

  330.         LED_OUT(i);               
  331.         LED_OUT(0x02);               

  332.         rclck = 0;
  333.         rclck = 1;
  334. }
  335. if(wei==2)
  336. {
  337.         //顯示第3位
  338.         led_table = LED_0F + LED[2];
  339.         i = *led_table;

  340.         LED_OUT(i);                       
  341.         LED_OUT(0x04);       

  342.         rclck = 0;
  343.         rclck = 1;
  344.         //顯示第4位
  345.         led_table = LED_0F + LED[3];
  346.         i = *led_table;

  347.         LED_OUT(i);                       
  348.         LED_OUT(0x08);               

  349.         rclck = 0;
  350.         rclck = 1;
  351. }
  352. if(wei==3)
  353. {
  354.         led_table = LED_0F + LED[4];
  355.         i = *led_table;
  356.         LED_OUT(i);                       
  357.         LED_OUT(0x10);       
  358.         rclck = 0;
  359.         rclck = 1;         
  360.                  
  361.                 //顯示第6位
  362.         led_table = LED_0F + LED[5];
  363.         i = *led_table;

  364.         LED_OUT(i);                       
  365.         LED_OUT(0x20);       

  366.         rclck = 0;
  367.         rclck = 1;
  368. }
  369.         if(wei==4)
  370. {
  371.                  //顯示第7位
  372.         led_table = LED_0F + LED[6];
  373.         i = *led_table;

  374.         LED_OUT(i);                       
  375.         LED_OUT(0x40);       

  376.         rclck = 0;
  377.         rclck = 1;         
  378.                          //顯示第8位
  379.         led_table = LED_0F + LED[7];
  380.         i = *led_table;

  381.         LED_OUT(i);               
  382.         LED_OUT(0x80);       

  383.         rclck = 0;
  384.         rclck = 1;
  385. }
  386. }
  387. uchar wendu;
  388.   uchar shidu;
  389.   void shumaguan_show(void)
  390. {
  391.            LED[1]=rec_dat[15];
  392.           LED[0]=rec_dat[16];
  393.          shidu=rec_dat[15]*10+rec_dat[16];
  394.         LED[7]=rec_dat[17];
  395.         LED[6]=rec_dat[18];
  396.          wendu=rec_dat[17]*10+rec_dat[18];
  397.         LED[2]=16;
  398.         LED[3]=16;
  399.         LED[4]=16;
  400.         LED[5]=16;
  401.         LED8_Display ();
  402.   
  403. }
  404.     //////////////////////////////////////////////////////////////////////////
  405. sbit Beep=P2^2;                   //設(shè)置蜂鳴器引腳

  406. sbit K1=P2^3;
  407. sbit K2=P2^4;
  408. sbit K3=P2^5;
  409. sbit K4=P2^6;
  410. sbit K5=P2^7;
  411. void key_init(void)
  412. {
  413. K1=1;
  414. K2=1;
  415. K3=1;
  416. K4=1;
  417. }
  418. uchar an=0;
  419. uchar move=0;
  420.   void caidan(void)
  421.   {
  422.            if(K1==0&&an==0)
  423.         {
  424.                  DelayMs(10);                                                  // 去除按鍵按下的抖動(dòng)
  425.                 while(!K1);                                         // 等待按鍵釋放
  426.                 DelayMs(10);                                                  // 去除按鍵松開的抖動(dòng)
  427.                 an=1;
  428.        
  429.         }
  430.                    if(K1==0&&an==1)
  431.         {
  432.                  DelayMs(10);                                                  // 去除按鍵按下的抖動(dòng)
  433.                 while(!K1);                                         // 等待按鍵釋放
  434.                 DelayMs(10);                                                  // 去除按鍵松開的抖動(dòng)
  435.                 an=0;

  436.         }       
  437.   }
  438.   void move_2(void)
  439.   {
  440.              if(K2==0&&move==0)
  441.         {
  442.                  DelayMs(10);                                                  // 去除按鍵按下的抖動(dòng)
  443.                 while(!K2);                                         // 等待按鍵釋放
  444.                 DelayMs(10);                                                  // 去除按鍵松開的抖動(dòng)
  445.                 move=1;
  446.         }
  447.   
  448.                      if(K2==0&&move==1)
  449.         {
  450.                  DelayMs(10);                                                  // 去除按鍵按下的抖動(dòng)
  451.                 while(!K2);                                         // 等待按鍵釋放
  452.                 DelayMs(10);                                                  // 去除按鍵松開的抖動(dòng)
  453.                 move=2;
  454.         }

  455.                    if(K2==0&&move==2)
  456.         {
  457.                  DelayMs(10);                                                  // 去除按鍵按下的抖動(dòng)
  458.                 while(!K2);                                         // 等待按鍵釋放
  459.                 DelayMs(10);                                                  // 去除按鍵松開的抖動(dòng)
  460.                 move=3;
  461.         }
  462.                    if(K2==0&&move==3)
  463.         {
  464.                  DelayMs(10);                                                  // 去除按鍵按下的抖動(dòng)
  465.                 while(!K2);                                         // 等待按鍵釋放
  466.                 DelayMs(10);                                                  // 去除按鍵松開的抖動(dòng)
  467.                 move=0;
  468.         }
  469.   
  470.   }

  471. uchar AlarmTL;                        // 溫度下限報(bào)警值
  472. uchar AlarmTH;                        // 溫度上限報(bào)警值
  473. uchar AlarmHL;                        // 濕度下限報(bào)警值
  474. uchar AlarmHH;                        // 濕度上限報(bào)警值
  475. void up_down(void)
  476. {
  477. ///////////////////////////////////////////////////////////////////////////////////////////////////////
  478.           if(K4==0&&move==0)
  479.         {
  480.                  DelayMs(10);                                                  // 去除按鍵按下的抖動(dòng)
  481.                 while(!K4);                                         // 等待按鍵釋放
  482.                 DelayMs(10);                                                  // 去除按鍵松開的抖動(dòng)
  483.                         if(AlarmTL>0)                                  // 只有當(dāng)濕度上限值大于0時(shí),才能減1
  484.                                 {
  485.                                         AlarmTL--;         
  486.                        
  487.                        
  488.                                         }
  489.         }
  490.                         if(K3==0&&move==0)                         // 判斷 “加按鍵“ 是否被按下
  491.                         {
  492.                                 DelayMs(10);                                                  // 去除按鍵按下的抖動(dòng)
  493.                        while(!K3);                                         // 等待按鍵釋放
  494.                        DelayMs(10);
  495.                                 if(AlarmTL<99)                                // 只有當(dāng)濕度上限值小于99時(shí),才能加1
  496.                                         AlarmTL++;
  497.                    

  498.                         }       
  499.                         ///////////////////////////////////////////////////////////////////////////////////////////////////////
  500.           if(K4==0&&move==1)
  501.         {
  502.                  DelayMs(10);                                                  // 去除按鍵按下的抖動(dòng)
  503.                 while(!K4);                                         // 等待按鍵釋放
  504.                 DelayMs(10);                                                  // 去除按鍵松開的抖動(dòng)
  505.                         if(AlarmTH>0)                                  // 只有當(dāng)濕度上限值大于0時(shí),才能減1
  506.                                 {
  507.                                         AlarmTH--;         
  508.                        
  509.                        
  510.                                         }
  511.         }
  512.                         if(K3==0&&move==1)                         // 判斷 “加按鍵“ 是否被按下
  513.                         {
  514.                                 DelayMs(10);                                                  // 去除按鍵按下的抖動(dòng)
  515.                        while(!K3);                                         // 等待按鍵釋放
  516.                        DelayMs(10);
  517.                                 if(AlarmTH<99)                                // 只有當(dāng)濕度上限值小于99時(shí),才能加1
  518.                                         AlarmTH++;
  519.                    

  520.                         }       
  521. ///////////////////////////////////////////////////////////////////////////////////////////////////////
  522.           if(K4==0&&move==2)
  523.         {
  524.                  DelayMs(10);                                                  // 去除按鍵按下的抖動(dòng)
  525.                 while(!K4);                                         // 等待按鍵釋放
  526.                 DelayMs(10);                                                  // 去除按鍵松開的抖動(dòng)
  527.                         if(AlarmHL>0)                                  // 只有當(dāng)濕度上限值大于0時(shí),才能減1
  528.                                 {
  529.                                         AlarmHL--;         
  530.                        
  531.                        
  532.                                         }
  533.         }
  534.                         if(K3==0&&move==2)                         // 判斷 “加按鍵“ 是否被按下
  535.                         {
  536.                                 DelayMs(10);                                                  // 去除按鍵按下的抖動(dòng)
  537.                        while(!K3);                                         // 等待按鍵釋放
  538.                        DelayMs(10);
  539.                                 if(AlarmHL<99)                                // 只有當(dāng)濕度上限值小于99時(shí),才能加1
  540.                                         AlarmHL++;
  541.                    

  542.                         }       
  543. ///////////////////////////////////////////////////////////////////////////////////////////
  544.                    if(K4==0&&move==3)
  545.         {
  546.                  DelayMs(10);                                                  // 去除按鍵按下的抖動(dòng)
  547.                 while(!K4);                                         // 等待按鍵釋放
  548.                 DelayMs(10);                                                  // 去除按鍵松開的抖動(dòng)
  549.                         if(AlarmHH>0)                                  // 只有當(dāng)濕度上限值大于0時(shí),才能減1
  550.                                 {
  551.                                         AlarmHH--;         
  552.                        
  553.                        
  554.                                         }
  555.         }
  556.                         if(K3==0&&move==3)                         // 判斷 “加按鍵“ 是否被按下
  557.                         {
  558.                                 DelayMs(10);                                                  // 去除按鍵按下的抖動(dòng)
  559.                        while(!K3);                                         // 等待按鍵釋放
  560.                        DelayMs(10);
  561.                                 if(AlarmHH<99)                                // 只有當(dāng)濕度上限值小于99時(shí),才能加1
  562.                                         AlarmHH++;
  563.                    

  564.                         }
  565. /////////////////////////////////////////////////////////////////////////////////////////////////////       
  566. }

  567. uchar TAB[8]={0x00,0x00,0x00,0x00,0x00};
  568. void send(uchar dat)
  569. {
  570. SBUF=dat;
  571. while(TI==0);
  572. TI=0;
  573. }
  574. sbit LED1=P0^6;
  575. sbit LED2=P0^7;
  576. sbit LED3=P0^4;
  577. sbit LED4=P0^5;

  578. void panduan(void)
  579. {
  580.         if(wendu<AlarmTL)
  581.          {
  582.            LED1=0;
  583.            Beep=0;
  584.            DelayMs(2);
  585.            Beep=1;
  586.          }
  587.                  if(wendu>AlarmTL)
  588.          {
  589.            LED1=1;
  590.            Beep=1;
  591.          }
  592.                  if(wendu>AlarmTH)
  593.          {
  594.            LED2=0;
  595.            Beep=0;
  596.            DelayMs(2);
  597.            Beep=1;
  598.          }
  599.                    if(wendu<AlarmTH)
  600.          {
  601.            LED2=1;
  602.            Beep=1;
  603.          }
  604.                   if(shidu<AlarmHL)
  605.          {
  606.            LED3=0;
  607.            Beep=0;
  608.            DelayMs(2);
  609.            Beep=1;
  610.          }
  611.                            if(shidu>AlarmHL)
  612.          {
  613.            LED3=1;
  614.            Beep=1;
  615.          }
  616.                    if(shidu>AlarmHH)
  617.          {
  618.            LED4=0;
  619.            Beep=0;
  620.            DelayMs(2);
  621.            Beep=1;
  622.          }
  623.                    if(shidu<AlarmHH)
  624.          {
  625.            LED4=1;
  626.            Beep=1;
  627.          }
  628. }
  629.   //////////////////////////////////////////////////////////////////////////
  630. /*------------------------------------------------
  631.                     主函數(shù)
  632. ------------------------------------------------*/
  633. void main(void)
  634. {
  635. uchar i;
  636. TMOD=0X20;
  637. SCON=0X40;
  638. PCON=0X00;
  639. TH1=0xfd;
  640. TL1=0xfd;
  641. TR1=1;
  642.     key_init();
  643.         AlarmTL=15;
  644.         AlarmTH=50;
  645.         AlarmHL=15;
  646.         AlarmHH=50;
  647.         DHT11_delay_ms(1000);    //DHT11上電后要等待1S以越過不穩(wěn)定狀態(tài)在此期間不能發(fā)送任何指令  
  648.         P0=0xff;
  649.         while (1)
  650.         {
  651.          caidan();
  652.                  if(an==0)
  653.                  {
  654.                       DHT11_receive();
  655.                     shumaguan_show();
  656.                         panduan();
  657.                  }
  658.                                   if(an==1)
  659.                          {
  660.                                 Beep=1;
  661.                                         DelayMs(10);
  662.                                 move_2();        //2位右移
  663.                                 up_down();
  664.                                 LED[1]=AlarmHH/10;// 濕度上限報(bào)警
  665.                                   LED[0]=AlarmHH%10;
  666.                                 LED[2]=AlarmHL%10; // 濕度下限報(bào)警
  667.                                 LED[3]=AlarmHL/10;
  668.                                 LED[7]=AlarmTL/10; // 溫度下限報(bào)警
  669.                                 LED[6]=AlarmTL%10;
  670.                                 LED[4]=AlarmTH%10;// 溫度上限報(bào)警
  671.                                 LED[5]=AlarmTH/10;
  672.                
  673.                                 if(move==0)  LED2_Display (4);
  674.                             if(move==1)  LED2_Display (3);
  675.                                 if(move==2)  LED2_Display (2);
  676.                                 if(move==3)  LED2_Display (1);   
  677.                         }
  678.                                                 if(K5==0)       
  679.                                                 {
  680.                                                          DelayMs(10);                                                  // 去除按鍵按下的抖動(dòng)
  681.                                                                 while(!K5);                                         // 等待按鍵釋放
  682.                                                                 DelayMs(10);
  683.                                                                 TAB[0]=rec_dat[15];
  684.                                                                    TAB[1]=rec_dat[16];
  685.                                                             TAB[2]=rec_dat[17];
  686.                                                                    TAB[3]=rec_dat[18];
  687.                                                             TAB[4]=0x00;
  688.                                                    for(i=0;i<4;i++)
  689.                                                  {
  690.                                                          send(TAB[i]);
  691.                                                                 DelayMs(200);
  692.                                                  }
  693.                                                  }       
  694.                                                                    
  695.         }
  696. }
復(fù)制代碼

所有資料51hei提供下載:
基于單片機(jī)的蔬菜大棚溫濕度智能控制系統(tǒng)設(shè)計(jì).rar (708.89 KB, 下載次數(shù): 279)





評(píng)分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏15 分享淘帖 頂1 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:725749 發(fā)表于 2020-4-9 19:55 | 只看該作者
原理圖用什么軟件看呀
回復(fù)

使用道具 舉報(bào)

板凳
ID:755012 發(fā)表于 2020-5-19 10:10 | 只看該作者
好帖,lz牛逼
回復(fù)

使用道具 舉報(bào)

地板
ID:758682 發(fā)表于 2020-5-22 20:36 | 只看該作者
好帖子很有用
回復(fù)

使用道具 舉報(bào)

5#
ID:165117 發(fā)表于 2020-5-29 15:14 | 只看該作者
好帖子謝謝分享  學(xué)習(xí)學(xué)習(xí)!
回復(fù)

使用道具 舉報(bào)

6#
ID:808396 發(fā)表于 2020-8-22 05:47 | 只看該作者
程序里有l(wèi)cd,但是程序里有l(wèi)cd,而且數(shù)碼管小數(shù)點(diǎn)連接標(biāo)的不明確,程序復(fù)雜而且有很多多余
回復(fù)

使用道具 舉報(bào)

7#
ID:802167 發(fā)表于 2020-8-27 21:55 | 只看該作者
913261927 發(fā)表于 2020-4-9 19:55
原理圖用什么軟件看呀

proteus
回復(fù)

使用道具 舉報(bào)

8#
ID:306996 發(fā)表于 2020-9-9 08:44 | 只看該作者
913261927 發(fā)表于 2020-4-9 19:55
原理圖用什么軟件看呀

ad就可以看
回復(fù)

使用道具 舉報(bào)

9#
ID:937091 發(fā)表于 2021-6-20 19:02 | 只看該作者
“要求當(dāng)前溫濕度數(shù)據(jù)可以記錄、存儲(chǔ)、并通過穿行口上傳到上位機(jī)以備查詢!
                                                                                                                                                      
請(qǐng)問加了這個(gè)條件,需要怎樣實(shí)現(xiàn)呢,是只用在.c程序里寫出來嗎?該怎么寫呢。                                                                       您分享的文件的原理圖還用改變嗎 ?
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表