基于51单片机的数字气压计
1.概述
本设计是基于MPX4115的数字气压计,硬件处理电路为大气压传感器模拟信号的采集、转换、处理和显示,并根据相应的软件需求设计控制程序。
2.硬件设计
(1)硬件总体框图
气压计的硬件主要由四部分组成,分别为单片机最小系统、气压信号采集电路、ADC转换电路和数码管电路。
(2)气压信号采集转换电路
a.气压信号采集
数据采集模块由压力传感器MPX4115构成,其类型是硅压力传感器。这个传感器结合了高级的微电机技术,薄膜镀金属。还能为高水准模拟输出信号提供一个均衡压力。在0℃-85℃的温度下误差不超过1.5%,温度补偿是-40℃-125℃。
b.AD转换
ADC0832 为8位分辨率A/D转换芯片,其最高分辨可达256级,可以适应一般的模拟量转换要求。其作用是将气压信号采集的模拟信号转换为8位数字信号,并将结果传给单片机处理。
正常情况下ADC0832 与单片机的接口应为4条数据线,分别是CS、CLK、DO、DI。但由于DO端与DI端在通信时并未同时有效并与单片机的接口是双向的,所以电路设计时可以将DO和DI 并联在一根数据线上使用。当ADC0832未工作时其CS输入端应为高电平,此时芯片禁用,CLK 和DO/DI 的电平可任意。当要进行A/D转换时,须先将CS使能端置于低电平并且保持低电平直到转换完全结束。此时芯片开始转换工作,同时由处理器向芯片时钟输入端CLK 输入时钟脉冲,DO/DI端则使用DI端输入通道功能选择的数据信号。在第1 个时钟脉冲的下沉之前DI端必须是高电平,表示启始信号。
(3)硬件原理图
3.软件设计
(1)ADC0832驱动程序
//ADC0832的引脚
sbit ADCS =P3^1; //ADC0832 chip seclect
sbit ADDI =P3^2; //ADC0832 k in
sbit ADDO =P3^2; //ADC0832 k out
sbit ADCLK =P3^0; //ADC0832 clock signal080307208/*读ADC0832函数*/
//采集并返回
unsigned int Adc0832(unsigned char channel) //AD转换,返回结果
{uchar i=0;uchar j;uint dat=0;uchar 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;ADDO=1;//收数据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
}
(2)数码管显示程序
unsigned char dispbitcode[8]={0xf1,0xf2,0xf4,0xf8,0xef,0xdf,0xbf,0x7f}; //位扫描
unsigned char dispcode[11]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xff}; //共阳数码管字段码
unsigned char dispbuf[4];void display(void) //数码管显示函数
{char k;for(k=0;k<4;k++){P2 = dispbitcode[k];P0 = dispcode[dispbuf[k]];if(k==1) //加上数码管的dp小数点P0&=0x7f;delay_1ms(); }
}
(3)主程序
/*主程序*/
void main(void)
{ while(1){ unsigned int temp;float press; 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.3temp=(int)(press*10); //放大10倍,便于后面的计算dispbuf[3]=temp/1000; //取压力值百位dispbuf[2]=(temp%1000)/100; //取压力值十位dispbuf[1]=((temp%1000)%100)/10; //取压力值个位dispbuf[0]=((temp%1000)%100)%10; //取压力值十分位display();} }
}
源码+仿真+AD原理图 下载:关注公众号,首页回复“气压计”获取资料
基于51单片机的数字气压计相关推荐
- 基于51单片机的数字时钟(万年历)
具体实现功能 系统由STC89C52单片机+DS1302时钟芯片+按键模块+LCD1602显示+电源构成. 具体功能: 1.可以显示年.月.日.时.分.秒.星期.农历: 2.按键可以设置闹钟及报警: ...
- 基于51单片机的自动浇花系统设计/基于51单片机的智能抽奖系统控制设计/基于51单片机的数字时钟与日历显示控制设计 毕业设计
1147基于51单片机的自动浇花系统设计 设计思路:通湿度传感器实时监测湿度,通过LCD显示出实时的湿度采集值,可以通过按键设定目标界限,当达到这个界限值时,浇花系统的电机装置运行. 电路包含:LCD ...
- 收音机c语言程序,基于51单片机的数字FM调频收音机的设计(附接线图,主程序代码)...
基于51单片机的数字FM调频收音机的设计(附接线图,主程序代码)(任务书,开题报告,论文15000字) 摘要 在当今的社会时代中,信息的传输扮演着极其重要的地位.随着科学技术的不断发展与进步,人类的生 ...
- 基于51单片机的数字电子时钟
基于51单片机的数字电子时钟 单片机课程设计要求使用51单片机完成一个电子时钟,要求满足基本功能的同时增添丰富的功能参考了很多大佬的方案代码才勉强完成,工程文件下载点击此链接欢迎交流.如遇下载问题可以 ...
- 基于51单片机的数字电子钟万年历闰年判断闹钟设计
基于51单片机的数字电子钟万年历闰年判断闹钟设计 视频 1 开发环境 2 功能说明介绍 3 仿真图 4 程序 5 原理图 6 视频讲解 7 设计报告 7.1 设计目的 7.2 概述 8 资料清单下载链 ...
- 基于51单片机的数字电子钟
目录 摘 要 1.课程设计任务 1.1课程设计题目 1.2设计的要求 2.设计总体方案 2.1初步设计方案 2.2芯片的选型 2.2.1时钟芯片的选择 2.2.2温度传感器的选择 2.2.3显示电路 ...
- 基于51单片机的数字温度计ds18b20温度测量报警仿真(仿真+源码+全套资料)
资料编号:074 可以设置最低值和最高值,超过上限值LED1亮,超过下限值,LED2亮,LCD1602显示 全套资料齐全:具体请看下方演示视频 74-基于51单片机的数字温度计ds18b20温度测量 ...
- 基于51单片机的数字温度计及电压表设计【仿真设计-127】
项目编号:mcubee-127 设计简介: 项目名: 项目名:基于单片机的数字温度计及电压表设计 单片机:STC89C52 功能: 1.通过DS18B20检测温度,若温度高于设定最大阈值,红灯亮,若温 ...
- sTC8G1K08+通过串口显示内部电压_基于51单片机的数字电流电压表
请点上面蓝色字 即可免费订阅! 1.简述 本文介绍了基于STC89C52单片机为核心,分别以ACS712-05芯片和串联分压电路为为电流检测和电压检测电路,并通过AD0809数模转换芯片对电压 ...
最新文章
- 2018-3-31(Nature-Inspired metaheuristic Algoritjms Second Edition第一章)笔记-优化,寻优,元启发式算法
- python 标签树的遍历
- [openmp]使用嵌套互斥锁锁定变量
- html删除的标签属性,如何从html标签中删除属性?
- ejb构建_如何使用单例EJB,Ehcache和MBean构建和清除参考数据缓存
- Linux C语言编程基本原理与实践
- python深度神经网络量化_「深度神经网络」(deep neural network)具体是怎样工作的?...
- 【Python】Python中的引用和赋值
- 【英语学习】【English L06】U02 Food L2 Salad dressings
- Java内存分配之堆、栈和常量池(转)
- pip国内镜像源矩池云收集(2020年8月)
- 电力通信规约CDT/Modbus/101/103/104/DL/T645应用分析
- 基于SpringBoot校园疫情防控管理系统 校园出入登记系统
- 三星Note3 SM-N9009 国内天翼版本安装谷歌框架
- 中国最顶级的一批程序员,从首富到首负!
- hadoop源码编译(从0到1一步步教你如何编译,适用于任何hadoop版本)
- 海量PDF识别(OCR),实现全文检索服务
- python程序填空快乐的数字_Python习题之快乐的数字
- 怎么逼自己 成为一个上进的人
- 新冠死亡率居高不下,为什么偏偏是意大利?
热门文章
- BUUCTF 打卡2
- 力扣 两数相加 C语言 题解
- 活动二维码怎么制作?如何将活动内容做成二维码图片?
- Unhandled Exception:System.DllNotFoundException: Unable to load DLLquot;**quot;:找不到指定的模块
- check the manual that corresponds to your MySQL server
- Failed to execute goal org.apache.maven.plugins:maven-checkstyle-plugin:2.17:check (checkstyle-vali
- BUAAOJ989 御坂御坂 约瑟夫环
- 禁止“无法验证发行者,确定要运行此软件吗”提示
- CMDN Club每周精选(第4期)
- C语言班级财务管理系统