光照检测,外围环境变暗时,指示灯亮,5s后指示灯灭,生物补给灯亮,外围环境恢复光亮时,生物补给灯灭,
土壤湿度检测,土壤过干时,水泵抽水,土壤变湿润时,水泵停止工作
温度检测,温度过高时,风扇启动,使空气流通来降温,温度适宜时,风扇停止,12864会显示这三个环境因素的情况
单片机源程序:
- #include<reg52.h>
- #include "dht12.h"
- #include<intrins.h>
- #define uchar unsigned char
- #define uint unsigned int
- ///*TS12864A-3 端口定义*/
- //#define LCD_data P0 //数据口
- //sbit LCD_RS = P3^4; //寄存器选择输入
- //sbit LCD_RW = P3^5; //液晶读/写控制
- //sbit LCD_EN = P3^6; //液晶使能控制
- //sbit LCD_PSB = P3^7; //串/并方式控制
- ///* 89c52 端口定义*/
- //sbit turang=P1^3;
- //sbit choushui=P2^5;
- //sbit feng=P1^7;
- sbit guang=P2^1;
- sbit zhao=P2^2;
- sbit guangbu=P2^4;
- //uchar chun ;
- //uchar i;
- //uchar code dis1[] = {"智能花卉培养装置"};
- //uchar code dis2[] = {"光照:"};
- //uchar code dis3[] = {"温度:"};
- //uchar code dis4[] = {"湿度:"};
- //uchar code dis5[] = {"适宜"};
- //uchar code dis6[] = {"较暗"};
- //uchar code dis7[] = {"适宜"};
- //uchar code dis8[] = {"偏高"};
- //uchar code dis9[] = {"适宜"};
- //uchar code dis0[] = {"干燥"};
- //
- //#define delayNOP(); {_nop_();_nop_();_nop_();_nop_();};
- //uchar IRDIS[2];
- //uchar IRCOM[4];
- //void delay0(uchar x); //x*0.14MS
- //void beep();
- //void dataconv();
- //void lcd_pos(uchar X,uchar Y); //确定显示位置
- /*******************************************************************/
- /* */
- /* 延时函数 */
- /* */
- /*******************************************************************/
- void delay(int ms)
- {
- while(ms--)
- {
- uchar i;
- for(i=0;i<250;i++)
- {
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- }
- }
- }
- /*******************************************************************/
- /* */
- /*检查LCD忙状态 */
- /*lcd_busy为1时,忙,等待。lcd-busy为0时,闲,可写指令与数据。 */
- /* */
- /*******************************************************************/
- //bit lcd_busy()
- // {
- // bit result;
- // LCD_RS = 0;
- // LCD_RW = 1;
- // LCD_EN = 1;
- // delayNOP();
- // result = (bit)(P0&0x80);
- // LCD_EN = 0;
- // return(result);
- // }
- ///*******************************************************************/
- ///* */
- ///*写指令数据到LCD */
- ///*RS=L,RW=L,E=高脉冲,D0-D7=指令码。 */
- ///* */
- ///*******************************************************************/
- //void lcd_wcmd(uchar cmd)
- //{
- // while(lcd_busy());
- // LCD_RS = 0;
- // LCD_RW = 0;
- // LCD_EN = 0;
- // _nop_();
- // _nop_();
- // P0 = cmd;
- // delayNOP();
- // LCD_EN = 1;
- // delayNOP();
- // LCD_EN = 0;
- //}
- ///*******************************************************************/
- ///* */
- ///*写显示数据到LCD */
- ///*RS=H,RW=L,E=高脉冲,D0-D7=数据。 */
- ///* */
- ///*******************************************************************/
- //void lcd_wdat(uchar dat)
- //{
- // while(lcd_busy());
- // LCD_RS = 1;
- // LCD_RW = 0;
- // LCD_EN = 0;
- // P0 = dat;
- // delayNOP();
- // LCD_EN = 1;
- // delayNOP();
- // LCD_EN = 0;
- //}
- ///*******************************************************************/
- ///* */
- ///* LCD初始化设定 */
- ///* */
- ///*******************************************************************/
- //void lcd_init()
- //{
- // LCD_PSB = 1; //并口方式
- //
- // lcd_wcmd(0x34); //扩充指令操作
- // delay(5);
- // lcd_wcmd(0x30); //基本指令操作
- // delay(5);
- // lcd_wcmd(0x0C); //显示开,关光标
- // delay(5);
- // lcd_wcmd(0x01); //清除LCD的显示内容
- // delay(5);
- //}
- ///**************************************/
- // /*********************************************************/
- ///* */
- ///* 延时x*0.14ms子程序 */
- ///* */
- ///*********************************************************/
- //void delay0(uchar x) //x*0.14MS
- //{
- // uchar i;
- // while(x--)
- // {
- // for (i = 0; i<13; i++) {}
- // }
- //}
- ///*********************************************************/
- ///* */
- ///* 设定显示位置 */
- ///* */
- ///*********************************************************/
- //void lcd_pos(uchar X,uchar Y)
- //{
- // uchar pos;
- // if (X==0)
- // {X=0x80;}
- // else if (X==1)
- // {X=0x90;}
- // else if (X==2)
- // {X=0x88;}
- // else if (X==3)
- // {X=0x98;}
- // pos = X+Y ;
- // lcd_wcmd(pos); //显示地址
- //}
- //void Lcd()
- //{
- // /*************************************/
- // /******** 显示屏初始化 ********/
- // /*************************************/
- // /*************************************/
- // delay(10); //延时
- // lcd_init(); //初始化LCD
- //
- // /*************************************/
- // /******** 显示屏 ********/
- // /***************第一行*****************/
- // /*************************************/
- // lcd_pos(0,0); //设置显示位置为第一行的第1个字符
- // i = 0;
- // while(dis1[i] != '\0')
- // { //显示字符
- // lcd_wdat(dis1[i]);
- // i++;
- // }
- // /*************************************/
- // /******** 显示屏 ********/
- // /***************第二行*****************/
- // /*************************************/
- // lcd_pos(1,0); //设置显示位置为第二行的第1个字符
- // i = 0;
- // while(dis2[i] != '\0')
- // {
- // lcd_wdat(dis2[i]); //显示字符
- // i++;
- // }
- // lcd_pos(1,3); //设置显示位置为第二行的第4个字符
- // i = 0;
- // if(guang==0)
- // {
- // while(dis5[i] != '\0')
- // {
- // lcd_wdat(dis5[i]); //显示字符
- // i++;
- // }
- // }
- // else
- // {
- // while(dis6[i] != '\0')
- // {
- // lcd_wdat(dis6[i]); //显示字符
- // i++;
- // }
- // }
- // /*************************************/
- // /******** 显示屏 ********/
- // /***************第三行*****************/
- // /*************************************/
- // lcd_pos(2,0); //设置显示位置为第三行的第1个字符
- // i = 0;
- //
- // while(dis3[i] != '\0')
- // {
- // lcd_wdat(dis3[i]); //显示字符
- // i++;
- // }
- // lcd_pos(2,3); //设置显示位置为第三行的第4个字符
- // i = 0;
- // if(chun<25)
- // {
- // while(dis7[i] != '\0')
- // {
- // lcd_wdat(dis7[i]); //显示字符
- // i++;
- // }
- // }
- // else
- // {
- // while(dis8[i] != '\0')
- // {
- // lcd_wdat(dis8[i]); //显示字符
- // i++;
- // }
- // }
- // /*************************************/
- // /******** 显示屏 ********/
- // /***************第四行*****************/
- // /*************************************/
- // lcd_pos(3,0); //设置显示位置为第四行的第1个字符
- // i = 0;
- // while(dis4[i] != '\0')
- // {
- // lcd_wdat(dis4[i]); //显示字符
- // i++;
- // }
- // lcd_pos(3,3); //设置显示位置为第四行的第4个字符
- // i = 0;
- // if(turang==0)
- // {
- // while(dis9[i] != '\0')
- // {
- // lcd_wdat(dis9[i]); //显示字符
- // i++;
- // }
- // }
- // else
- // {
- // while(dis0[i] != '\0')
- // {
- // lcd_wdat(dis0[i]); //显示字符
- // i++;
- // }
- // }
- //}
- ///*******温度检测******/
- // /*********************/
- // /*********************/
- //void Temperature()
- //{
- //
- //
- // struct DHT12_Message dht11;
- // init_dht11();
- // dht11=get_data_dht11();
- // chun= (dht11.temperature_shi-48)*10+(dht11.temperature_ge-48);
- // if(chun>25)
- //
- // {
- // feng=0;
- // }
- // else
- // {
- // feng=1;
- //
- // }
- //}
- // /*****土壤湿度检测******/
- // /*********************/
- // /*********************/
- //void Soil()
- //{
- //
- //
- // if(turang==0)
- // {
- // choushui=1;
- //
- // }
- // else
- // {
- // choushui=0;
- // }
- //}
- /*****光照检测******/
- /*********************/
- /*********************/
- void Illumination()
- {
- if(guang==0)
- {
- zhao=1;
- ……………………
- …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码
所有资料51hei提供下载:
bishe1.7z
(25.49 KB, 下载次数: 16)
|