基于51单片机的智能浇花系统(可做毕设)

对LCD1602原理和操作掌握不好的可以看这篇:
快速掌握——LCD1602液晶显示(多组实验,附带源程序)
按键可以参考这篇:
按键(独立按键、矩阵键盘)——附带程序
定时器可以参考这两篇
1、基于51的数码管电子时钟(显示时、分、秒)——定时器
2、基于51单片机的数码管时钟设计——按键修改时间

一、系统介绍

本系统主要由STC89C52单片机最小系统、土壤湿度传感器、温湿度检测传感器DHT11、ADC0832 芯片、LCD1602显示电路、水泵控制电路、按键设置电路以及电源电路构成。

工作过程是:
温湿度传感器DHT11将采集到的温湿度信号直接由数据接口传到单片机,单片机处理后再LCD1602上显示出来;传感器采集到湿度信号经ADC0832 A/D转换后传给单片机,经单片机处理后,在LCD1602上显示出湿度的具体数值,同时单片机将接收到的湿度信号与湿度的上下限比较,判断是否浇水。通过按键可以设置湿度的上下限,并在LCD上显示。

硬件材料:
单片机最小电路是我自己焊接的,材料和电路百度上就有,不想麻烦的可以直接买最小电路板,其他都是模块,直接在某宝买就行

材料型号不了解的私信我
系统结构框图

二、仿真展示

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

/LCD1602

void 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

版权声明:本文为CSDN博主「Guan_qiqi」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_44526422/article/details/118566725

生成海报
点赞 0

Guan_qiqi

我还没有学会写个人说明!

暂无评论

发表评论

相关推荐

用51单片机做宿舍门禁系统(1)--1602显示

由于时间紧迫,还有其他考试,所以目前只能抽时间慢慢做慢慢更新了,本身就是一个练手项目。 1602显示 所谓的智能系统,没有显示是万万不能的,所以有一个显示的东西是很必要的

郭天祥的10天学会51单片机_第九节

开发板上的蜂鸣器下面是温度传感器DS18B20 DA转换器的下面是SPI总线(RFR、IOUT、DI0和GND) I2C总线和SPI总线用的多。 I2C总线仲裁:具有 C总线接口的设备都接在总线上

基于AT89C51的蓝牙循迹避障小车

基于AT89C51的蓝牙循迹避障小车 对标题的解读: AT89C51:在下使用的是STC89C52这款芯片,c51和c52在新手入门阶段是一样的,所以不必纠结于到底是哪个名字&#xff