news 2026/9/21 22:24:34

基于单片机大棚环境控制(温湿度,PH值)系统Proteus仿真(含全部资料)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
基于单片机大棚环境控制(温湿度,PH值)系统Proteus仿真(含全部资料)

全套资料包含:Proteus仿真源文件+keil C语言源程序+AD原理图+流程图+元器件清单+说明书等

资料下载:↓↓↓

通过网盘分享的文件:资料分享
链接:百度网盘 请输入提取码提取码: tgnu


目录

资料下载:

Proteus仿真功能

项目文件资料:

一、Proteus仿真源文件

二、AD原理图文件

二、报告说明书

三、系统流程图

四、Keil c语言程序源代码


项目功能:

运用单片机、DS18B20温度传感器、湿度传感器、PH传感器、继电器和电机、数码管显示模块等器件,设计了温度报警电路、电机驱动电路、电热器驱动电路,具有按键设置温度、湿度、PH阈值上限、下限阈值,超阈值自动调整和报警,实现了大棚中温度、PH值自动控制与报警系统。


项目文件:

一、Proteus仿真源文件

​​

二、AD原理图文件

二、报告说明书

三、系统流程图

​​

四、器件清单

元件型号数量
单片机AT89C511
电容10uf1
电容30pf2
晶振12MHZ1
电阻10k7
按钮4
温度传感器DS18B201
模数芯片ADC08042
电位器1k2
LED红色3
LED绿色3
LED黄色2
电阻100欧6
电阻1k4
三极管NPN4
蜂鸣器有源1
数码管6位共阴1
排阻10k1
串转并芯片74LS5951
锁存器74LS59732
继电器5V3
电容150pf2
电机M4QA0451

五、Keil c语言程序源代码(部分)

#include "reg51.h" #include "74hc595.h" #include"ADC0808.h" #include"Ds18b20.h" #define uchar unsigned char #define uint unsigned int sbit out1=P3^0;//洒水 sbit beep=P2^3;//蜂鸣器 sbit wei=P3^3;//数码管 sbit duan=P3^2; sbit k1=P2^6;//按钮 sbit k2=P3^4; sbit k3=P3^5; //数码管编码 uchar code smgduan[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; uchar time=0,mode=0;//系统变量 uchar ph=0,ph1=5,ph2=9;//ph值 uchar humi=0,humi1=40,humi2=90;//湿度 uchar wendu=0,wendu1=10,wendu2=70;//温度 uchar out595=0x3f;//595数据 //延时 void delay(uint i) { while(i--); } void main()//主函数 { uchar k=0; out1=0; beep=0; //初始化引脚 adc0808_init(); Hc595SendByte(out595); TMOD|=0X01; TH0=0X3C; TL0=0XB0; ET0=1;//打开定时器0中断允许 EA=1;//打开总中断 TR0=1;//打开定时器 while(1) { //按钮功能 if(!k1 &&(k!=1)) //设置 { k=1; if(mode<6) mode++; else mode=0; } if(!k2 && (k!=2))//加 { k=2; switch(mode) { case 1: if(wendu1<wendu2) wendu1++; break; case 2: if(wendu2<99) wendu2++; break; case 3: if(ph1<ph2) ph1++; break; case 4: if(ph2<14) ph2++; break; case 5: if(humi1<humi2) humi1++; break; case 6: if(humi2<99) humi2++; } } if(!k3 && (k!=3))//减 { k=3; switch(mode) { case 1: if(wendu1>0) wendu1--; break; case 2: if(wendu2>wendu1) wendu2--; break; case 3: if(ph1>0) ph1--; break; case 4: if(ph2>ph1) ph2--; break; case 5: if(humi1>0) humi1--; break; case 6: if(humi2>humi1) humi2--; } } if(k1 && k2 && k3) k=0; //显示 if(mode==0)//正常显示 { P0=0xff;//消隐 wei=1; wei=0; P0=smgduan[wendu/10];//温度 duan=1; duan=0; P0=0xfe; wei=1; wei=0; delay(100); P0=0xff;//消隐 wei=1; wei=0; P0=smgduan[wendu%10]+0x80;//温度 duan=1; duan=0; P0=0xfd; wei=1; wei=0; delay(100); P0=0xff;//消隐 wei=1; wei=0; P0=smgduan[ph/10];//PH duan=1; duan=0; P0=0xfb; wei=1; wei=0; delay(100); P0=0xff;//消隐 wei=1; wei=0; P0=smgduan[ph%10]+0x80;//PH duan=1; duan=0; P0=0xf7; wei=1; wei=0; delay(100); P0=0xff;//消隐 wei=1; wei=0; P0=smgduan[humi/10];//湿度 duan=1; duan=0; P0=0xef; wei=1; wei=0; delay(100); P0=0xff;//消隐 wei=1; wei=0; P0=smgduan[humi%10];//湿度 duan=1; duan=0; P0=0xdf; wei=1; wei=0; delay(100); } if(mode==1)//温度下限设置 { P0=0xff;//消隐 wei=1; wei=0; P0=0x31; duan=1; duan=0; P0=0xfe; wei=1; wei=0; delay(100); P0=0xff;//消隐 wei=1; wei=0; P0=0x38; duan=1; duan=0; P0=0xfd; wei=1; wei=0; delay(100); P0=0xff;//消隐 wei=1; wei=0; P0=smgduan[wendu1/10]; duan=1; duan=0; P0=0xf7; wei=1; wei=0; delay(100); P0=0xff;//消隐 wei=1; wei=0; P0=smgduan[wendu1%10]; duan=1; duan=0; P0=0xef; wei=1; wei=0; delay(100); P0=0xff;//消隐 wei=1; wei=0; P0=0x39; duan=1; duan=0; P0=0xdf; wei=1; wei=0; delay(100); } if(mode==2)//温度上限设置 { P0=0xff;//消隐 wei=1; wei=0; P0=0x31; duan=1; duan=0; P0=0xfe; wei=1; wei=0; delay(100); P0=0xff;//消隐 wei=1; wei=0; P0=0x76; duan=1; duan=0; P0=0xfd; wei=1; wei=0; delay(100); P0=0xff;//消隐 wei=1; wei=0; P0=smgduan[wendu2/10]; duan=1; duan=0; P0=0xf7; wei=1; wei=0; delay(100); P0=0xff;//消隐 wei=1; wei=0; P0=smgduan[wendu2%10]; duan=1; duan=0; P0=0xef; wei=1; wei=0; delay(100); P0=0xff;//消隐 wei=1; wei=0; P0=0x39; duan=1; duan=0; P0=0xdf; wei=1; wei=0; delay(100); } if(mode==3)//PH下限设置 { P0=0xff;//消隐 wei=1; wei=0; P0=0x73; duan=1; duan=0; P0=0xfe; wei=1; wei=0; delay(100); P0=0xff;//消隐 wei=1; wei=0; P0=0x76; duan=1; duan=0; P0=0xfd; wei=1; wei=0; delay(100); P0=0xff;//消隐 wei=1; wei=0; P0=0x38; duan=1; duan=0; P0=0xfb; wei=1; wei=0; delay(100); P0=0xff;//消隐 wei=1; wei=0; P0=smgduan[ph1/10]; duan=1; duan=0; P0=0xef; wei=1; wei=0; delay(100); P0=0xff;//消隐 wei=1; wei=0; P0=smgduan[ph1%10]; duan=1; duan=0; P0=0xdf; wei=1; wei=0; delay(100); } if(mode==4)//PH上限设置 { P0=0xff;//消隐 wei=1; wei=0; P0=0x73; duan=1; duan=0; P0=0xfe; wei=1; wei=0; delay(100); P0=0xff;//消隐 wei=1; wei=0; P0=0x76; duan=1; duan=0; P0=0xfd; wei=1; wei=0; delay(100); P0=0xff;//消隐 wei=1; wei=0; P0=0x76; duan=1; duan=0; P0=0xfb; wei=1; wei=0; delay(100); P0=0xff;//消隐 wei=1; wei=0; P0=smgduan[ph2/10]; duan=1; duan=0; P0=0xef; wei=1; wei=0; delay(100); P0=0xff;//消隐 wei=1; wei=0; P0=smgduan[ph2%10]; duan=1; duan=0; P0=0xdf; wei=1; wei=0; delay(100); } if(mode==5)//湿度下限设置 { P0=0xff;//消隐 wei=1; wei=0; P0=0x76; duan=1; duan=0; P0=0xfe; wei=1; wei=0; delay(100); P0=0xff;//消隐 wei=1; wei=0; P0=0x38; duan=1; duan=0; P0=0xfd; wei=1; wei=0; delay(100); P0=0xff;//消隐 wei=1; wei=0; P0=smgduan[humi1/10]; duan=1; duan=0; P0=0xef; wei=1; wei=0; delay(100); P0=0xff;//消隐 wei=1; wei=0; P0=smgduan[humi1%10]; duan=1; duan=0; P0=0xdf; wei=1; wei=0; delay(100); } if(mode==6)//湿度上限设置 { P0=0xff;//消隐 wei=1; wei=0; P0=0x76; duan=1; duan=0; P0=0xfe; wei=1; wei=0; delay(100); P0=0xff;//消隐 wei=1; wei=0; P0=0x76; duan=1; duan=0; P0=0xfd; wei=1; wei=0; delay(100); P0=0xff;//消隐 wei=1; wei=0; P0=smgduan[humi2/10]; duan=1; duan=0; P0=0xef; wei=1; wei=0; delay(100); P0=0xff;//消隐 wei=1; wei=0; P0=smgduan[humi2%10]; duan=1; duan=0; P0=0xdf; wei=1; wei=0; delay(100); } } } //定时器中断 void Timer0() interrupt 1 { uint i; uchar j=0; if(time<10)//0.5s time++; else { time=0; Ds18b20ReadTemp();//测量温度 wendu=ds18b20_temp; i=adc0808_read(1);//测量PH值 ph=i*14/255; i=adc0808_read(0);//测量湿度 humi=i*99/255; i=0; j=0; //蜂鸣器控制 if(wendu>wendu2)//温度高于上限 { i++; out595=out595 & 0xdf; out595=out595 | 0x40; } else { out595=out595 & 0xbf; out595=out595 | 0x20; } if(wendu<wendu1)//温度低于下限 { i++; out595=out595 & 0xef; out595=out595 | 0x80; } else { out595=out595 & 0x7f; out595=out595 | 0x10; } if(humi>humi2) //湿度高于上限 { i++; out595=out595 & 0xfd; } else { out595=out595 | 0x02; } if(humi<humi1) //湿度低于下限 { i++; j++; out595=out595 & 0xfe; } else { out595=out595 | 0x01; } if(ph>ph2) //PH高于上限 { i++; j++; out595=out595 & 0xf7; } else { out595=out595 | 0x08; } if(ph<ph1) //PH低于下限 { j++; out595=out595 & 0xfb; } else { out595=out595 | 0x04; } Hc595SendByte(out595); if(i>0) beep=1; else beep=0; if(j>0)//洒水控制 out1=1; else out1=0; } TH0=0X3C; TL0=0XB0; }

六、全套资料包含

​​

七:项目资源获取

需要完整的资料可以点击下面的名片关注,回复“资料”!

↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/20 22:20:13

Wan2.2-T2V-A14B支持自动字幕嵌入吗?多语种翻译生成测试

Wan2.2-T2V-A14B是否支持自动字幕嵌入&#xff1f;多语种翻译能力实测解析 在短视频出海、跨国品牌营销日益频繁的今天&#xff0c;内容本地化的效率直接决定了市场响应速度。一个中国团队制作的广告片&#xff0c;如果需要投放到欧美、东南亚甚至拉美地区&#xff0c;传统流程…

作者头像 李华
网站建设 2026/9/21 11:05:50

Wan2.2-T2V-A14B与Sora的技术路线差异比较

Wan2.2-T2V-A14B与Sora的技术路线差异比较 在生成式AI的浪潮中&#xff0c;文本到视频&#xff08;Text-to-Video, T2V&#xff09;正从“能出画面”迈向“可商用”的关键转折点。过去一年里&#xff0c;我们见证了两个极具代表性的技术里程碑&#xff1a;阿里巴巴推出的 Wan2.…

作者头像 李华
网站建设 2026/9/20 10:38:58

Java两种代理模式详解

如有错误欢迎指出 是jdk动态代理是从一步步开始写完特性/维度JDK 动态代理CGLIB 动态代理是否需要接口✅ 需要接口❌ 不需要接口&#xff08;可代理普通类&#xff09;代理原理基于反射实现接口方法的代理继承目标类并重写方法&#xff0c;基于 ASM 字节码操作代理类结构生成实…

作者头像 李华
网站建设 2026/9/20 22:48:46

MySQL基础篇——约束和事务

事务与隔离级别比较常考1、MySQL约束约束作用于表中字段&#xff0c;在创建/修改表时使用非空约束&#xff0c;唯一约束&#xff0c;主键约束&#xff0c;默认约束&#xff0c;检查约束&#xff0c;外键约束create table user(id int primary key auto_increment comment 主键,…

作者头像 李华
网站建设 2026/9/21 16:42:10

【VSCode量子编程环境搭建指南】:手把手教你5步配置Qiskit开发环境

第一章&#xff1a;VSCode量子编程环境搭建概述 在当前量子计算快速发展的背景下&#xff0c;开发者需要一个高效、灵活且可扩展的开发环境来编写和调试量子程序。Visual Studio Code&#xff08;VSCode&#xff09;凭借其强大的插件生态和轻量级架构&#xff0c;成为构建量子编…

作者头像 李华
网站建设 2026/9/21 14:07:26

Flutter深度解析:从原理到实战的全栈开发指南

Flutter深度解析&#xff1a;从原理到实战的全栈开发指南引言&#xff1a;跨平台开发的革命性突破在移动开发领域&#xff0c;React Native、UniApp等方案曾占据主导地位&#xff0c;但Flutter凭借其独特的自绘引擎和声明式UI范式&#xff0c;已成为构建高性能跨平台应用的首选…

作者头像 李华