基于单片机的智能浇花系统

目录

一、主要功能

二、硬件资源

三、程序编程

四、实现现象


一、主要功能

基于51单片机,采样DHT11温湿度传感器检测温湿度,通过LCD1602显示
4*4按键矩阵可以设置温度湿度阈值,温度大于阈值则开启水泵,湿度大于阈值则开启风扇
并且通过串口实时打印温湿度信息。

二、硬件资源

基于KEIL5编写C++代码,PROTEUS8.15进行仿真,全部资源在页尾,提供安装包。

三、程序编程

#include <REGX52.H>
#include<intrins.h>
#include<stdio.h>
#include "Delay.h"
#include "LCD1602.h"
#include "MatrixKey.h"
#define uchar unsigned char
#define uint unsigned  int
sbit Temp_data=P2^6;  //DHT11
sbit beep = P3^4;
sbit out1 = P2^7;
sbit out2 = P3^7;
sbit out3 = P3^2;
sbit out4 = P3^3;unsigned char KeyNum;
unsigned char rec_dat_lcd0[6];
unsigned char rec_dat_lcd1[6];
unsigned char rec_dat_lcd2[6];
unsigned char rec_dat_lcd3[6];
unsigned int rec_dat[4];
unsigned int password,count; //
static int wdyz=50,sdyz=800;//温度、湿度、气压
static uchar wd,sd;
static int moshi=0;void ajpd();
void DHT11_delay_us(unsigned char n);
void DHT11_delay_ms(unsigned int z);
void DHT11_start();
unsigned char DHT11_rec_byte();
void DHT11_receive();
void beep_warning();//延时ms
void DHT11_delay_ms(unsigned int z)
{unsigned int i,j;for(i=z; i>0; i--)for(j=110; j>0; j--);
}//延时us   --2*n+5us
void DHT11_delay_us(unsigned char n)
{while(--n);
}//DHT11起始信号
void DHT11_start()
{Temp_data=1;DHT11_delay_us(10);Temp_data=0;DHT11_delay_ms(50);//这个延时不能过短,18ms以上,实际在仿真当中要想读到数据延时要在延时参数要在40以上才能出数据Temp_data=1;DHT11_delay_us(30);//这个延时不能过短}//接收一个字节unsigned char DHT11_rec_byte()
{unsigned char i,dat=0;for(i=0; i<8; i++){while(!Temp_data);DHT11_delay_us(8);dat <<=1;if(Temp_data==1){dat +=1;}while(Temp_data);}return dat;
}//接收温湿度数据
void DHT11_receive()
{unsigned int R_H,R_L,T_H,T_L;unsigned char RH,RL,TH,TL,revise;DHT11_start();Temp_data=1;if(Temp_data==0){while(Temp_data==0);   //等待拉高DHT11_delay_us(40);  //拉高后延时80usR_H=DHT11_rec_byte();    //接收湿度高八位R_L=DHT11_rec_byte();    //接收湿度低八位T_H=DHT11_rec_byte();    //接收温度高八位T_L=DHT11_rec_byte();    //接收温度低八位revise=DHT11_rec_byte(); //接收校正位DHT11_delay_us(25);    //结束if((R_H+R_L+T_H+T_L)==revise)      //校正{RH=R_H;RL=R_L;TH=T_H;TL=T_L;}/*数据处理,方便显示*/rec_dat[0]=RH;rec_dat[1]=RL;rec_dat[2]=TH;rec_dat[3]=TL;}}void dht11()
{DHT11_delay_ms(150);DHT11_receive();sprintf(rec_dat_lcd0,"%d",rec_dat[0]);sprintf(rec_dat_lcd1,"%d",rec_dat[1]);sprintf(rec_dat_lcd2,"%d",rec_dat[2]);sprintf(rec_dat_lcd3,"%d",rec_dat[3]);DHT11_delay_ms(100);
//	     //湿度LCD_ShowString(2,5,rec_dat_lcd0);  //湿度低位LCD_ShowString(2,4,rec_dat_lcd1);   //湿度高位//温度LCD_ShowString(2,1,rec_dat_lcd2); //温度低位LCD_ShowString(2,0,rec_dat_lcd3); //温度高位wd = rec_dat[3]*10 + rec_dat[2];sd = rec_dat[1]*10 + rec_dat[0];}void beep_warning()//蜂鸣器警报并且电机转动
{if(wd>wdyz){out1= 1;out2= 0;beep = 1;printf("温度异常,请维修人员来查看\r\n");	}	else {out1= 0;out2= 0;}		if(sd > sdyz){beep = 1;out3 = 1;out4= 0;printf("湿度异常,请维修人员来查看\r\n");	}		else{out3 = 0;out4 = 0;}	if(wd>wdyz || sd>sdyz ){			beep = 1;}else if(wd < wdyz && sd <sdyz){beep = 0;}
}
//串口初始化
void init_com(void)
{TMOD =0x20;		   //设T0为方式1,GATE=1;SCON=0x50;        //开启串口TH1=0xFD;          //波特率是9600bpsTL1=0xFD;TR1=1;			   //开启定时器TI=1;EA=1;
}void main()					  //主函数
{	init_com();LCD_Init();         //显示屏初始化beep = 0;do{dht11(); //温湿度获取ajpd();  //按键判断beep_warning();    //状态判断}  while(1);
}void ajpd()//按键判断
{KeyNum = MatrixKey();//键盘输入的值进行传递if(KeyNum){if(moshi == 0){if(KeyNum <= 10) //把按键的范围定义在0~9{			if(count < 3){password*=10; //出水量左移一位password += KeyNum % 10; //获取一位出水量count++;    //计次++,对应出水量位数}LCD_ShowNum(1,1,password,3); //LCD更新显示}	//确认键if(KeyNum == 11) //把11表示确认,对阈值进行确认{LCD_ShowNum(1,1,password,3); //LCD更新显示wdyz = password; //温度阈值}		//取消键if(KeyNum == 12){password = 0;count = 0;LCD_ShowNum(1,1,password,3); //LCD更新显示}if(KeyNum == 13)  //q切换{moshi++;password = 0;count = 0;if(moshi>1){moshi = 0;}}} else if(moshi == 1){if(KeyNum <= 10) //把按键的范围定义在0~9{			if(count < 3){password*=10; //出水量左移一位password += KeyNum % 10; //获取一位出水量count++;    //计次++,对应出水量位数}LCD_ShowNum(1,5,password,3); //LCD更新显示}	//确认键if(KeyNum == 11) //把11表示确认,对阈值进行确认{LCD_ShowNum(1,5,password,3); //LCD更新显示sdyz = password;}		//取消键if(KeyNum == 12){password = 0;count = 0;LCD_ShowNum(1,5,password,3); //LCD更新显示}if(KeyNum == 13)  //q切换{moshi++;password = 0;count = 0;if(moshi>1){moshi = 0;}}}}		}

四、实现现象

具体动态效果看B站演示视频:

基于单片机的智能浇花系统

全部资料(源程序、仿真文件、安装包、演示视频、串口演示视频):

百度网盘资料下载icon-default.png?t=O83Ahttps://pan.baidu.com/s/1Oenm7MTkS9fApPHFD9tyqw?pwd=dvcy

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/881331.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Golang 服务器虚拟化应用案例

推荐学习文档 golang应用级os框架&#xff0c;欢迎stargolang应用级os框架使用案例&#xff0c;欢迎star案例&#xff1a;基于golang开发的一款超有个性的旅游计划app经历golang实战大纲golang优秀开发常用开源库汇总想学习更多golang知识&#xff0c;这里有免费的golang学习笔…

关于PPT生成的开源大模型总结

目前需要开源的PPT生成模型&#xff0c;在这里对github上的一些模型进行筛选 搜索关键词&#xff1a;ppt generate&#xff08;more starts&#xff09; williamfzc/chat-gpt-ppt: 支持直接生成PPT支持中英文需要调用ChatGPT&#xff08;Add your token (official openai api k…

机器学习框架

机器学习框架 机器学习框架是用于开发和部署机器学习模型的软件工具。它们提供了一组API和工具&#xff0c;帮助开发人员在各种计算设备上构建、训练和部署机器学习模型。以下是几个常见的机器学习框架&#xff1a; 1.TensorFlow&#xff1a; TensorFlow是一个开源的人工智能…

【Matlab】Matlab 导入数据.csv或者.xlsx文件,然后使用这些数据来绘制图表

Matlab 导入数据.csv或者.xlsx文件&#xff0c;然后使用这些数据来绘制图表 初始数据 filename C:\Users\jia\Desktop\yadian\data\1Hz 2024_09_12 17_10_06.csv; 代码&#xff1a; clc;clear close all; % 读取Excel文件 filename C:\Users\jia\Desktop\yadian\data\1Hz …

智能手表(Smart Watch)项目

文章目录 前言一、智能手表&#xff08;Smart Watch&#xff09;简介二、系统组成三、软件框架四、IAP_F411 App4.1 MDK工程结构4.2 设计思路 五、Smart Watch App5.1 MDK工程结构5.2 片上外设5.3 板载驱动BSP5.4 硬件访问机制-HWDataAccess5.4.1 LVGL仿真和MDK工程的互相移植5…

注意,学会解决路由问题!(未完)

文章目录 Abstract1 Introduction2 相关工作3 注意力模型3.1 编码器3.2 解码器Abstract 最近提出的为组合优化问题学习启发式方法的想法很有前景,因为它可以节省昂贵的开发成本。然而,要将这一想法推向实际应用,我们需要更好的模型和更好的训练方法。我们在这两个方向都做出…

FreeRTOS-事件标志组

FreeRTOS-事件标志组 一、事件标志组简介二、事件标志组API函数三、事件标志组实验 一、事件标志组简介 事件标志位&#xff1a;用一个位来表示事件是否发生&#xff0c;裸机中的中断标志位等等事件标志组&#xff1a;是一组事件标志位的集合&#xff0c;简单认为就是一个整数…

C++ 秋招查缺补漏

结构体和类的区别 C 中 class 和 struct 区别 | 编程指北 (csguide.cn) C 中为了兼容 C 语言而保留了 C 语言的 struct 关键字&#xff0c;并且加以扩充了含义。 在 C 语言中&#xff0c;struct 只能包含成员变量&#xff0c;不能包含成员函数。 而在 C 中&#xff0c;str…

Java_Se 容器2(Set 接口)

Set接口继承自Collection接口&#xff0c;Set接口中没有新增方法&#xff0c;它和Collection接口保持完全一致。我们在前面学习List接口的使用方式&#xff0c;在Set中仍然适用。因此&#xff0c;学习Set的使用将没有任何难度。Set接口特点Set特点&#xff1a;无序、不可重复。…

国庆作业

day1 1.开发环境 Linux系统GCCFDBmakefilesqlite3 2.功能描述 项目功能: 服务器&#xff1a;处理客户端的请求&#xff0c;并将数据存入数据库中&#xff0c;客户端请求的数据从数据库进行获取&#xff0c;服务器转发给客户端。 用户客户端&#xff1a;实现账号的注册、登…

C++:string (用法篇)

文章目录 前言一、string 是什么&#xff1f;二、C语法补充1. auto2. 范围for 三、string类对象的常见构造1. Construct string object2. String destructor3. operator 四、string迭代器相关1. begin与end1&#xff09;begin2&#xff09;end3&#xff09;使用 2. rbegin 与 r…

计算机毕业设计 玩具租赁系统的设计与实现 Java实战项目 附源码+文档+视频讲解

博主介绍&#xff1a;✌从事软件开发10年之余&#xff0c;专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精…

yum 源配置

在/etc/yum.repo.d目录下 格式&#xff1a; [repository_name] nameRepository description baseurlhttp://repository_url enabled1 gpgcheck0 gpgkeyfile:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7 其中&#xff1a; [repository_name]&#xff1a;源的标识名称&#xff0c;…

数据处理方式,线程与进程,多任务,Spark与MR的区别

目录 数据处理的方式有哪些 单机数据处理 集群数据处理 分布式计算框架 MapReduce ApplicationMaster Spark分布式计算类别 进程与线程的区别 进程是计算时分配资源的最小单位 线程是执行计算任务的最小任务 多进程的执行效率没有多线程的执行效率高 多任务 Spark和M…

代码随想录算法训练营Day18

669. 修剪二叉搜索树 力扣题目链接&#xff1a;. - 力扣&#xff08;LeetCode&#xff09; class Solution {public TreeNode trimBST(TreeNode root, int low, int high) {if(rootnull){return null;}if(root.val<low){return trimBST(root.right,low,high);}if(root.val…

厂商资源分享网站

新华三&#xff08;H3C&#xff09;是一家中国知名的网络设备供应商&#xff0c;提供网络设备、网络解决方案和云计算服务。公司成立于2003年&#xff0c;是华为公司和惠普公司合资的企业&#xff0c;总部位于中国深圳。 华为&#xff08;Huawei&#xff09;是一家全球知名的电…

一个技巧实现在SharePoint中使用Copilot

前几天写了在onedrive中使用copilot对单个文件进行提问汇总分析与对多个文件进行比较汇总提问等&#xff1a; Copilot重磅更新&#xff01;OneDrive全新功能炸裂 很多小伙伴表示特别受用。 于是他们在纷纷尝试了一段时间后&#xff0c;开始把目光转向SharePoint和teams文件&a…

前端的全栈混合之路Meteor篇:分布式数据协议DDP深度剖析

本文属于进阶篇&#xff0c;并不是太适合新人阅读&#xff0c;但纯粹的学习还是可以的&#xff0c;因为后续会实现很多个ddp的版本用于web端、nodejs端、安卓端和ios端&#xff0c;提前预习和复习下。ddp协议是一个C/S架构的协议&#xff0c;但是客户端也同时可以是服务端。 什…

红日靶场1学习笔记

一、准备工作 1、靶场搭建 靶场地址 靶场描述 靶场拓扑图 其他相关靶场搭建详情见靶场地址相关说明 2、靶场相关主机信息 后续打靶场的过程中&#xff0c;如果不是短时间内完成&#xff0c;可能ip会有变化 主机ip密码角色win7192.168.122.131hongrisec2019!边界服务器win…

CAN(Controller Area Network)总线的仲裁机制

CAN&#xff08;Controller Area Network&#xff09;总线的仲裁机制是其核心特性之一&#xff0c;它确保了在多节点环境中数据能够高效、公正地传输。以下是对CAN仲裁机制的详细解释和介绍&#xff1a; 一、仲裁机制概述 在CAN总线网络中&#xff0c;各个节点地位平等&#…