气腔压力监测系统设计.docx
《气腔压力监测系统设计.docx》由会员分享,可在线阅读,更多相关《气腔压力监测系统设计.docx(17页珍藏版)》请在冰豆网上搜索。
气腔压力监测系统设计
中北大学
课程设计任务书
11/12学年第二学期
学院:
信息与通信工程学院
专业:
自动化
学生姓名:
宋兴怀
学号:
0905054249
课程设计题目:
气腔压力监测系统设计
起迄日期:
2012年6月18日~2012年6月21日
课程设计地点:
中北大学
指导教师:
张艳兵、张秀艳
系主任:
王忠庆
下达任务书日期:
2012年6月8日
课程设计任务书
1.设计目的:
设计一个由单片机控制的气腔压力监测系统,可以对气腔内的压力进行监测,并实时显示。
通过设计,掌握数据采集系统以及显示电路的工作原理和设计步骤,进一步提高综合运用知识的能力。
2.设计内容和要求(包括原始数据、技术参数、条件、设计要求等):
(1)选择传感器,设计采集和显示电路,对气腔的压力进行检测,检测范围0~35MPa,测量精度±2%,显示到小数点后一位。
(2)设计硬件电路,画出PCB图。
(3)编写采集和显示程序。
(4)写出设计说明书。
3.设计工作任务及工作量的要求(包括课程设计计算说明书、图纸、实物样品等):
(1)查阅资料,确定设计方案
(2)选择器件,设计硬件电路,并画出原理图和PCB图
(3)画出流程图,编写控制程序
(4)撰写课程设计说明书
课程设计任务书
4.主要参考文献:
1《单片机原理及接口技术》李朝青著
2《51单片机C程序应用》孙焕铭赵会成王金著
3.《单片机原理与应用技术.》董少明著
4.《.单片机原理及接口技术》徐煜明,韩雁著
5《.单片机课程设计指导》杨居义著
6.《单片机原理及其接口技术》胡汉才著
5.设计成果形式及要求:
课程设计说明书1份
原理图和PCB图各1份
程序清单1份
6.工作计划及进度:
起迄日期
工作内容
12年6月11日~6月12日
6月12日~6月13日
6月13日~6月14日
6月14日~6月15日
6月16日~6月17日
查阅资料,确定设计方案
设计硬件电路
画出流程图,编写控制程序
撰写课程设计说明书
课程设计答辩
系主任审查意见:
签字:
年月日
1.1方案论证
1.1.1腔体压力监测系统的基本工作原理
本方案采用的压力传感器的芯片选用89c51低功耗8位MCU,压力传感器选用MPX4250,显示采用的是LCD1602,设计框图如图1.1所示。
图1.1原理方框图
1.2系统硬件电路设计
1.2.1单片机控制模块
图1.289c51管脚图
1.2.2传感器电路
采样端对数据进行的处理
压力传感器MPX4250件检测的压力送给ADC0832,装换位数字量,再送给单片机89C51。
1.23LED显示
1602LCD分为带背光和不带背光两种,带背光的比不带背光的厚,是否带背光在应用中并无差别,本设计采用的是不带背光的LCD。
管脚如图1.4所示:
图1.41602LCD管脚图
1.1602LCD主要技术参数
显示容量:
16×2个字符
芯片工作电压:
4.5—5.5V
工作电流:
2.0mA(5.0V)
模块最佳工作电压:
5.0V
字符尺寸:
2.95×4.35(W×H)mm
引脚功能说明
1602LCD采用标准的14脚(无背光)或16脚(带背光)接口,各引脚接口说明如表2.2所示:
表2.21602LCD引脚说明
编号
符号
引脚说明
编号
符号
引脚说明
1
VSS
电源地
9
D2
数据
2
VDD
电源正极
10
D3
数据
3
VL
液晶显示偏压
11
D4
数据
4
RS
数据/命令选择
12
D5
数据
5
R/W
读/写选择
13
D6
数据
6
E
使能信号
14
D7
数据
7
D0
数据
15
BLA
背光源正极
8
D1
数据
16
BLK
背光源负极
引脚接口说明:
第1脚:
VSS为地电源。
第2脚:
VDD接5V正电源。
第3脚:
VL为液晶显示器对比度调整端,接正电源时对比度最弱,接地时对比度最高,对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度。
第4脚:
RS为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器。
第5脚:
R/W为读写信号线,高电平时进行读操作,低电平时进行写操作。
当RS和R/W共同为低电平时可以写入指令或者显示地址,当RS为低电平R/W为高电平时可以读忙信号,当RS为高电平R/W为低电平时可以写入数据。
第6脚:
E端为使能端,当E端由高电平跳变成低电平时,液晶模块执行命令。
第7~14脚:
D0~D7为8位双向数据线。
第15脚:
背光源正极。
第16脚:
背光源负极。
1602LCD的指令说明及时序
1602液晶模块内部的控制器共有11条控制指令,如表2.3所示:
表2.31062指令及时序表
序号
指令
RS
R/W
D7
D6
D5
D4
D3
D2
D1
D0
1
清显示
0
0
0
0
0
0
0
0
0
1
2
光标返回
0
0
0
0
0
0
0
0
1
*
3
置输入模式
0
0
0
0
0
0
0
1
I/D
S
4
显示开/关控制
0
0
0
0
0
0
1
D
C
B
5
光标或字符移位
0
0
0
0
0
1
S/C
R/L
*
*
6
置功能
0
0
0
0
1
DL
N
F
*
*
7
置字符发生存贮器地址
0
0
0
1
字符发生存贮器地址
8
置数据存贮器地址
0
0
1
显示数据存贮器地址
9
读忙标志或地址
0
1
BF
计数器地址
10
写数到CGRAM或DDRAM)
1
0
要写的数据内容
11
从CGRAM或DDRAM读数
1
1
读出的数据内容
2.1采样端的软件设计
图2.1采样端软件流程图
图2.2LCD显示流程图
3.PROTEUS仿真
4.转换显示程序
#ifndef__AD0832_H__
#define__AD0832_H__
#defineucharunsignedchar
#defineuintunsignedint
sbitCS=P1^0;
sbitCLK=P1^1;
sbitDI=P1^2;
sbitDO=P1^2;
//ucharresult();
#endif
#ifndef__1602_H__
#define__1602_H__
#defineucharunsignedchar
#defineuintunsignedint
sbitRS=P2^0;
sbitRW=P2^1;
sbitE=P2^2;
voidlcdinit();//初始化
voidwrite_com(ucharcom);//写命令
voidwrite_dat(uchardat);//写入byte
voidshowstr(ucharadd,ucharline,uchar*s);//写字符
voidshowchar(ucharadd,ucharline,ucharp);//写字节
//voidbf_check();//忙标志检测
voiddelayms(uinttime);//内部延时
#endif
#include
#include"1602.h"
voiddelayms(uinttime)
{
uintx,y;
for(x=time;x>0;x--)
for(y=112;y>0;y--);
}
/*voidbf_check(void)//忙标志检测
{
P0=0xff;
RW=0;
RS=1;
E=1;
delayms(10);
while((P0&0x80)==0x80);
E=0;
}*/
voidwrite_com(ucharcom)//写命令
{
delayms(5);
//bf_check();
E=0;
RW=0;
RS=0;
delayms(5);
E=1;
P0=com;
delayms(5);
E=0;
}
voidwrite_dat(uchardat)//写一个byte
{
delayms(5);
//bf_check();
E=0;
RW=0;
RS=1;
delayms(5);
E=1;
P0=dat;
delayms(5);
E=0;
}
voidshowstr(ucharadd,ucharline,uchar*s)//写字符
{
delayms(5);
if(line==0)
write_com(add+0x80);
else
write_com(add+0xc0);
while(*s)
{
write_dat(*s);
s++;
}
}
voidshowchar(ucharadd,ucharline,ucharp)//写字节
{
delayms(5);
if(line==0)
write_com(add+0x80);
else
write_com(add+0xc0);
write_dat(p);
}
voidlcdinit()//初始化
{
delayms(5);
write_com(0x38);
write_com(0x01);
write_com(0x0c);
}
#include"reg52.h"
#include"1602.h"
#include"AD0832.h"
#include"intrins.h"
ucharbuf[3]={0};
ucharresult(ucharcon_word)
{
uchari,dat1=0;
CS=0;
for(i=0;i<4;i++)
{
con_word<<=1;
CLK=1;_nop_();_nop_();
if(con_word&0x80)DI=1;
elseDI=0;
CLK=0;_nop_();_nop_();
}
for(i=0;i<8;i++)
{
dat1<<=1;
CLK=1;_nop_();_nop_();
if(DO==1)
dat1|=0x01;
CLK=0;_nop_();_nop_();
}
CS=1;
delayms(5);
returndat1;
}
voidmain()
{
//uchari;
uintd;
lcdinit();
delayms(5);
while
(1)
{
d=result(0x0d)*500.0/2