目录

一、项目描述

二、原理图

三、仿真

四、程序

五、资料清单

资料下载地址:基于51的MPX4115压力检测仿真

一、项目描述

基于51的MPX4115压力检测,通过MPX4115压力传感器检测路面上的压力,把检测的值送到ADC0832模数转换器中,结束转换后数据反馈给单片机,单片机读取数据经过软件处理传送到数码管上显示。存储芯片选用的AT24C04,通过I2C协议写入和读取里面的数据。蜂鸣器的控制主要是通过单片机中设定压力报警的阀值,高于阀值再由单片机输出一个信号打开蜂鸣器,数据正常时单片机输出一个信号关闭蜂鸣器停止报警。

二、原理图

三、仿真

 四、程序

void main(void)
{ unsigned int OverCounter = 0; unsigned char ptemp;bit OverFlg = 0;unsigned int temp,ppress = 0;float  press;   while(1){     getdata=Adc0832(0);if(14<getdata<243)                         //当压力值介于15kpa到115kpa之间时,遵循线性变换{               int vary=getdata;                      //y=(115-15)/(243-13)*X+15kpa         press=((10.0/23.0)*vary)+9.3;         //测试时补偿值为9.3                                                      temp=(int)(press*10);              //放大10倍,便于后面的计算if(temp != ppress){ppress = temp;OverFlg = 1;}                                               dispbuf[3]=temp/1000;                  //取压力值百位dispbuf[2]=(temp%1000)/100;                //取压力值十位dispbuf[1]=((temp%1000)%100)/10;           //取压力值个位dispbuf[0]=((temp%1000)%100)%10;           //取压力值十分位display();if (temp > 100){if(OverFlg == 1)   {OverCounter++;WIICByte(W24C04ADD,0x01,(OverCounter/0xff));    //低位WIICByte(W24C04ADD,0x02,(OverCounter%0xff));    //高位OverFlg = 0;    //清除标志}}}      }
}
/************
读ADC0832函数
************///采集并返回
unsigned int Adc0832(unsigned char channel)     //AD转换,返回结果
{unsigned char i=0;unsigned char j;unsigned int dat=0;unsigned char ndat=0;if(channel==0)channel=2;if(channel==1)channel=3;ADDI=1;_nop_();_nop_();ADCS=0;//拉低CS端_nop_();_nop_();ADCLK=1;//拉高CLK端_nop_();_nop_();ADCLK=0;//拉低CLK端,形成下降沿1_nop_();_nop_();ADCLK=1;//拉高CLK端ADDI=channel&0x1;_nop_();_nop_();ADCLK=0;//拉低CLK端,形成下降沿2_nop_();_nop_();ADCLK=1;//拉高CLK端ADDI=(channel>>1)&0x1;_nop_();_nop_();ADCLK=0;//拉低CLK端,形成下降沿3ADDI=1;//控制命令结束 _nop_();_nop_();dat=0;for(i=0;i<8;i++){dat|=ADDO;//收数据ADCLK=1;_nop_();_nop_();ADCLK=0;//形成一次时钟脉冲_nop_();_nop_();dat<<=1;if(i==7)dat|=ADDO;}  for(i=0;i<8;i++){j=0;j=j|ADDO;//收数据ADCLK=1;_nop_();_nop_();ADCLK=0;//形成一次时钟脉冲_nop_();_nop_();j=j<<7;ndat=ndat|j;if(i<7)ndat>>=1;}ADCS=1;//拉低CS端ADCLK=0;//拉低CLK端ADDO=1;//拉高数据端,回到初始状态dat<<=8;dat|=ndat;return(dat);            //return ad k
}//启动I2C总线,即发送起始条件
void StartI2C()
{SDA = 1;                        //发送起始条件数据信号_nop_();SCL = 1;_nop_();                         //起始建立时间大于4.7us_nop_();_nop_();_nop_();_nop_();SDA = 0;                          //发送起始信号_nop_();_nop_();_nop_();_nop_();_nop_();SCL = 0;                         //时钟操作_nop_();_nop_();
}
//结束I2C总线,即发送I2C结束条件
void StopI2C()
{SDA = 0;                          //发送结束条件的数据信号_nop_();                             //发送结束条件的时钟信号SCL = 1;                            //结束条件建立时间大于4us_nop_();_nop_();_nop_();_nop_();_nop_();SDA = 1;                            //发送I2C总线结束命令_nop_();_nop_();_nop_();_nop_();_nop_();
}
//发送一个字节的数据
void    SendByte(unsigned char c)
{unsigned char BitCnt;for(BitCnt = 0;BitCnt < 8;BitCnt++)                   //一个字节{if((c << BitCnt)& 0x80) SDA = 1;               //判断发送位else  SDA = 0;_nop_();SCL = 1;                        //时钟线为高,通知从机开始接收数据_nop_();_nop_();_nop_();_nop_();_nop_();SCL = 0;}_nop_();_nop_();SDA = 1;                                          //释放数据线,准备接受应答位_nop_();_nop_();SCL = 1;_nop_();_nop_();_nop_();if(SDA == 1) bAck =0;else bAck = 1;                                      //判断是否收到应答信号SCL = 0;_nop_();_nop_();
}
//接收一个字节的数据
unsigned char RevByte()
{unsigned char retc;unsigned char BitCnt;retc = 0;SDA = 1;for(BitCnt=0;BitCnt<8;BitCnt++){_nop_();SCL = 0;                                     //置时钟线为低,准备接收_nop_();_nop_();_nop_();_nop_();_nop_();SCL = 1;                                       //置时钟线为高使得数据有效_nop_();_nop_();retc = retc << 1;                              //左移补零if (SDA == 1)retc = retc + 1;                                 //当数据为1则收到的数据+1_nop_();_nop_();}SCL = 0;_nop_();_nop_();return(retc);                                   //返回收到的数据
}unsigned char WIICByte(unsigned char WChipAdd,unsigned char InterAdd,unsigned char WIICData)
{StartI2C();                                              //启动总线SendByte(WChipAdd);                         //发送器件地址以及命令if (bAck==1)                                            //收到应答{SendByte(InterAdd);                                //发送内部子地址if (bAck ==1){SendByte(WIICData);                            //发送数据if(bAck == 1){StopI2C();                    //停止总线return(0xff);}else{return(0x03);}         }else{return(0x02);}}return(0x01);
}
//读取指定器件的内部指定地址一个字节数据
unsigned char RIICByte(unsigned char WChipAdd,unsigned char RChipAdd,unsigned char InterDataAdd)
{unsigned char TempData;    TempData = 0;StartI2C();                                       //启动SendByte(WChipAdd);                         //发送器件地址以及读命令if (bAck==1)                                     //收到应答{SendByte(InterDataAdd);                  //发送内部子地址if (bAck ==1){StartI2C();SendByte(RChipAdd); if(bAck == 1){TempData = RevByte();       //接收数据StopI2C();                  //停止I2C总线return(TempData);           //返回数据}else{return(0x03);}  }else{return(0x02);}}else{return(0x01);}
}

五、资料清单

基于51的MPX4115压力检测仿真相关推荐

  1. 基于51单片机的压力监测仪(MPX4115)(Proteus仿真+程序)

    编号:28 基于51单片机的压力监测仪(MPX4115) 功能描述: 本设计由51单片机最小系统+MPX4115压力传感器+ADC0832模块+液晶1602模块 1.主控制器是AT89C82单片机 2 ...

  2. 基于51单片机的废气检测I2Cproteus仿真

    目录 文章目录 前言 二.设计步骤 1.proteus设计 2.keil5代码编程设计 总结 前言 前段时间高中同学让我帮忙给她做一个数电课设,反正也没事做就随便做了做,现在总结一下,话不多说直接上效 ...

  3. 基于51单片机多路温度检测proteus仿真 ds18b20

    本设计是基于51单片机多路温度检测proteus仿真_ds18b20(仿真+程序+原理图) 仿真图proteus 7.8 程序编译器:keil 4/keil 5 编程语言:C语言 设计编号:C0042 ...

  4. 基于51单片机的火灾检测设计(仿真+程序+原理图+论文报告)

    本设计: 基于51单片机的火灾检测设计(仿真+程序+原理图+论文报告) Proteus仿真版本:proteus7.8 原理图:Altium Designer 程序编译器:keil 4 编程语言:C语言 ...

  5. 基于51单片机甲醛浓度检测系统仿真设计(仿真+程序+原理图+报告+讲解)

    文章目录 资料下载(可点击) 功能说明 仿真图 复位电路 晶振电路 程序 原理图: 设计报告: 器件清单: 基于51单片机甲醛浓度检测系统仿真设计(仿真+程序+原理图+报告+讲解) 原理图:Altiu ...

  6. matlab ds18b20 单片机,基于51单片机ds18b20温度检测————设计报告.doc

    基于51单片机ds18b20温度检测----设计报告 课程名称: 微机原理课程设计 题 目: 温度检测课程设计 摘要 随着时代的进步和发展,单片机技术已经普及到我们生活,工作,科研,各个领域,已经成为 ...

  7. 基于51单片机数字电压表的设计 仿真、程序、原理图(转发)

    摘 要 数字电压表简称DVM,数字电压表基本原理是将输入的模拟电压信号转化为数字信号,再进行输出显示.而A/D转换器的作用是将连续变化的模拟信号量转化为离散的数字信号,器基本结构是由采样保持,量化,编 ...

  8. S0011基于51单片机DS18B20温控风扇仿真设计

    基于51单片机DS18B20温控风扇仿真设计 (仿真+原理图+源码+设计报告) 原理图:Altium Designer 仿真原版本:proteus 7.8 程序编译器:keil 4/keil 5 编程 ...

  9. 基于51单片机的温度检测报警系统

    目录 具体实现功能 设计背景 硬件设计 软件设计 原理图 程序 仿真实现 全部资料 具体实现功能 系统由STC89C51单片机+液晶1602显示+DS18B20温度传感器+按键模块+报警模块构成. 具 ...

最新文章

  1. python里的tplt什么意思 Python的format格式化输出
  2. 1.4 微生物对人类社会的影响
  3. mysql之存储引擎的选择
  4. 1147 Heaps (30 分)【难度: 一般 / 知识点: 堆 模拟 】
  5. linux 中/proc 详解
  6. Spring使用外部属性文件以及常见错误(内附大量图片,很有借鉴意义)
  7. nextgaussian_Java Random nextGaussian()方法与示例
  8. gridview 强制过长数据进行换行
  9. python爬取某人所有微博_Python爬取博客的所有文章并存为带目录的word文档(实例67)
  10. 【重磅】App内可直接打开微信小程序,新增内容安全接口等
  11. 【100Days of 100 line Code】3 day
  12. iOS进阶之TCP代理鉴权过程
  13. Python实现将一个长度为n的列表划分 ,每个子列表中包含m个元素
  14. macbook安装佳能C3020打印机驱动安装错误代码701
  15. 二进制与十进制的转换
  16. python运行出现OSError: [WinError 87] 参数错误。
  17. 电脑的计算机文件打开格式,如何打开zip文件_怎样在电脑上打开zip文件
  18. 03-docker系列-docker容器的基本操作
  19. 14. 微服务综合案例2 zipkin dashboard turbine uaa (2刷)
  20. android测试版微信7.0下载地址,微信7.0.7下载地址-微信 7.0.7安卓内测版下载-西西软件下载...

热门文章

  1. iOS OC语言(二) 类
  2. Spring SpringBoot中使用Mybatis-plusDemo1
  3. 分布式应用:从CAP理论到PACELC理论
  4. VMware报错:VMware Workstation 不可恢复错误: (vmx)
  5. 2020年4月份DB-Engines数据库最新排名
  6. 最大流/最小割算法总结
  7. 吉林大学珠海学院计算机录取分数线,吉林大学珠海学院录取分数线2021是多少分(附历年录取分数线)...
  8. 鸿蒙os适配机vivo型,originos系统适配机型有哪些
  9. 【NLP】1、nlp各类中文文本语料库
  10. IDEA 设置去空格