久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 5452|回復: 7
打印 上一主題 下一主題
收起左側

單片機花園自動澆灌系統仿真與源碼資料

[復制鏈接]
跳轉到指定樓層
樓主
采用STC89C52作為主控芯片,ADC0804采集模擬信號作為花園土壤濕度,DS18B20采集溫度,LCD1602顯示溫濕度;

當溫度低于下限值,啟動水泵進行澆水;
當溫度高于上限值,停止水泵。

仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)



單片機源程序如下:
  1. #include<reg52.h> //包含頭文件,一般情況不需要改動,頭文件包含特殊功能寄存器的定義
  2. #include<intrins.h>
  3. #include<stdio.h>
  4. #include "18b20.h"
  5. #include "delay.h"
  6. #include "key.h"

  7. #define  uint   unsigned int          
  8. #define  uchar  unsigned char

  9. #define  ZERO   4.5                //濕度傳感器放空氣中的電壓值   對應濕度0%
  10. #define  FULL   0.45                //濕度傳感器放水中的電壓值         對應濕度100%

  11. float k,b;//計算濕度用斜率

  12. sbit RS = P2^5;   //定義LCD1602端口
  13. sbit RW = P2^6;
  14. sbit EN = P2^7;
  15. #define DataPort P0

  16. sbit CS  = P2^0; //定義ADC0832端口
  17. sbit CLK = P2^1;
  18. sbit DIO = P2^2;

  19. sbit MOETOR = P3^6;//水泵控制端口

  20. #define RS_CLR RS=0
  21. #define RS_SET RS=1

  22. #define RW_CLR RW=0
  23. #define RW_SET RW=1

  24. #define EN_CLR EN=0
  25. #define EN_SET EN=1

  26. float  d;  //實時濕度值
  27. int RH=50; //濕度上限
  28. int RL=20; //濕度下限

  29. unsigned char KeyValue;        //返回按鍵值

  30. int temp;
  31. float temperature;         //溫度值
  32. char displaytemp[16];//定義顯示區域臨時存儲數組


  33. /*------------------------------------------------
  34.               判忙函數
  35. ------------------------------------------------*/
  36. bit LCD_Check_Busy(void)
  37. {
  38.     unsigned char LCD_Status;
  39.         RS = 0;
  40.         RW = 1;
  41.         EN = 1;
  42.         DelayMs(1);
  43.            LCD_Status = P0;
  44.         EN = 0;
  45.         return LCD_Status;
  46. }
  47. /*------------------------------------------------
  48.               寫入命令函數
  49. ------------------------------------------------*/
  50. void LCD_Write_Com(unsigned char com)
  51. {  
  52.     while((LCD_Check_Busy()&0x80)==0x80);
  53.         RS = 0;
  54.         RW = 0;
  55.         EN = 0;
  56.         P0 = com;
  57.         EN = 1;
  58.         DelayMs(1);
  59.         EN = 0;
  60. }
  61. /*------------------------------------------------
  62.               寫入數據函數
  63. ------------------------------------------------*/
  64. void LCD_Write_Data(unsigned char Data)
  65. {
  66. while((LCD_Check_Busy()&0x80)==0x80);
  67.         RS = 1;
  68.         RW = 0;
  69.         EN = 0;
  70.         P0 = Data;
  71.         EN = 1;
  72.         DelayMs(1);
  73.         EN = 0;
  74. }

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



  138. unsigned char Get_AD_Result()        //讀取AD值
  139. {
  140. uchar i,dat1=0,dat2=0;
  141.         CS  = 0;
  142.         CLK = 0;
  143.         DIO = 1; _nop_(); _nop_();
  144.         CLK = 1; _nop_(); _nop_();
  145.         CLK = 0;DIO = 1; _nop_(); _nop_();
  146.         CLK = 1; _nop_(); _nop_();
  147.         CLK = 0;DIO = 1; _nop_(); _nop_();
  148.         CLK = 1;DIO = 1; _nop_(); _nop_();
  149.         CLK = 0;DIO = 1; _nop_(); _nop_();
  150.         for(i=0;i<8;i++)
  151.         {
  152.                  CLK = 1; _nop_(); _nop_();
  153.                 CLK = 0; _nop_(); _nop_();
  154.                 dat1 = dat1 << 1 | DIO;       
  155.         }
  156.         for(i=0;i<8;i++)
  157.         {
  158.                  dat2 = dat2 << ((uchar)(DIO)<<i);
  159.                 CLK = 1; _nop_(); _nop_();
  160.                 CLK = 0; _nop_(); _nop_();
  161.         }
  162.         CS = 1;
  163.         return dat1; //== dat2) ? dat1:0;
  164. }

  165. /*------------------------------------------------
  166.                     主函數
  167. ------------------------------------------------*/
  168. void main(void)
  169. {

  170.        
  171.     LCD_Init();
  172.         DelayMs(10);
  173. //Init_Timer0();
  174.         MOETOR =0;        //默認水泵關閉

  175. while (1)
  176. {  
  177.       KeyValue=KeyScan();
  178.           if(KeyValue!=0)//如果有鍵按下
  179.           {       
  180.         Keyprocessing(KeyValue); //鍵值處理
  181.           }

  182.     temp=ReadTemperature();  //讀取溫度值
  183.     temperature=(float)temp*0.0625;
  184.     sprintf(displaytemp,"T =%3.1f",temperature);//
  185.     LCD_Write_String(0,0,displaytemp);// 顯示溫度值

  186.     d = Get_AD_Result()*5/255; //計算電壓值
  187.         k = 100/(FULL-ZERO);           //根據空氣中和水中的電壓值列函數y=kx+b 計算 k b
  188.         b = 0-ZERO*k;
  189.         d = k*d+b;          //計算實際的濕度值
  190.         if(d<0)        d=0;
  191.         if(d>100) d=100;
  192.         //d = k*d+b;
  193.     sprintf(displaytemp,"R =%3.1f",d);//
  194.     LCD_Write_String(8,0,displaytemp);// 顯示濕度


  195.     sprintf(displaytemp,"RH=%2d",RH);//
  196.     LCD_Write_String(0,1,displaytemp);// 顯示濕度上限
  197.     sprintf(displaytemp,"RL=%2d",RL);//
  198.     LCD_Write_String(10,1,displaytemp);//        顯示濕度下限

  199.         if(d<RL) MOETOR =1;          //低于下限 開水泵
  200.         if(d>RH) MOETOR =0;          //高于上限 關水泵

  201.     DelayMs(300);

  202. }
  203. }


復制代碼

所有資料51hei提供下載:
程序.zip (138.29 KB, 下載次數: 87)



分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏4 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:357735 發表于 2018-6-29 09:33 來自手機 | 只看該作者
警告,有三個改都改不掉
回復

使用道具 舉報

板凳
ID:232619 發表于 2018-11-30 13:33 | 只看該作者
謝謝分享謝謝分享謝謝分享
回復

使用道具 舉報

地板
ID:442640 發表于 2018-12-9 14:27 | 只看該作者
請問RS接的是什么元件
回復

使用道具 舉報

5#
ID:304785 發表于 2019-4-27 11:07 | 只看該作者
keil123 發表于 2018-12-9 14:27
請問RS接的是什么元件

RS接的是液晶的控制引腳
回復

使用道具 舉報

6#
ID:304785 發表于 2019-4-27 11:08 | 只看該作者
天空飛魚 發表于 2018-6-29 09:33
警告,有三個改都改不掉

為什么要消除警告呢,直接可以跑得。如果需要改掉可以聯系我。
回復

使用道具 舉報

7#
ID:752801 發表于 2020-5-15 18:40 來自手機 | 只看該作者
可以教我一下嘛?
回復

使用道具 舉報

8#
ID:752801 發表于 2020-5-15 18:43 來自手機 | 只看該作者
可以教我一下嘛?
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 免费午夜视频在线观看 | 久久成人一区 | 亚洲一区免费在线 | 国产精品无码久久久久 | 国产欧美在线 | 国产精品.xx视频.xxtv | 日韩视频在线一区二区 | 欧美日韩视频网站 | 高清久久 | 国产精品久久777777 | 精品美女视频在免费观看 | 欧美日韩在线播放 | 中文字幕一区二区三区精彩视频 | 成人性视频在线播放 | 风间由美一区二区三区在线观看 | 91精品国产综合久久精品 | 日韩日韩日韩日韩日韩日韩日韩 | 乱码av午夜噜噜噜噜动漫 | 亚洲成人一区二区 | 一区二区在线不卡 | 久久综合一区二区三区 | 在线视频日韩 | 男女羞羞视频大全 | 精品欧美一区二区三区久久久 | 亚洲欧美日韩久久久 | 国产免费观看久久黄av片涩av | 在线观看免费av网 | 日本一区二区三区四区 | 91精品久久久久 | 日韩成人久久 | 日韩电影免费在线观看中文字幕 | 国产1区2区3区 | 午夜一级大片 | 欧美三级电影在线播放 | 国产欧美一区二区三区在线看蜜臀 | 91精品国产色综合久久 | 中文字幕 国产 | 久久久精| www.嫩草| 四虎成人精品永久免费av九九 | 伊人久久在线 |