【毕业设计】25-基于单片机控制的数字气压计/电子气压报警器的设计(原理图工程+仿真工程+源代码工程+答辩论文)
资料要求
资料包含:毕业设计全套资料(精品)
原理图工程文件
原理图截图
仿真模型工程文件
仿真截图
答辩论文低重复率文档,18930字
英文文献及翻译
visio流程图
详情请私信!
任务书
一、 主要研究内容: 1.数字气压计系统的工作原理,大气压传感器模拟信号的采集、转换、处理和显示。 2.数字气压计系统的单片机编程,用Proteus仿真实现。
二、方法和要求: 1.阅读大量基于单片机数字气压计系统的相关文献资料,掌握其技术的原理和电路的结构,理解程序实现的核心思想; 2.积累相关资料确定论文的主体内容,重点进行研究; 3.每一周进行一次论文进度的汇报,指导老师解答遇到的问题; 4.把握好论文的进度,按照学校的要求完成各个阶段目标。
设计说明书
摘要
第一章主要讲述了基于单片机控制的数字气压计的设计与研究的现状、对于目前气压计的使用场所、近期发展调研分析与研究现状分析。第二章主要讲述了基于单片机控制的数字气压计的设计与研究的系统框图、元器件组成。第三章主要讲述了基于单片机控制的数字气压计的设计与研究的硬件设计,气压计的硬件主要由四部分组成,分别为单片机最小系统、气压信号采集电路、ADC转换电路和数码管电路,最后并对整个电路进行了总结。第四章主要讲述了基于单片机控制的数字气压计的设计与研究的软件设计,编程软件Keil进行了详细的介绍,对整个软件系统的程序流程图进行绘制,通过流程图来编写程序。第五章主要讲述了基于单片机控制的数字气压计的设计与研究的实现,本设计是通过仿真软件Proteus仿真实现,按照电路图连接好电路并将程序烧写入单片机中运行仿真调试电路。
设计框架架构
第二章 基于单片机控制的数字气压计的设计与研究方案分析… 7
第三章 基于单片机控制的数字气压计的设计与研究硬件电路设计… 11
第四章 基于单片机控制的数字气压计的设计与研究的软件设计… 18
第五章 基于单片机控制的数字气压计的设计与研究的仿真… 22
设计说明书及设计文件
#include <reg51.H>
#include "intrins.h"
#define uint unsigned int
#define uchar unsigned char
#define OUTPORT P2
sbit EOC=P3^0;
sbit START=P3^1;
sbit pd =P1^7;
unsigned char dispbitcode[8]={0xf7,0xfb,0xfd,0xfe,0xef,0xdf,0xbf,0x7f}; //位扫描
unsigned char dispcode[11]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xff}; //共阳数码管字段码
unsigned char dispbuf[4];
uint temp;
uchar getdata; //获取ADC转换回来的值
void delay_1ms(void) //12mhz delay 1.01ms
{
unsigned char x,y;
x=3;
while(x--)
{
y=40;
while(y--);
}
}
void delayms(int z)
{
int x,y;
for(x=z;z>0;z--)
{
for(y=114;y>0;y--);
}
}
void display(void) //数码管显示函数
{
char k;
for(k=0;k<4;k++)
{
P1 = dispbitcode[k];
P0 = dispcode[dispbuf[k]];
if(k==1) //加上数码管的dp小数点
P0&=0x7f;
delay_1ms();
}
}
unsigned int Adc0808()//unsigned char channel)
{
unsigned int uiResult;
//if(channel==0);
START=1; //启动AD转换。
START=0;
while(EOC==0); //等待转换结束。
uiResult=OUTPORT; //出入转换结果。
//uiResult=(uiResult*200)/51; //处理运算结果。
return uiResult;
}
void main(void)
{
while(1)
{ unsigned int temp;
float press;
getdata=Adc0808();
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倍,便于后面的计算
dispbuf[3]=temp/1000; //取压力值百位
dispbuf[2]=(temp%1000)/100; //取压力值十位
dispbuf[1]=((temp%1000)%100)/10; //取压力值个位
dispbuf[0]=((temp%1000)%100)%10; //取压力值十分位
display();
}
if(press>100)
{
pd=0;
delayms(90);
display();
delayms(90);
display();
delayms(90);
display();
delayms(90);
display();
delayms(90);
display();
delayms(90);
display();
pd=1;
delayms(90);
display();
delayms(90);
display();
delayms(90);
display();
delayms(90);
display();
delayms(100);
display();
delayms(90);
display();
}
if(press<=100)
{
pd=1;
}
}
}