基于51单片机的智能浇花系统(可做毕设)
- 一、系统介绍
- 二、仿真展示
- 三、实物展示
- 四、仿真过程
- 五、代码
- 1、ADC0832
- 2、LCD1602
- 3、按键
- 4、水泵
- 5、温湿度
- 6、定时器
- 7、main.c
- 五、完整工程
对LCD1602原理和操作掌握不好的可以看这篇:
快速掌握——LCD1602液晶显示(多组实验,附带源程序)
按键可以参考这篇:
按键(独立按键、矩阵键盘)——附带程序
定时器可以参考这两篇
1、基于51的数码管电子时钟(显示时、分、秒)——定时器
2、基于51单片机的数码管时钟设计——按键修改时间
一、系统介绍
本系统主要由STC89C52单片机最小系统、土壤湿度传感器、温湿度检测传感器DHT11、ADC0832 芯片、LCD1602显示电路、水泵控制电路、按键设置电路以及电源电路构成。
工作过程是:
温湿度传感器DHT11将采集到的温湿度信号直接由数据接口传到单片机,单片机处理后再LCD1602上显示出来;传感器采集到湿度信号经ADC0832 A/D转换后传给单片机,经单片机处理后,在LCD1602上显示出湿度的具体数值,同时单片机将接收到的湿度信号与湿度的上下限比较,判断是否浇水。通过按键可以设置湿度的上下限,并在LCD上显示。
硬件材料:
材料 | 数量 |
---|---|
STC89C52RC | 1 |
电阻 | 若干 |
土壤湿度传感器(5V) | 1 |
DHT11温湿度模块 | 1 |
LCD1602 | 1 |
潜水泵(5V) | 1 |
电源模块(5V输出) | 1 |
锂电池(7.4V) | 1 |
按键开关 | 4 |
1路继电器(5V) | 1 |
三极管(S8550) | 1 |
ADC0832 | 1 |
单片机最小电路是我自己焊接的,材料和电路百度上就有,不想麻烦的可以直接买最小电路板,其他都是模块,直接在某宝买就行
二、仿真展示
LCD显示内容介绍:
R:环境湿度
T:环境温度
H:土壤最高湿度值
L:土壤最低湿度值
S:土壤当前湿度值
>>>:手动浇水模式(不显示>>>为自动模式)
三、实物展示
四、仿真过程
在仿真的过程中用滑动变阻器代替湿度传感器。如下图,是启动仿真刚开始的情况。LCD1602上显示的湿度上限是60,湿度下限是30,当前湿度是62,超过湿度上限,所以LED灯没有被点亮,电动机也没有启动。
当调节滑动变阻器,使得阻值增大,即实际的湿度很小,如下图,此时在LCD1602上显示的湿度是26,低于湿度的下限,因此LED被点亮,电动机启动。
按键的调试。按键K1是菜单键,当按下第一次时,是对湿度的上限进行设置,K2是对湿度进行加,K3是对湿度进行减,如下图。
当K1被按下第二次时,是对湿度的下限进行设置,K2是对湿度进行加,K3是对湿度进行减,如下图。
当K1倍按下第三次时,是启动手动浇水模式,LCD的右下角会显示“>>>”,如下图,K2是启动,K3是停止。
五、代码
1、ADC0832
///ADC0832///uchar adc0832() {uchar i,temp,temp1,num;CLK=0; DO=1;CS=0; CLK=1; CLK=0; DO=1; CLK=1; CLK=0; DO=0; CLK=1; CLK=0; DO=1;for(i=0;i<8;i++){CLK=1;CLK=0;temp<<=1;if(DO)temp++;}for(i=0;i<8;i++){temp1>>=1;if(DO)temp1+=0x80;CLK=1;CLK=0; }CLK=1;DO=1;CS=1;if(temp==temp1) num=100-temp*99/255; //adat=100-adat*99/255;return num;
}
2、LCD1602
/LCD1602void Read_Busy(){ //判忙unsigned char sta; P0 = 0xff;lcd_rs= 0;lcd_rw = 1;do{lcd_e= 1;sta = P0;lcd_e = 0; }while(sta & 0x80);
}void Lcd1602_Write_Cmd(uchar cmd){ //写指令Read_Busy();lcd_rs = 0;lcd_rw = 0;P0= cmd;lcd_e = 1;lcd_e = 0;
}void Lcd1602_Write_Data(uchar dat){ //写数据Read_Busy();lcd_rs = 1;lcd_rw = 0;P0 = dat;lcd_e = 1;lcd_e = 0;
}void init_lcd(){uchar code D[]="H: ";uchar code T[]="L: ";uchar code S[]="S: ";uchar code R[]="R: %";uchar code F[]="T: ";.....
}
3、按键
4、水泵
5、温湿度
6、定时器
void t0()interrupt 1{uchar count;TH0=(65536-50000)/256;TL0=(65536-50000)%256;count++;if(count>0&&count<=60){Wat=0;}if(count>60&&count<=120){if(count==120)count=0;Wat=1;}
}
7、main.c
主函数///
void main() {TMOD=0x01;TH0=(65536-50000)/256; TL0=(65536-50000)%256;EA=1; ET0=1;
// TR0=1; k1n=0;init_lcd();while(1){key0();if(k1n==0){adat=adc0832();water();disp0(); }if(k1n!=0){key1();}}
}
五、完整工程
基于51单片机智能浇花系统(可做毕设)(内含传感器资料和示例代码).zip
对于仿真过程中出现的各种问题,如仿真失败、LCD显示信息出错等,可能是由于Proteus版本不一致、Proteus参数设置不一致等多种因素造成,无法一一回答,望见谅!