单片机气压计课程设计.docx

上传人:b****6 文档编号:15314057 上传时间:2023-07-03 格式:DOCX 页数:17 大小:96.11KB
下载 相关 举报
单片机气压计课程设计.docx_第1页
第1页 / 共17页
单片机气压计课程设计.docx_第2页
第2页 / 共17页
单片机气压计课程设计.docx_第3页
第3页 / 共17页
单片机气压计课程设计.docx_第4页
第4页 / 共17页
单片机气压计课程设计.docx_第5页
第5页 / 共17页
单片机气压计课程设计.docx_第6页
第6页 / 共17页
单片机气压计课程设计.docx_第7页
第7页 / 共17页
单片机气压计课程设计.docx_第8页
第8页 / 共17页
单片机气压计课程设计.docx_第9页
第9页 / 共17页
单片机气压计课程设计.docx_第10页
第10页 / 共17页
单片机气压计课程设计.docx_第11页
第11页 / 共17页
单片机气压计课程设计.docx_第12页
第12页 / 共17页
单片机气压计课程设计.docx_第13页
第13页 / 共17页
单片机气压计课程设计.docx_第14页
第14页 / 共17页
单片机气压计课程设计.docx_第15页
第15页 / 共17页
单片机气压计课程设计.docx_第16页
第16页 / 共17页
单片机气压计课程设计.docx_第17页
第17页 / 共17页
亲,该文档总共17页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

单片机气压计课程设计.docx

《单片机气压计课程设计.docx》由会员分享,可在线阅读,更多相关《单片机气压计课程设计.docx(17页珍藏版)》请在冰点文库上搜索。

单片机气压计课程设计.docx

单片机气压计课程设计

 

第一章功能要求

该课程设计数字气压计的主要功能是显示当前的气压。

该课题的主要技术指标是LM016L上显示的气压是否准确,如果有波动,波动范围是否在可控制范围之内。

 

第二章系统设计

2.1整体设计思想

本设计主要的功能是使整个电路能够完成液晶显示器上能显示出正确的气压读数。

设计系统结构时,需要考虑整体的稳定性、复杂程度、整体造价及调试时要考虑的难易程度等因数。

本设计是基于MPX4250的数字气压计的设计,主要包括对软硬件的设计和调试。

软件部分应用C语言及单片机知识根据系统特点写出需要的单片机程序。

硬件部分主要包括四大块,即大气压的非电信号数据的采集、转换、处理以及显示。

2.2系统总框图

气压计硬件部分由四部分构成,它们分别是:

信息采集模块,数据转换模块,信息处理模块和数据显示模块。

下图为系统总框图。

 

2.1系统总框图

 

第三章主要元器件的功能作用

3.1气压传感器MPX4250

MPX4250是一款绝对压力集成传感器。

它主要用于汽车发动机控制系统中,可测量发动机进气管道的绝对压力,再通过计算机计算出每个汽缸所需要的燃料量,以保证发动机处于最佳工作状态。

在该集成传感器芯片上,除具有压阻式压力传感器外,还有信号放大器及用作温度补偿的薄膜电阻网络。

薄膜网络可用激光技术进行校准。

测压范围20-250kpa。

相应的输出电压为0.2V-4.9V。

精度为±1.5%。

工作温度范围为-40℃--+125℃。

MPX4250如图3.1所示。

图3.1MPX4250

3.2数据转换芯片ADC0832

气压传感器MPX4250输出的是模拟电压,因此,必须进行模拟到数字的转换才能交由单片机处理。

ADC0832是一种8位分辨率、双通道A/D转换芯片。

其最高分辨率可达256级,可以适应一般的模拟量转换要求。

其内部电源输入与参考电压的复用,使得芯片的模拟电压输入在0-5V之间。

芯片转换时间仅为32μS,据有双数据输出可作为数据校验,以减少数据误差,转换速度快且稳定性能强。

独立的芯片使能输入,使多器件挂接和处理器控制变的更加方便。

通过DI数据输入端,可以轻易的实现通道功能的选择。

其特点有:

输入输出电平与TTL/CMOS相兼容;

5V电源供电时输入电压在0-5V之间;

工作频率为250KHZ,转换时间为32μS;

一般功耗仅为15mw。

芯片接口说明:

CS_片选使能,低电平芯片使能;

CH0模拟输入通道0,或作为IN+/-使用;

CH1模拟输入通道1,或作为IN+/-使用;

GND芯片参考0电位;

DI数据信号输入,选择通道控制;

DO数据信号输出,转换数据输出;

CLK芯片时钟输入;

Vcc/REF电源输入及参考电压输入。

ADC0832如图3.2所示:

图3.2LM331引脚

3.3MC78L05电源电路

电源电路选用三端低电流线性稳压芯片MC78L05。

MC78L05具有以下特点:

输入电压范围:

2.6-24V,输出+5V固定电压;

具有内部短路电路限制和热过载保护功能;

其引脚分布如图3.3所示。

图3.3MC78L05电源电路

各引脚功能说明如下:

Vo(1脚):

+5V固定电压输出脚。

GND(2脚):

接地端。

Vi(3脚):

电压输入脚,可输入的电压范围为2.6-24V。

 

第四章模块设计

4.1A/D转换模块

单片机接受传感器的电压值为模拟信号,它要和A/D转换模块的脉冲波发生装置发送过来的标准模拟信号相比较,即通过P1.0和P1.1引脚进行比较,同时开发定时器0,当待测模拟信号超过标准模拟信号时,P3.4引脚信号将会发生变化,此时的定时器0的值通过量纲转化就得到了相应的数字信号。

4.2数据处理模块

数据处理模块主要是对A/D转换模块的数据进行多次采集,并且对采集的数据进行处理,此处理过程主要是对采集的数据进行初值定义以及相应的移位处理,并且把处理好的数据送入相应的缓冲区,为后面的显示模块作好准备。

4.3显示模块

用单片机芯片AT89C52的P0.0/AD0-P0.7/AD7端口与LCD显示屏的D0-D7脚相连接,通过AT89C52的P2.0-P2.2端口来控制选通LCD显示屏的位选端。

在数据的显示模块中,我采用的是1602LCD液晶显示。

以下为各个模块的详细情况:

4.3.1数据采集模块

数据采集模块由气压传感器MPX4250构成,采集的是大气压值。

其中1脚是输出信号端,输出的是与气压值相对应的模拟电压信号。

4.3.2数据转换模块

气压传感器MPX4250输出的是模拟电压,因此,必须进行模拟到数字的转换才能交由单片机处理。

在数据转换模块选用的是ADC0832芯片,它是一款高精度电压频率转换芯片。

如图4.1所示:

图4.1数据转换模块

4.3.3数据处理模块

对于ADC0832输出的频率信号要经过单片机的数据处理,通过频率与气压之间的关系计算出气压值。

本设计应用的是单片机芯片是AT89C52。

AT89C52单片机最为核心的部分是中央处理器CPU,主要工作特性是:

片内程序存储器内含8KB的Flash程序存储器,可擦写寿命为1000次;

片内数据存储器内含256字节的RAM;

具有32根可编程I/O口线;

具有3个可编程定时器;

中断系统是具有8个中断源、6个中断矢量、2个级优先权的中断结构;

串行口是具有一个全双工的可编程串行通信口;

具有一个数据指针DPTR;

低功耗工作模式有空闲模式和掉电模式;

具有可编程的3级程序锁定位;

AT89C52工作电源电压为5(1+0.2)V,且典型值为5V;

AT89C52最高工作频率为24MHz。

AT89C52的引脚如图4.2所示。

图4.2单片机引脚图

本设计中单片机的主要功能是对上一A/D转换模块的数据进行多次采集并出来,其处理过程主要是对采集的数据进行初值定义以及相应的移位处理,把处理好的数据送入相应的缓冲区,为后面的模块做准备。

4.3.4显示模块

本设计使用的显示器件为液晶显示器。

液晶显示器简称LCD显示器,它是利用液晶经过处理后能够改变光线的传输方向的特性实现显示信息的,液晶显示模块具有体积小、功耗低、显示内容丰富超薄轻巧等优点,在单片机应用系统中得到日益广泛的应用。

本设计中选择字符型液晶显示器LCD1602。

LCD1602可以显示两行,每行16个字符,采用+5V电源供电,外围电路配置简单。

LCD1602是一种专门用于显示字母、数字、符号等点阵式LCD。

显示器部分的电路如图4.3所示。

图4.3显示模块原理图

 

第五章单片机调试仿真

根据以上程序流程图,参考了网上的一些程序,自己在Keil软件上运行,编译,得到最后所需的程序。

这里我们采用proteus的系统总体执行效果调试方法,调试单片机的供应电源和复位电路部分。

电源电路、晶振电路和复位电路是整个系统正常工作的基础,应首先保证它们的正常工作。

其仿真图如下图5.1:

图5.1仿真图

 

结论

为期四个星期的单片机课程设计结束啦。

这次课程设计做的是数字气压计,数字气压计现在的产品不是很多,但由于其精度高、读数准确简单等优点,相信在今后会得到广泛的运用。

在这四个星期中,我从刚开始的茫然到最后把作品做出来,其中经历的许多,虽然最终的作品不是很满意,但其基本上还是满足了刚开始的设计,在者,我从中学到了不少。

我能够用几个软件(Keil。

Protel,Protel),还有就是编程,通过自己的努力把作品做出来。

这次课程设计做的是数字气压计,数字气压计现在的产品不是很多,但由于其精度高、读数准确简单等优点,相信在今后会得到广泛的运用。

 

致谢

经过四周时间的不懈努力,本次课程设计已经接近尾声,但是由于知识及经验的匮乏,难免遇到很多困难,如果没有导师的督促指导以及同学们的支持,很难顺利的完成此次课程设计。

从开始选题到论文的顺利完成,都离不开老师、同学、朋友给以的帮助,在这里请接受我的谢意!

首先,在本次毕业设计过程中,从构思、资料收集到最后定稿的各个环节给予细心指引与教导,使我对课程的多方面的知识有了深刻的认识,使我得以最终完成课程设计,在此表示衷心感谢。

其次,还有帮助我的同学们,感谢你们给我的鼓励,感谢你们在我遇到困难时所给的帮助,正是有了你们的帮助和鼓励,此次课程设计才得以顺利的完成。

最后,本次设计得以顺利完成,也要感谢导师组的老师,他们在本文写作阶段给出了许多宝贵意见。

导师们的高深精湛的造诣与严谨求实的治学精神将永远激励着我。

 

参考文献

[1]曹丙霞.Protel99SE原理图与PCB设计电子工业出版社,2000

[2]戴佳.51单片机C语言应用程序设计实例精讲电子工业出版社,2006

[3]徐爱均.单片机高级语言C51应用程序设计电子工业出版社,2004

[4]周兴华.手把手教你学单片机C程序设计北京航空航天大学出版社,2004

[5]严天峰.单片机应用系统设计与仿真调试北京航空航天大学出版社,2001

 

附录程序代码

#include

#include

#include

#defineucharunsignedchar

#defineuintunsignedint

sbitRS=P2^0;

sbitRW=P2^1;

sbitEN=P2^2;

sbitCS=P3^4;

sbitCLK=P3^2;

sbitDIO=P3^3;

ucharyq;

uchardis_yq[5]={""};

uchardis_lcd11[8]={"asdfff"};

//----------------延时--------------------------------

voiddelay(uintx)

{

uchari;

while(x--)for(i=0;i<120;i++);

}

//-------------------------------------------------------

//-------------------------LCD控制------------------------------------------

//读lcd状态

bitlcd_busy_check()

{

bits;

RS=0;RW=1;EN=1;delaynop();s=(bit)(P0&0x80);EN=0;

returns;

}

ucharread_lcd_state()

{

ucharstate;

RS=0;RW=1;EN=1;delay

(1);state=P0;EN=0;delay

(1);

returnstate;

}

//---------------------------------------------------------

//忙等待

voidlcd_busy_wait()

{

while((read_lcd_state()&0x80)==0x80);

delay(5);

}

//--------------------------------------------------------

//向LCD写数据

voidwrite_lcd_data(uchardat)

{

while(lcd_busy_check());

lcd_busy_wait();

RS=1;RW=0;EN=0;P0=dat;EN=1;delaynop();EN=0;

}

//---------------------------------------------

//向LCD写指令

voidwrite_lcd_cmd(ucharcmd)

{

while(lcd_busy_check());

lcd_busy_wait();

RS=0;RW=0;EN=0;_nop_();_nop_();P0=cmd;delaynop();EN=1;delaynop();EN=0;

}

//-----------------------------------------------------------------------------------------------------

//LCD初始化

voidinit_lcd()

{

write_lcd_cmd(0x38);delay

(1);

write_lcd_cmd(0x0C);delay

(1);

write_lcd_cmd(0x06);delay

(1);

write_lcd_cmd(0x01);delay

(1);

}

//-----------------------------------------------

//设置液晶显示位置

voidset_lcd_pos(ucharp)

{

write_lcd_cmd(p|0x80);

}

//---------------------------------------

//在LCD上显示字符串

voiddis_lcd_string(ucharp,uchar*s)//位置,字符指针

{

uchari;

set_lcd_pos(p);

for(i=0;i<16;i++)//16*2

{

write_lcd_data(s[i]);

//delay

(1);

}

}

//-------------------------------------------------------------------

//********************************************************

//--------------------------------------------

//获取AD转换结果

ucharget_AD_result()

{

uchari,dat1=0,dat2=0;

//其实控制位

CS=0;

CLK=0;

DIO=1;_nop_();_nop_();

CLK=1;_nop_();_nop_();

CLK=0;DIO=1;_nop_();_nop_();

CLK=1;_nop_();_nop_();

CLK=0;DIO=0;_nop_();_nop_();

CLK=1;DIO=1;_nop_();_nop_();

CLK=0;DIO=1;_nop_();_nop_();

for(i=0;i<8;i++)

{

CLK=1;_nop_();_nop_();

CLK=0;_nop_();_nop_();

dat1=dat1<<1|DIO;

}

for(i=0;i<8;i++)

{

dat2=dat2|((uchar)(DIO)<

CLK=1;_nop_();_nop_();

CLK=0;_nop_();_nop_();

}

CS=1;

return(dat1==dat2)?

dat1:

0;

}

//--------------------------------------------------------------

voiddis_lcd_yq()

{

yq=(get_AD_result()*5.0/255.0/5.1-0.04)/0.00369-3.45;

dis_yq[0]=yq/1000+'0';

dis_yq[1]=yq%1000/100+'0';

dis_yq[2]=yq%100/10+'0';

dis_yq[3]=yq%10+'0';

dis_lcd_string(0x40,'a');

}

voidmain()

{

//dis_lcd_yq();

delay(100);

dis_lcd_string(0x40,dis_lcd11);

}

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 人文社科 > 法律资料

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2