基于单片机的角度、水位、温度、辅助热源、电机仿真
目录
一、主要功能
二、硬件资源
三、程序编程
四、实现现象
一、主要功能
基于51单片机
采用滑动变阻器连接ADC0832数模转换器模拟角度传感器,水位传感器;
采样DS18B20温度传感器检测温度
通过LCD1602显示,第一行显示温度、水位、角度、指定温度
两个按键负责L298N驱动电机的正反转:
按键按下不动,电机正转,松开停止;第二个按键按下,电机反转,松开停止
辅助热源按键,按下后,对应的LED灯亮起,此时两个按键负责辅热温度的增减,一次调整10度
温度超过阈值,蜂鸣器启动;
手动上水按键可以启动进水阀继电器和通气阀继电器;
自动上水通过水位判断:水位低于阈值后,辅热对应的LED灯关掉,进水阀和通气阀打开;
水位高于阈值后,打开排水阀和通气阀;
然后如果加热到达阈值和水位到达阈值,蜂鸣器报警2秒。
二、硬件资源
基于KEIL5编写C++代码,PROTEUS8.15进行仿真,全部资源在页尾,提供安装包。

三、程序编程
#include "public.h"
#include <intrins.h> //定义头文件
#include <stdio.h> //定义头文件
#include "lcd1602.h"
#include "ds18b20.h"
#include "stdio.h"
#include "i2c.h"
#define uchar unsigned char //定义变量
#define uint unsigned int //定义变量char buff[15];
char buff1[3];unsigned char readTem = 0 ;//定义读时间标志
unsigned char readADCFlag = 0 ; //读取标志
unsigned long time_20ms=0; //定时器计数sbit IN1 = P1^0; //进水阀
sbit IN2 = P1^1;//排水阀
sbit KEY1=P1^2;
sbit KEY2=P1^3;
sbit KEY3=P1^4;
sbit KEY4=P2^2;
sbit IN3=P1^5; //通气阀
sbit IN4=P1^6; //LED灯
sbit beep=P1^7;
sbit key5=P3^3;
sbit key6=P3^4;
sbit out1=P3^5;
sbit out2=P3^6;sbit CS=P3^0; //adc0832引脚
sbit CLK=P3^1; //adc0832引脚
sbit DIO=P3^2; //adc0832引脚void Init_Timer0(void); //函数声明
float Lv=0.0; //光照采集电压
float Lval =0; //光照值
static int sdflag=0;
float u;uchar get_AD_Res() //ADC0832启动读取函数
{uchar i, data1=0, data2=0; //赋值变量CS=0; //CS赋值低电平CLK=0;DIO=1;_nop_(); //赋值变量 并且等待CLK=1;_nop_(); //赋值变量 并且等待CLK=0;DIO=1;_nop_(); //赋值变量 并且等待CLK=1;_nop_(); //赋值变量 并且等待CLK=0;DIO=0;_nop_(); //赋值变量 并且等待CLK=1;_nop_(); //赋值变量 并且等待CLK=0;DIO=1;_nop_(); //赋值变量 并且等待for(i=0; i<8; i++) //循环{CLK=1;_nop_(); //赋值变量 并且等待CLK=0;_nop_(); //赋值变量 并且等待data1=(data1<<1)|(uchar)DIO;//赋值变量 并且等待 }for(i=0; i<8; i++) //循环{data2=data2|(uchar)DIO<<i;//赋值变量 并且等待CLK=1;_nop_(); //赋值变量 并且等待CLK=0;_nop_(); //赋值变量 并且等待}CS=1; //赋值高电平return(data1 == data2)?data1:0; //返回值
}
/*******************************************************************************
* 函 数 名 : main
* 函数功能 : 主函数
* 输 入 : 无
* 输 出 : 无
*******************************************************************************/
void main()
{ u8 i=0;int temp_yz=60;float temp_value;char temp_buf[16];int flag=0;int one=0;unsigned char midval; ds18b20_init();//初始化DS18B20Init_Timer0();lcd1602_init();out1 = 0;out2 = 0;while(1){u=get_AD_Res(); //读取ADC0832值if(u>80){u=80;}else if(u<10){u=10;}temp_value=ds18b20_read_temperture();//保留温度值小数后一位if(KEY2==0){delay_ms(20);{if(KEY2==0){temp_yz=temp_yz+10;while(KEY2==0);}}}if(KEY3==0){delay_ms(20);{if(KEY3==0){temp_yz=temp_yz-10;while(KEY3==0);}}}if(KEY1){IN4=1; //控制LED灯}if(KEY4==0){sdflag++;if(sdflag>1){sdflag = 0;}while(KEY4==0);}if(key5){out1 = 0;}else{out1 = 1;}if(key6){out2 = 0;} else{out2 =1;}if(temp_value<0)//负温度{temp_value=-temp_value;}else if(temp_value>0&&temp_value<100){sprintf(temp_buf,"Temp:%2.1f C %d",temp_value,temp_yz);lcd1602_show_string(0,0,temp_buf);if(KEY1==0){if(temp_value<temp_yz&&Lval>10){flag=0;IN4=0;}else if(Lval<10||temp_value>=temp_yz){IN4=1;}if(temp_value==temp_yz && Lval==80){if(flag==0){beep=0;IN4=1;delay_ms(2000);beep=1;flag=1;}}}}if(readADCFlag == 1) //定时读取adc{midval=ReadADC(3); //转换的结果,在下次,才能读出Lv=(float)midval/255.0*5.0; Lval = Lv*20;delay_ms(10); //延时有助于稳定sprintf(buff,"SW:%3.2fCM %f",Lval,u);//打印电压电流值lcd1602_show_string(0,1,buff);//显示if(Lval<10) //液位小于10{one=0; IN1=IN3=0; //打开进水阀和通气阀}else if(Lval>=80){one = 1;}if(one==1){if(sdflag == 0){IN1=1;IN2=0;IN3=0;}if(sdflag == 1){IN1=0;IN2=0;IN3=0;}}else if(one == 0){if(KEY4==1)IN2=1;}readADCFlag = 0 ;}delay_ms(1); }
}void Init_Timer0(void)
{TMOD |= 0x01; //使用模式1,16位定时器,使用"|"符号可以在使用多个定时器时不受影响 TH0=(65536-20000)/256; //重新赋值 20msTL0=(65536-20000)%256;EA=1; //总中断打开ET0=1; //定时器中断打开TR0=1; //定时器开关打开
}void Timer0_isr(void) interrupt 1
{TH0=(65536-20000)/256; //重新赋值 20msTL0=(65536-20000)%256;time_20ms++;if(time_20ms % 20 == 0) //定时读取adc采集{readADCFlag = 1;}if(time_20ms % 40 == 0) //定时读取温度{readTem = 1; //读取温度 标志}
}
四、实现现象
具体动态效果看B站演示视频:
基于单片机的角度、水位、温度、辅助热源、电机仿真
全部资料(源程序、仿真文件、安装包、演示视频):
百度网盘下载资料
https://pan.baidu.com/s/1CHGuhkCkXYeMc5NHkZt8jg?pwd=an2x
相关文章:
基于单片机的角度、水位、温度、辅助热源、电机仿真
目录 一、主要功能 二、硬件资源 三、程序编程 四、实现现象 一、主要功能 基于51单片机 采用滑动变阻器连接ADC0832数模转换器模拟角度传感器,水位传感器; 采样DS18B20温度传感器检测温度 通过LCD1602显示,第一行显示温度、水位、角度…...
泛函分析精解【1】
文章目录 平方可积函数平方可积函数一、定义二、性质三、公式四、计算五、例子六、例题 平方可积函数在泛函分析一、定义二、性质三、公式四、计算五、例子六、例题 L 2 空间 L_2空间 L2空间定义性质公式计算例子例题 实变函数与罗曼积分实变函数与Riemann积分的联系实变函数…...
大数据毕业设计选题推荐-租房数据分析系统-Hive-Hadoop-Spark
✨作者主页:IT研究室✨ 个人简介:曾从事计算机专业培训教学,擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Python…...
有关shell指令练习2
写一个shell脚本,将以下内容放到脚本中 在家目录下创建目录文件,dir dir下创建dir1和dir2 把当前目录下的所有文件拷贝到dir1中, 把当前目录下的所有脚本文件拷贝到dir2中 把dir2打包并压缩为dir2.tar.xz 再把dir2.tar.xz移动到dir1中 …...
Exception与Error:Java中的异常处理
在Java编程中,异常处理是一个非常重要的概念。它允许程序在遇到错误时优雅地处理,而不是突然崩溃。Java通过Exception和Error类来区分不同类型的错误情况,并通过一套完整的异常处理机制来管理这些错误。 异常(Exceptionÿ…...
HashMap哈希表练习
一、练习要求 使用顺序表和单链表通过C语言实现一个HashMap的数据结构,实现以下功能: 1、PHashMap createHashMap(int size); 2、int putValue(PHashMap map, int key, EleType value); 3、EleType getValue(PHashMap map, int key); 4、printHashMap(PH…...
字节豆包C++一面-面经总结
talk is cheap show me the code lc206:链表反转:给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。 class Solution { public:ListNode* reverseList(ListNode* head) {if(headnullptr||!head->next)return head…...
极狐GitLab 17.4 重点功能解读【三】
GitLab 是一个全球知名的一体化 DevOps 平台,很多人都通过私有化部署 GitLab 来进行源代码托管。极狐GitLab 是 GitLab 在中国的发行版,专门为中国程序员服务。可以一键式部署极狐GitLab。 学习极狐GitLab 的相关资料: 极狐GitLab 官网极狐…...
【unity进阶知识4】封装unity协程工具,避免 GC(垃圾回收)
文章目录 前言封装协程工具类,避免 GC(垃圾回收)使用1.使用默认方式使用协程2.使用自定义的 CoroutineTool 工具类来等待不同的时间 完结 前言 在 Unity 中,使用 yield return null 、yield return new WaitForEndOfFrame()等会导…...
Source insight安装使用笔记
Source insight安装使用笔记 1.安装包下载2.安装记录3. 使用教程1.安装包下载 官网下载 可修改 C:\ProgramData\Source Insight\4.0\si4.lic 将Expiration=”2017-XX-XX”中的2017修改为2030。 本地下载 2.安装记录...
golang学习笔记29——golang 中如何将 GitHub 最新提交的版本设置为 v1.0.0
推荐学习文档 golang应用级os框架,欢迎stargolang应用级os框架使用案例,欢迎star案例:基于golang开发的一款超有个性的旅游计划app经历golang实战大纲golang优秀开发常用开源库汇总想学习更多golang知识,这里有免费的golang学习笔…...
Netty源码解析-锁机制
Netty基本介绍,参考 Netty与网络编程 为了提高性能,Netty对锁也做了大量优化 1、锁优化技术 Netty大量使用了锁优化技术: 1.1 减小锁粒度1.2 减少锁对象的空间占用1.3 提高锁的性能1.4 根据不同业务场景选择合适锁1.5 能不用锁则不用锁 …...
【C/C++】initializer_list
initializer_list 1 构造函数场景 class P { public:P(int a, int b) {std::cout << "int, int" << std::endl;}P(std::initializer_list<int> initList) {std::cout << "initializer_list" << std::endl;} };调用&#x…...
不要再混淆啦!一文带你学会原型链继承、构造函数继承、寄生组合继承、ES6继承
JS继承目录 一、原型链继承2、构造函数继承3、组合继承4、寄生组合继承5、ES6继承 js有几种经典的继承方式。比如 原型链继承、 构造函数继承、 组合继承、 寄生组合继承、 ES6继承。让我们一一分析并实现。同时了解每种方案的优缺点。 其实js的继承本质上是通过原型链机制…...
828华为云征文|华为云Flexus X实例Windows Server 2019安装护卫神防火墙——为企业运维安全发挥重要作用!!!
前言 公司最近需要选购一台华为云Windows服务器部署产品应用,但是考虑到Windows的安全性至关重要。护卫神防火墙无疑是守护Windows系统安全的得力助手。 华为云以其强大的性能和稳定的服务,为众多企业和开发者提供了可靠的云端基础设施。在网络环境日益复…...
最新的iOS 18版本和Android 15版本系统分别升级了哪些功能?
iOS 18 推出了多项激动人心的新功能和改进。以下是一些亮点: 日记应用:一款全新的日记应用,旨在帮助用户记录日常经历、想法和活动,利用设备内置智能功能建议主题,并根据照片、位置和其他数据组织条目。 眼动追踪导航…...
window系统DockerDesktop 部署windows容器
目录 参考文献1、安装Docker Desktop1.1 下载安装包1.2 安装教程1.3 异常解决 2、安装windows容器2.1 先启动DockerDesktop 软件界面2.2 检查docker版本2.3 拉取windows镜像2.4 网盘下载windows镜像 参考文献 windows容器docker中文官网 Docker: windows下跑windows镜像 1、安…...
CSDN文章导出md并迁移至博客园
一、获取所有文章地址 1.进csdn首页,点击自己的头像 2.在个人主页界面,按F12打开控制台,并找到network,找到get-business开头的请求,右键copy他的url 3.选择console,输入一下代码,其中fetch里面的url是你刚…...
计算机组成原理(笔记5原码和补码的乘法以及直接补码阵列乘法器 )
原码一位乘法 手算:过程 令x′|x|0.x1x2…xn-1xn,y′|y|0.y1y2…yn-1yn 同时令乘积P′ |P| x′ y′,有: x′ y′ x′(0.y1y2…yn-1yn) x′ (y12-1y22-2…yn-12-(n-1)yn2-n) 2-1(y1x′2-1(y2x′…2-1(yn-1x′2-1(ynx′0))…))…...
【hot100-java】【括号生成】
R9-回溯篇 枚举填左括号 class Solution {private int n;private char[] path;private final List<String> retnew ArrayList<>();public List<String> generateParenthesis(int n) {this.nn;//所有括号长度都是n*2pathnew char [n*2];dfs(0,0);return ret;…...
突破百度网盘下载限速:BaiduPCS-Go命令行客户端的3大技术突破
突破百度网盘下载限速:BaiduPCS-Go命令行客户端的3大技术突破 【免费下载链接】BaiduPCS-Go iikira/BaiduPCS-Go原版基础上集成了分享链接/秒传链接转存功能 项目地址: https://gitcode.com/GitHub_Trending/ba/BaiduPCS-Go 你是否厌倦了百度网盘的龟速下载&…...
DFRobot URM07超声波传感器UART通信与温度补偿详解
1. DFRobot URM07超声波测距传感器技术深度解析1.1 产品定位与工程价值DFRobot URM07(SKU: SEN0153)是一款面向嵌入式系统设计的工业级超声波距离传感器模块,其核心价值在于将高精度测距、环境温度补偿、超低功耗与UART标准化接口四者深度融合…...
从YOLOv8到RTDETR:如何将训练后的YOLO指标无缝转换为COCO格式
1. 为什么需要YOLO到COCO格式转换 当你用YOLOv8官方代码训练RTDETR模型时,会发现评估结果默认输出的是YOLO格式指标。但学术界和工业界普遍采用COCO评估标准,这就好比在中国用人民币交易,到了欧洲就得换成欧元。我在去年帮某无人机公司做目标…...
终极指南:3步打造你的闲鱼AI客服机器人,实现24小时自动化值守
终极指南:3步打造你的闲鱼AI客服机器人,实现24小时自动化值守 【免费下载链接】XianyuAutoAgent 智能闲鱼客服机器人系统:专为闲鱼平台打造的AI值守解决方案,实现闲鱼平台724小时自动化值守,支持多专家协同决策、智能议…...
融智学三大基本定律——信息世界的根本法则体系:为跨模态知识处理、人机协同等前沿领域提供原理支撑
融智学三大基本定律——信息世界的根本法则体系摘要:融智学三大基本定律构成信息处理的核心理论体系。第一定律(实部序位关系唯一守恒)确立本质信息的稳定性;第二定律(实部序位同义并列对应转换)实现多元表…...
AI 视频生成美女跳舞测评 | 顶级 Prompt实测版(Grok Imagine、Kling AI 3.0、Veo 3.1)
兄弟们,AI 视频生成已经卷到飞起了!之前写小黄文靠grok,现在生成“美女舞蹈”视频也得靠它。 今天上手实测截至今天热门的3款视频生成工具,专攻“美女跳舞”这个高难度场景:动作流畅度、人物一致性、性感画面感、提示…...
MStar-Bin-Tool-Master中文版|晨星芯片BIN固件解包/封包工具(适配机顶盒与智能电视)
温馨提示:文末有联系方式工具简介 MStar-Bin-Tool-Master中文增强版是一款专为晨星(MStar)系列主控芯片设计的固件解析与重构工具,全面支持主流机顶盒与智能液晶电视所用BIN格式刷机包,提供直观易用的图形化操作界面&a…...
CSS 滚动驱动动画:让页面动起来的新维度
CSS 滚动驱动动画:让页面动起来的新维度代码如诗,滚动如歌。让我们用滚动驱动动画的魔法,为用户带来沉浸式的浏览体验。什么是滚动驱动动画? 滚动驱动动画(Scroll-driven Animations)是 CSS 中一项革命性的…...
Laya3D美术进阶:巧用Shader实现APP级游戏效果还原
1. 为什么选择Laya3D的Shader技术? 很多开发者第一次接触Laya3D时,都会有个疑问:为什么不用Unity直接开发?特别是在微信小游戏这个特定场景下,Laya3D的Shader技术到底能带来什么优势?我做了三年Laya小游戏…...
超分辨数据集全景图:从经典基准到实战选型指南
1. 超分辨数据集入门:为什么选择比努力更重要 刚接触超分辨率技术时,我和大多数新手一样,第一反应是赶紧找个开源模型跑起来。结果发现同样的代码,在Set5上PSNR能到40,换成自己的照片却糊成一团。后来才明白࿰…...
