找回密码
 立即注册

QQ登录

只需一步,快速开始

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

基于单片机的智能花卉培养装置源码

[复制链接]
跳转到指定楼层
楼主
光照检测,外围环境变暗时,指示灯亮,5s后指示灯灭,生物补给灯亮,外围环境恢复光亮时,生物补给灯灭,
土壤湿度检测,土壤过干时,水泵抽水,土壤变湿润时,水泵停止工作
温度检测,温度过高时,风扇启动,使空气流通来降温,温度适宜时,风扇停止,12864会显示这三个环境因素的情况


单片机源程序:
  1. #include<reg52.h>
  2. #include "dht12.h"
  3. #include<intrins.h>
  4. #define uchar unsigned char
  5. #define uint unsigned int
  6. ///*TS12864A-3 端口定义*/
  7. //#define LCD_data  P0             //数据口
  8. //sbit LCD_RS  =  P3^4;            //寄存器选择输入
  9. //sbit LCD_RW  =  P3^5;            //液晶读/写控制
  10. //sbit LCD_EN  =  P3^6;            //液晶使能控制
  11. //sbit LCD_PSB =  P3^7;            //串/并方式控制

  12. ///*     89c52 端口定义*/
  13. //sbit turang=P1^3;
  14. //sbit choushui=P2^5;
  15. //sbit feng=P1^7;
  16. sbit guang=P2^1;
  17. sbit zhao=P2^2;
  18. sbit guangbu=P2^4;
  19. //uchar chun ;
  20. //uchar i;


  21. //uchar code dis1[] = {"智能花卉培养装置"};
  22. //uchar code dis2[] = {"光照:"};
  23. //uchar code dis3[] = {"温度:"};
  24. //uchar code dis4[] = {"湿度:"};
  25. //uchar code dis5[] = {"适宜"};
  26. //uchar code dis6[] = {"较暗"};
  27. //uchar code dis7[] = {"适宜"};
  28. //uchar code dis8[] = {"偏高"};
  29. //uchar code dis9[] = {"适宜"};
  30. //uchar code dis0[] = {"干燥"};
  31. //   

  32. //#define delayNOP(); {_nop_();_nop_();_nop_();_nop_();};
  33. //uchar IRDIS[2];
  34. //uchar IRCOM[4];
  35. //void delay0(uchar x);  //x*0.14MS
  36. //void beep();
  37. //void  dataconv();
  38. //void lcd_pos(uchar X,uchar Y);  //确定显示位置
  39. /*******************************************************************/
  40. /*                                                                 */
  41. /*  延时函数                                                       */
  42. /*                                                                 */
  43. /*******************************************************************/
  44. void delay(int ms)
  45. {
  46.     while(ms--)
  47.         {
  48.       uchar i;
  49.           for(i=0;i<250;i++)  
  50.            {
  51.             _nop_();                          
  52.                 _nop_();
  53.                 _nop_();
  54.                 _nop_();
  55.            }
  56.         }
  57. }               
  58. /*******************************************************************/
  59. /*                                                                 */
  60. /*检查LCD忙状态                                                    */
  61. /*lcd_busy为1时,忙,等待。lcd-busy为0时,闲,可写指令与数据。      */
  62. /*                                                                 */
  63. /*******************************************************************/
  64. //bit lcd_busy()
  65. // {                          
  66. //    bit result;
  67. //    LCD_RS = 0;
  68. //    LCD_RW = 1;
  69. //    LCD_EN = 1;
  70. //    delayNOP();
  71. //    result = (bit)(P0&0x80);
  72. //    LCD_EN = 0;
  73. //    return(result);
  74. // }
  75. ///*******************************************************************/
  76. ///*                                                                 */
  77. ///*写指令数据到LCD                                                  */
  78. ///*RS=L,RW=L,E=高脉冲,D0-D7=指令码。                             */
  79. ///*                                                                 */
  80. ///*******************************************************************/
  81. //void lcd_wcmd(uchar cmd)
  82. //{                          
  83. //   while(lcd_busy());
  84. //    LCD_RS = 0;
  85. //    LCD_RW = 0;
  86. //    LCD_EN = 0;
  87. //    _nop_();
  88. //    _nop_();
  89. //    P0 = cmd;
  90. //    delayNOP();
  91. //    LCD_EN = 1;
  92. //    delayNOP();
  93. //    LCD_EN = 0;  
  94. //}
  95. ///*******************************************************************/
  96. ///*                                                                 */
  97. ///*写显示数据到LCD                                                  */
  98. ///*RS=H,RW=L,E=高脉冲,D0-D7=数据。                               */
  99. ///*                                                                 */
  100. ///*******************************************************************/
  101. //void lcd_wdat(uchar dat)
  102. //{                          
  103. //   while(lcd_busy());
  104. //    LCD_RS = 1;
  105. //    LCD_RW = 0;
  106. //    LCD_EN = 0;
  107. //    P0 = dat;
  108. //    delayNOP();
  109. //    LCD_EN = 1;
  110. //    delayNOP();
  111. //    LCD_EN = 0;
  112. //}
  113. ///*******************************************************************/
  114. ///*                                                                 */
  115. ///*  LCD初始化设定                                                  */
  116. ///*                                                                 */
  117. ///*******************************************************************/
  118. //void lcd_init()
  119. //{

  120. //    LCD_PSB = 1;         //并口方式
  121. //   
  122. //    lcd_wcmd(0x34);      //扩充指令操作
  123. //    delay(5);
  124. //    lcd_wcmd(0x30);      //基本指令操作
  125. //    delay(5);
  126. //    lcd_wcmd(0x0C);      //显示开,关光标
  127. //    delay(5);
  128. //    lcd_wcmd(0x01);      //清除LCD的显示内容
  129. //    delay(5);
  130. //}




  131. ///**************************************/
  132. // /*********************************************************/
  133. ///*                                                                                                                 */
  134. ///* 延时x*0.14ms子程序                                                                         */
  135. ///*                                                       */
  136. ///*********************************************************/

  137. //void delay0(uchar x)    //x*0.14MS
  138. //{
  139. //  uchar i;
  140. //  while(x--)
  141. // {
  142. //  for (i = 0; i<13; i++) {}
  143. // }
  144. //}
  145. ///*********************************************************/
  146. ///*                                                       */
  147. ///* 设定显示位置                                          */
  148. ///*                                                       */
  149. ///*********************************************************/
  150. //void lcd_pos(uchar X,uchar Y)
  151. //{                          
  152. //   uchar  pos;
  153. //   if (X==0)
  154. //     {X=0x80;}
  155. //   else if (X==1)
  156. //     {X=0x90;}
  157. //   else if (X==2)
  158. //     {X=0x88;}
  159. //   else if (X==3)
  160. //     {X=0x98;}
  161. //   pos = X+Y ;  
  162. //   lcd_wcmd(pos);     //显示地址
  163. //}







  164. //void Lcd()
  165. //{
  166. //         /*************************************/
  167. //         /********    显示屏初始化     ********/
  168. //         /*************************************/
  169. //         /*************************************/   

  170. //    delay(10);                 //延时
  171. //    lcd_init();                //初始化LCD            
  172. //  
  173. //          /*************************************/
  174. //         /********       显示屏        ********/
  175. //         /***************第一行*****************/
  176. //         /*************************************/

  177. //    lcd_pos(0,0);             //设置显示位置为第一行的第1个字符
  178. //     i = 0;
  179. //    while(dis1[i] != '\0')
  180. //     {                         //显示字符
  181. //       lcd_wdat(dis1[i]);
  182. //       i++;
  183. //     }

  184. //         /*************************************/
  185. //         /********       显示屏        ********/
  186. //         /***************第二行*****************/
  187. //         /*************************************/


  188. //    lcd_pos(1,0);             //设置显示位置为第二行的第1个字符
  189. //     i = 0;
  190. //    while(dis2[i] != '\0')
  191. //     {
  192. //       lcd_wdat(dis2[i]);      //显示字符
  193. //       i++;
  194. //     }

  195. //           lcd_pos(1,3);                  //设置显示位置为第二行的第4个字符
  196. //                        i = 0;

  197. //         if(guang==0)
  198. //           {
  199. //                        while(dis5[i] != '\0')
  200. //                        {
  201. //                                lcd_wdat(dis5[i]);      //显示字符
  202. //                i++;
  203. //                        }
  204. //           }
  205. //           else
  206. //           {
  207. //                        while(dis6[i] != '\0')
  208. //                        {
  209. //                                lcd_wdat(dis6[i]);      //显示字符
  210. //                i++;
  211. //                                }
  212. //           }

  213. //         /*************************************/
  214. //         /********       显示屏        ********/
  215. //         /***************第三行*****************/
  216. //         /*************************************/
  217. //          lcd_pos(2,0);             //设置显示位置为第三行的第1个字符
  218. //     i = 0;
  219. //         
  220. //    while(dis3[i] != '\0')
  221. //     {
  222. //       lcd_wdat(dis3[i]);      //显示字符
  223. //       i++;
  224. //     }

  225. //                lcd_pos(2,3);             //设置显示位置为第三行的第4个字符
  226. //        i = 0;


  227. //                if(chun<25)
  228. //           {
  229. //                        while(dis7[i] != '\0')
  230. //                        {
  231. //                                lcd_wdat(dis7[i]);      //显示字符
  232. //                i++;
  233. //                        }
  234. //           }
  235. //           else
  236. //           {
  237. //                        while(dis8[i] != '\0')
  238. //                        {
  239. //                                lcd_wdat(dis8[i]);      //显示字符
  240. //                i++;
  241. //                                }
  242. //           }


  243. //         /*************************************/
  244. //         /********       显示屏        ********/
  245. //         /***************第四行*****************/
  246. //         /*************************************/
  247. //         lcd_pos(3,0);             //设置显示位置为第四行的第1个字符
  248. //     i = 0;
  249. //     while(dis4[i] != '\0')
  250. //     {
  251. //       lcd_wdat(dis4[i]);      //显示字符
  252. //       i++;
  253. //     }


  254. //          lcd_pos(3,3);             //设置显示位置为第四行的第4个字符
  255. //     i = 0;
  256. //         if(turang==0)
  257. //           {
  258. //                        while(dis9[i] != '\0')
  259. //                        {
  260. //                                lcd_wdat(dis9[i]);      //显示字符
  261. //                i++;
  262. //                        }
  263. //           }
  264. //           else
  265. //           {
  266. //                        while(dis0[i] != '\0')
  267. //                        {
  268. //                                lcd_wdat(dis0[i]);      //显示字符
  269. //                i++;
  270. //                                }
  271. //           }


  272. //}



  273. ///*******温度检测******/
  274. //        /*********************/
  275. //                /*********************/


  276. //void Temperature()
  277. //{
  278. //          
  279. //       
  280. //           struct DHT12_Message dht11;
  281. //          init_dht11();
  282. //          dht11=get_data_dht11();
  283. //         chun= (dht11.temperature_shi-48)*10+(dht11.temperature_ge-48);
  284. //   if(chun>25)
  285. //   
  286. //   {
  287. //    feng=0;

  288. //   }                  
  289. //        else
  290. //        {
  291. //         feng=1;
  292. //       
  293. //        }
  294. //}



  295. //                 /*****土壤湿度检测******/
  296. //        /*********************/
  297. //                /*********************/

  298. //void Soil()
  299. //{


  300. //     
  301. //          
  302. //                if(turang==0)
  303. //        {
  304. //          choushui=1;
  305. //          
  306. //        }                 
  307. //           else
  308. //        {
  309. //         choushui=0;
  310. //        }


  311. //}


  312.                   /*****光照检测******/
  313.         /*********************/
  314.                 /*********************/

  315. void Illumination()
  316. {
  317.                   if(guang==0)
  318.                 {
  319.                         zhao=1;
  320. ……………………

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

所有资料51hei提供下载:
bishe1.7z (25.49 KB, 下载次数: 16)



评分

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

查看全部评分

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

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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