基于单片机压力传感器MPX4115检测-报警系统proteus仿真+源程序

news2024/11/16 0:54:49

一、系统方案
1、本设计采用这51单片机作为主控器。
2、MPX4115采集压力值、DS18B20采集温度值送到液晶1602显示。
3、按键设置报警值。
4、蜂鸣器报警。
在这里插入图片描述

二、硬件设计
原理图如下:
在这里插入图片描述

三、单片机软件设计
1、首先是系统初始化
/*******************************************************************
液晶初始化
*****************************************************************/
void chushihua()
{
delayxms(20); //给液晶一段时间
en=0;
xiemingling(0x38);//设置16
2显示,5
7点阵,8位数据接口
delayxms(20);
xiemingling(0x38);//
delayxms(20);
xiemingling(0x0c);//设置开显示,不显示光标
delayxms(20);
xiemingling(0x06);//写一个字符后地址指针加1
delayxms(20);
xiemingling(0x01);//显示清零,数据指针清零
delayxms(20);
xiemingling(0x80);//指定字符显示的实际地址,,,显示位置的确定方法规定为"80H+地址码x"
delayxms(20);
}
2、液晶显示程序
//毫秒

void delayxms(uint ms) //延时 x ms
{
uint a,j;
for(a=0;a<ms;a++)
for(j=0;j<110;j++);
}

/*******************************************************************
写命令
/
void xiemingling(unsigned char mingling)
{
en=0;
rs=0;
rw=0;
P0=mingling;
delayxms(5);
en=1;
delayxms(10);
en=0;
}
/

写数据
/
void xieshuju(unsigned char shuju)
{
en=0;
rs=1;
rw=0;
P0=shuju;
delayxms(5);
en=1;
delayxms(10);
en=0;
}
3、按键程序
/
/
// 按键扫描
/
*************************************/
void key()
{

if(key5==0)
{
	delay(10);
	if(key5==0)
	{
		while(!key5);
		c1=c;
		temp1=temp;
    
}
}	
	if(key6==0)
{
	delay(10);
	if(key6==0)
	{
		while(!key6);
    mode=!mode;
		chushihua(); //LCD1602初始化
}
}	


if(key1==0)
{
	delay(10);
	if(key1==0)
	{
		while(!key1);
      h++;
		  if(h>1000) h=1000;
}
}	

if(key2==0)
{
	delay(10);
	if(key2==0)
	{
		while(!key2);
		if(h>=1) h--;
	
}
}	
if(key3==0)
{
	delay(10);
	if(key3==0)
	{
		while(!key3);
      l++;
		  if(l>1000) l=1000;
}
}	

if(key4==0)
{
	delay(10);
	if(key4==0)
	{
		while(!key4);
		if(l>=1) l--;
	
}
}	

}

4、核心算法程序
void main(void)
{

chushihua(); //LCD1602初始化

while(1)
{
key();
getdata=Adc0832(0);
check_wendu();
if(0<getdata<243)
{
int vary=getdata;
press=((10.0/23.0)vary)+9.3;
temp=(int)(press
10);

		dispbuf[3]=temp/1000;			     	//取压力值百位
		dispbuf[2]=(temp%1000)/100;		    	//取压力值十位
		dispbuf[1]=((temp%1000)%100)/10;	    	//取压力值个位
		dispbuf[0]=((temp%1000)%100)%10;			//取压力值十分位
		if(temp/10<l){ led1=0;led2=1;beep=0;}
		 else  if(temp/10>h){led1=1;led2=0;beep=0;}
   else  {led1=1;led2=1;beep=1;}
   }
	if(mode==0)
	{
	xiemingling(0x80+0);
	xieshuju('Q');
	
	xieshuju(':');
	xieshuju(dispbuf[3]+0x30);	
	xieshuju(dispbuf[2]+0x30);	
	xieshuju(dispbuf[1]+0x30);
	xieshuju('.');		
	xieshuju(dispbuf[0]+0x30);	
	xieshuju(' ');

	 
	 xieshuju('T');
	xieshuju(':');
	xieshuju(c/1000+0x30);	
	xieshuju(c%1000/100+0x30);	
	xieshuju(c%1000%100/10+0x30);
	xieshuju('.');		
	xieshuju(c%10+0x30);	

	 
	 
	xiemingling(0x80+0x40); 
		xieshuju('H');
	xieshuju(':');
	xieshuju(h/100+0x30);	
	xieshuju(h%100/10+0x30);	
	xieshuju(h%10+0x30);


 xieshuju(' ');
xieshuju('L');
	xieshuju(':');
	xieshuju(l/100+0x30);	
	xieshuju(l%100/10+0x30);	
	xieshuju(l%10+0x30);	
}
else

	{
		xiemingling(0x80+0);
	xieshuju('R');
	
		
		
			xiemingling(0xC0+0);
	xieshuju('Q');
	
	xieshuju(':');
	xieshuju(temp1/1000+0x30);	
	xieshuju(temp1%1000/100+0x30);	
	xieshuju(temp1%1000%100/10+0x30);
	xieshuju('.');		
	xieshuju(temp1%10+0x30);	
	xieshuju(' ');
		
		xiemingling(0xC0+0);
	xieshuju('Q');
	
	xieshuju(':');
	xieshuju(temp1/1000+0x30);	
	xieshuju(temp1%1000/100+0x30);	
	xieshuju(temp1%1000%100/10+0x30);
	xieshuju('.');		
	xieshuju(temp1%10+0x30);	
	xieshuju(' ');

	 
	 xieshuju('T');
	xieshuju(':');
	xieshuju(c1/1000+0x30);	
	xieshuju(c1%1000/100+0x30);	
	xieshuju(c1%1000%100/10+0x30);
	xieshuju('.');		
	xieshuju(c1%10+0x30);	

	 
	 
	
}

}
}
四、 proteus仿真设计
Proteus软件是一款应用比较广泛的工具,它可以在没有硬件平台的基础上通过自身的软件仿真出硬件平台的运行情况,这样就可以通过软件仿真来验证我们设计的方案有没有问题,如果有问题,可以重新选择器件,连接器件,直到达到我们设定的目的,避免我们搭建实物的时候,如果当初选择的方案有问题,我们器件都已经焊接好了,再去卸载下去,再去焊接新的方案的器件,测试,这样会浪费人力和物力,也给开发者带来一定困惑,Proteus仿真软件就很好的解决这个问题,我们在设计之初,就使用该软件进行模拟仿真,测试,选择满足我们设计的最优方案。最后根据测试没问题的仿真图纸,焊接实物,调试,最终完成本设计的作品。

在这里插入图片描述

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

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

相关文章

js中map和forEach的区别

forEach只是遍历数组的元素&#xff1b;map映射遍历&#xff0c;除了遍历数组的元素&#xff0c;还会返回一个新的数组。map本身是映射的意思。 若我们平时开发中只是遍历元素的话&#xff0c;用forEach&#xff0c;千万别用map。 注意&#xff1a; 他们俩若遍历的数组元素是基…

暴雷!Shopee佣金再度上调,入驻还需要保证金?—站斧浏览器

近段时间以来&#xff0c;Shopee陆陆续续地上调了多个站点地佣金费率、交易手续费以及FSS&CCB费率等&#xff0c;不仅如此&#xff0c;Shopee还官宣了入驻需要缴纳保证金&#xff01;甚至已入驻商家未交保证金或会被冻结风险&#xff01;这一些列操作让不少Shopee卖家有些措…

1、分布式锁实现原理与最佳实践(一)

在单体的应用开发场景中涉及并发同步时&#xff0c;大家往往采用Synchronized&#xff08;同步&#xff09;或同一个JVM内Lock机制来解决多线程间的同步问题。而在分布式集群工作的开发场景中&#xff0c;就需要一种更加高级的锁机制来处理跨机器的进程之间的数据同步问题&…

linux 账号管理实例一,stdin,passwd复习

需求 账号名称全名次要用户组是否可登录主机密码 myuser1 1st usermygroup1yespasswordmyuser22st usermygroup1yespasswordmyuser33st user无nopassword 第一&#xff1a;用户&#xff0c;和用户组创建&#xff0c;并分配有效用户组&#xff08;初始用户组是passwd里…

Leetcode—45.跳跃游戏II【中等】

2023每日刷题&#xff08;四十&#xff09; Leetcode—45.跳跃游戏II 贪心法思想 实现代码 #define MAX(a, b) (a > b ? (a) : (b))int jump(int* nums, int numsSize) {int start 0;int end 1;int ans 0;int maxStride 0;while(end < numsSize) {maxStride 0;fo…

Mybatis-Plus 租户使用

Mybatis-Plus 租户使用 文章目录 Mybatis-Plus 租户使用一. 前言1.1 租户存在的意义1.2 租户框架 二. Mybatis-plus 租户2.1 租户处理器2.2 前置准备1. 依赖2. 表及数据准备3. 代码生成器 2.3 使用 三. 深入使用3.1 前言3.2 租户主体设值&#xff0c;取值3.3 部分表全量db操作3…

C++11【上】

欢迎来到Cefler的博客&#x1f601; &#x1f54c;博客主页&#xff1a;那个传说中的man的主页 &#x1f3e0;个人专栏&#xff1a;题目解析 &#x1f30e;推荐文章&#xff1a;题目大解析&#xff08;3&#xff09; 目录 &#x1f449;&#x1f3fb; 统一的列表初始化&#x1…

用AI工具3分钟整理并制作出一本书的思维导图

本期教大家快速用AI工具制作出精美的思维导图。 1.用ChatGPT总结出书本内容 首先打开ChatGPT&#xff0c;在对话框中输入你想要它生成的内容&#xff0c;并且要求他以markdown代码的格式输出&#xff0c;只需要几十秒的时间。整本书的框架思维导图就生成了&#xff0c;你还可以…

大一统模型 Universal Instance Perception as Object Discovery and Retrieval 论文阅读笔记

Universal Instance Perception as Object Discovery and Retrieval 论文阅读笔记 一、Abstract二、引言三、相关工作实例感知通过类别名进行检索通过语言表达式的检索通过指代标注的检索 统一的视觉模型Unified Learning ParadigmsUnified Model Architectures 四、方法4.1 Pr…

【论文解读】Edit-DiffNeRF:使用2D-扩散模型编辑3D-NeRF

来源&#xff1a;投稿 作者&#xff1a;橡皮 编辑&#xff1a;学姐 论文链接&#xff1a;https://arxiv.org/abs/2306.09551 摘要 最近的研究表明&#xff0c;将预训练的扩散模型与神经辐射场&#xff08;NeRF&#xff09;相结合&#xff0c;是一种很有前途的文本到 3D 的生成…

“不得了·放飞杯” 2023年四川省健身健美锦标赛启动在成都隆重召开

“不得了放飞杯” 2023年四川省健身健美锦标赛启动在成都隆重召开 为了更好地推动四川省健身健美运动的普及和发展&#xff0c;结合《四川全民健身实施计划》的现状&#xff0c;适应新时代健身私教服务产业的发展需求&#xff0c;由中国健美协会指导&#xff0c;四川省健美健美…

使用SpringBoot集成FastDFS

使用SpringBoot集成FastDFS 这篇文章我们介绍如何使用 Spring Boot 将文件上传到分布式文件系统 FastDFS 中。 1、FastDFS FastDFS是一个开源的轻量级分布式文件系统&#xff0c;它对文件进行管理&#xff0c;功能包括&#xff1a;文件存储、文件同步、文件访问 &#xff0…

[修订版][工控]SIEMENS S7-200 控制交通红绿灯程序编写与分析

下载地址>https://github.com/MartinxMax/Siemens_S7-200_Traffic_Light 特别鸣谢接线过程实验目的题目要求I/O分配公式公式套用示例 程序分析分割块[不是必要的,自己分析用]左侧梯形图 [B1-B5]B1 [东西绿灯亮25s]B2 B3 B23 [东西绿灯闪烁3s]B4 [东西黄灯亮2s]B5 [东西红灯…

Labelme加载AI(Segment-Anything)模型进行图像标注

labelme是使用python写的基于QT的跨平台图像标注工具&#xff0c;可用来标注分类、检测、分割、关键点等常见的视觉任务&#xff0c;支持VOC格式和COCO等的导出&#xff0c;代码简单易读&#xff0c;是非常利用上手的良心工具。 第一步&#xff1a;   下载源码进行安装。 g…

float和double(浮点型数据)在内存中的储存方法

作者&#xff1a;元清加油 主页&#xff1a;主页 编译环境&#xff1a;visual studio 2022 (x86) 相信大家都知道数据在内存中是以二进制储存的 整数的储存方法是首位是符号位&#xff0c;后面便是数值位 那么浮点数在内存中是怎么储存的呢&#xff1f;我们先来看一个例子&am…

Python----函数的不定长参数--包裹位置参数*args、包裹关键字参数**kwargs

不定长参数 也叫 可变参数。用于不确定调用的时候会传递多少个参数(不传参也可以)的场景。此时&#xff0c;可用包裹(packing)位置参数&#xff0c;或者包裹关键字参数&#xff0c;来进行参数传递&#xff0c;会显得非常方便。 相关链接&#xff1a;Python---函数的参数类型--…

带你用uniapp从零开发一个仿小米商场_1.环境搭建

uniapp 介绍 uni-app 是一个使用 Vue.js 开发所有前端应用的框架&#xff0c;开发者编写一套代码&#xff0c;可发布到iOS、Android、Web&#xff08;响应式&#xff09;、以及各种小程序&#xff08;微信/支付宝/百度/头条/飞书/QQ/快手/钉钉/淘宝&#xff09;、快应用等多个…

【Python篇】详细讲解正则表达式

文章目录 &#x1f339;什么是正则表达式&#x1f354;语法字符类别重复次数组合模式 ✨例子 &#x1f339;什么是正则表达式 正则表达式&#xff08;Regular Expression&#xff09;&#xff0c;简称为正则或正则表达式&#xff0c;是一种用于匹配、查找和操作文本字符串的工…

还在犹豫Harmony要不要学?已有170万人参加官方培训

鸿蒙这么火&#xff0c;要不要学&#xff1f; 两百强的 App厂商&#xff0c;大部分接受了与鸿蒙的合作&#xff0c;硬件也有非常多与鸿蒙合作的厂商。鸿蒙的合作企业基本已经覆盖整个互联网客户的主流需求&#xff1b;所以鸿蒙的崛起不过是早晚的问题。随着鸿蒙4.0的升级&…

Linxu 进程替换

进程替换的背景&#xff1a; 进程的替换我们需要调用execl这个接口,exxecl在3号手册&#xff0c;属于系统接口。 调用系统命令 execl 为了方便理解execl的作用&#xff0c;我们写一个程序&#xff1a; 单进程替换 我们发现运行结果是通过c库里的exec接口把系统命令 "l…