【51单片机】【protues仿真】基于51单片机自动浇花强大的系统

目录

一、主要能力

二、运用步骤

三、硬件资源

四、软件设计

五、实验现象

一、主要功能

1、LCD1602液晶显示土壤湿度值
2、按键设置土壤湿度阈值
3、土壤湿度值低于下限时,蜂鸣器报警并驱动水泵浇水
4、土壤湿度值高于上限时停止浇水

二、使用步骤

基于51单片机的自动浇花系统是一种依据土壤湿度传感器检测环境湿度,并自动控制水泵进行灌溉的智能装置。

三、硬件资源

1、51单片机核心模块
2、按键模块
3、土壤湿度传感器、数模转换模块
4、蜂鸣器模块
5、继电器模块
6、LCD1602显示模块

四、软件设计

#include <reg51.H>
#include "intrins.h"
#define uint unsigned int
#define uchar unsigned char
#define ulong unsigned long
#define LCDIO P0 //液晶屏数据口
//ADC0832的引脚
sbit ADCLK =P1^1; //ADC0832 clock signal
sbit ADDIO =P1^3; //ADC0832 k in
sbit ADCS =P1^4; //ADC0832 chip seclect

sbit rs=P1^0; //定义1602 RS
sbit lcden=P1^2; //定义1602 EN
sbit key1=P3^0; //设定
sbit key2=P3^1; //加
sbit key3=P3^2; //减
sbit motor=P3^7; //继电器接口
sbit speak=P1^5; //蜂鸣器接口
uchar key; //设定指针
uint RH=400,RL=200;//水位上下限
float temp_f;
ulong temp;
uchar v;
uchar count,s1num;
uchar code table[]= "soil hum: ";
uchar code table1[]="RH: % ";
uchar getdata; //获取ADC转换回来的值
/*********************************************/
void delay(uint z) //延时
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
/**********************************************/
void write_com(uchar com)
{
rs=0;
// rd=0;
lcden=0;
P0=com;
delay(5);
lcden=1;
delay(5);
lcden=0;
}
/*********************************************/
void write_date(uchar date)
{
rs=1;

lcden=0;
P0=date;
delay(5);
lcden=1;
delay(5);
lcden=0;
}

void lcdinit()
{
lcden=0;
write_com(0x38);
write_com(0x0c);
write_com(0x06);
write_com(0x01);
}
/***********************************************/
void init()
{
uchar num;

for(num=0;num<15;num++)
{
write_date(table[num]);
delay(5);
}
write_com(0x80+0x40);
for(num=0;num<15;num++)
{
write_date(table1[num]);
delay(5);
}
}


/********************************************************/
void displayRH() //下限显示
{write_com(0xc0+3);
write_date(RH/100%10+0x30);//上限百位
write_date(RH/10%10+0x30);//上限十位
//write_date('.');
//write_date(RH%10+0x30);
}
void displayRL() //下限显示
{write_com(0xca);
write_date('R');
write_date('L');
write_date(':');
write_date(RL/100%10+0x30);
write_date(RL/10%10+0x30);
write_date('%');
}
/**************************************************/

void main(void)
{
lcdinit();
init();
displayRH(); //显示上限
displayRL(); //显示下限
delay(50);
delay(50); //延时片刻(可不要)
delay(50); //延时
delay(50);
Conut(); //显示函数
delay(150);
while(1)
{
Conut();
keyscan();
if(temp>RH)
{motor=1;
}
else if(temp<RL)
{motor=0;
}
if(temp<RL) //小于下限启动报警并浇水
{speak=0; //启动报警
delay(150); //延时
speak=1;
}
keyscan(); //按键检测
delay(150); //延时50MS
}
}

五、实验现象

演示视频:

https://www.bilibili.com/video/BV1DYYyz5E39/https://www.bilibili.com/video/BV1DYYyz5E39/

posted on 2025-11-27 17:30  ljbguanli  阅读(0)  评论(0)    收藏  举报