温度采集与显示系统.docx

上传人:b****2 文档编号:3408634 上传时间:2023-05-05 格式:DOCX 页数:17 大小:94.35KB
下载 相关 举报
温度采集与显示系统.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

温度采集与显示系统

温度采集与显示系统的设计

姓名:

学号:

摘要:

由于人体不能精准的感受到环境中的温度,而温度采集系统能够准确、及时、全面地反映环境质量现状及发展趋势,因而本论文设计了基于8051单片

机控制技术的温度采集与显示系统。

该系统通过温度传感器将检测到的温度信号转换成电压信号,该模拟量电压经8路AD0809俞出数字量电压值送给单片机。

根据AD值与温度之间的关系利用查表和插值法得出温度值。

并且这些数值都能实时显示在显示屏上。

、设计内容及意义

温度采集与显示系统在人们的日常生活中的应用越来越广泛,如花卉栽

培温湿度控制、大棚温室控制系统、粮库温室控制系统、现代化居室温湿度控制等等。

随着半导体技术的不断发展,热敏电阻作为一种新型感温元件应用越来越广泛。

他具有体积小、灵敏度高、重量轻、热惯性小、寿命长以及价格便宜等优点。

单片机在测控系统中的作用是对信息进行处理、运算和发出控制

命令等,但所要处理的信息是从外界拾取的,拾取的信号可以分为开关量和模拟量两种。

开关量只需放大、整形和电平转换等处理后,即可直接送入单片机系统。

但输入量如果是模拟量,处理的复杂程度就大大地增加了,由于模拟输入信号一般很微弱,需要进行放大,对于一个测控范围较大的仪器,还要有多级可变放大电路。

另外,在放大有用信号的同时,干扰信号也被同时放大,还要进行必要的滤波处理。

所以要设计出一个真正实用的单片机测控系统,必须先设计好适用的前向通道。

根据被测对象输出信号的类型、大小、数量不同,前向通道的结构类型也各不相同。

本系统基于51单片机设计的温度采集与显示系统是A/D转换器、热敏电阻温度传感器、LCD显示屏及相应接口的综合应用。

、整体设计原理及方案

图2.1整体系统框图

该系统是以NTC型热敏电阻为传感器的信号采集端,将温度信号转换成

电压信号,再经ADC0809进行模数转换,进一步将电压信号转换成单片机可以处理的00H-FFH数字信号,并保证温度与数字信号实时同步,经单片机8051进行数据处理(查表和线性插值法),再进一步转换成与实际温度相符合的数字信号,并在LCD显示屏上实时跟踪显示。

1、显示模块方案选择:

方案一:

数码管显示,采用动态扫描的方式。

优点是编程容易,硬件电路调试简单,显示两部分也比较好控制。

缺点是显示的内容不够丰富,本系统需要实时显示电压AD值,放大后的十进制值以及温度值,实验台上提供的数码管数就达不到实时显示的效果。

方案二:

用LCD液晶显示器显示,优点是功耗低,还能显示更多的字符,有着良好的人机界面,缺点是控制比较复杂。

实验台上提供的是OCMJ2*8的

中文模块系列液晶显示器,内含汉字字库和英文字库,可以实汉字、ASCII

码的同屏显示,能够达到实时显示的效果。

2、AD0809&计

AD080型8位MO型A/D转换器,可实现8路模拟信号的分时采集,片内有8路模拟选通开关,以及相应的通道地址锁存用译码电路,其转换时间为100微秒左右。

图2.2AD0809逻辑图

由图2.2可知,该输出公式为:

允许输出1

OE

DO〜D7

图2.3AD0809时序图

如图2.3,其工作过程是:

1)在IN0-IN7上可分别接上要测量转换的8路模拟量信号。

该系统只需要将热敏电阻温度传感器的电压输出端接IN0。

2)将ADD-ADD(端给上代表选择测量通道的代码。

该系统选通通道0。

3)将ALE由低电平置为高电平,从而将ADDA-ADD(送进的通道代码锁存,经译码后通道0的模拟量送给内部转换单元。

4)给STAR■一个正脉冲。

当上升沿时,所有内部寄存器清零。

下降沿时,开始进行A/D转换;在转换期间,START呆持低电平。

5)EOC为转换结束信号。

在上述的A/D转换期间,可以对EOC1行不断测量,

当EOC为高电平时,表明转换结束。

否则,表明正在进行A/D转换。

6)当A/D转换结束后,将OE设置为1,这时DO-D7的数据便可以读取了。

OE=0,DO-D7输出端为高阻态,OB1,DO—D7端输出转换的数据。

3、数据处理部分----查表和线性插值法

热敏电阻为一种阻值随温度变化的电阻,按其变化关系可分为两类:

正温度系数(简称PTC和负温度系数(简称NTC。

PTC元件的阻值随温度的上升而上升,NTC元件的阻值随温度的上升而下降。

本模块中使用的为NTC

型热敏电阻,在常温(25C)下其阻值为10K,其阻值与温度的关系、阻值与电压的关系、电压值与电压AD值得关系如下表所示:

温度(C)

-30

-20

-10

0

10

20

25

30

40

50

阻值(K)

176.0

96.29

54.85

32.41

19.80

12.47

10.00

8.066

5.342

3.618

电压(V)

0.268

0.4704

0.771

1.178

1.677

2.225

2.5

2.7676

3.2590

3.6716

81720

1113

01002

96722

85234

18914

2980

2750

1110

电压AD

14

24

39

60

86

114

128

142

167

188

 

温度(C)

60

70

80

90

100

110

120

130

140

150

阻值(K)

2.502

1.763

1.265

0.9226

0.6834

0.5158

0.3942

0.3048

0.2382

0.1881

电压(V)

3.9993

4.2506

4.4385

4.5776

4.6801

4.7547

4.8103

4.8521

4.8836

4.9076

6010

1633

2640

6465

5800

4999

7501

0775

7095

8641

电压AD

205

218

228

235

240

244

247

249

250

252

在上面列的表格中,温度与阻值的关系是已知的,电压是根据式3-1得出

的,电压的AQB是根据式2-1得出的。

电压V与电压AD的关系:

AD二(V1000)(2-1)

图2.4电压AD值与温度关系折线图

根据图2.4可用线性插值法在线性区间建立函数关系,随着电压的改变输

出温度值。

三、硬件电路图

图3.1热敏电阻温度采集电路图

图3.1中J1、J2、J3分别对应于模块上的VI、Vzero、Vout插孔,R3对应

与ZERO电位器,用于偏置电压调节;R9对应于GAIN电位器,用于增益调节。

使用时,可先将电路增益调节为1,具体做法如下:

调节ZERO!

位器,使Vzero=0V,用万用表分别测量V1、Vout端电压,调节GAIN电位器,使V仁Vout,此时电路增益为1。

由此可得出电压与电阻之间的关系:

 

V1

VCC・R2

R1R2

5*10_50

R110R110

(3-1)

 

四、程序设计流程图

 

 

 

图4.1主函数程序流程图

 

 

 

图4.2LCD显示流程图

 

图4.3A/D转换流程图

读通道0?

转换结果

f

送结果到显

.示屏

中断返回

图4.3中断服务程序

 

五、问题和不足出现的问题及解决方法:

在数据处理部分,之前是建立电压值V与温度值T的关系来显示温度,发现再怎么细分线性部分,输出的温度误差还是很大,而且显示的温度值一直在跳变。

于是决定找电压值AD与温度之间的关系,这样减小了误差,显示的温度值也几乎不再跳变了。

不足之处:

实验台提供的可调输出电压的范围是0-4.5V,正确来说显示的温度范围应为-35C至90C。

这样选定的线性区间才能较小误差,更趋近与表格提供的数值。

所以,更细分的取线性部分得到的数值会更好。

六、总结

通过此次实习,使我对所学知识进行了实践。

掌握了A/D转换芯片性能及编程方法、单片机系统中扩展LCD^示的方法以及温度传感器和LCD勺工作原理及综合应用。

在数据处理部分学会了线性插值法。

在编写程序时,也发现对一些程序中的函数的处理不够合理,在自己的多次运行下,还是能够实现温度监控的功能。

本次单片机实训让我很有成就感,并对以前所学的单片机知识做了一个小结。

附件

#inelude

#include

#includevintrins.h>

#inelude

#defineucharunsignedchar

#defineulongunsignedlong

#defineuintunsignedint

#definePort_addressXBYTE[0X0CFA0]

sbitREQ=P3A5;//请求信号,高电平有效

sbitBUSY=P3A4;〃忙检测

sbitEOC=P3A2;〃转换结束信号,EOC=1-转换结束,EOC=0-正在转换

voiddelay1ms(uinttime)//延迟子程序1

{

uintii;

uintjj;

for(ii=0;ii

for(jj=0;jj<200;jj++);

}

voiddelay(uinttime)//延迟子程序2

{

uintii;

uintjj;

for(ii=O;ii

for(jj=0;jj<110;jj++);

}

voidwrite_dat(uchardat)//OCMJ2X8写时序操作

{

if(BUSY==0)

{

delay1ms

(1);

P仁dat;

REQ=1;

delay1ms

(1);

REQ=0;

}

}

voidwrite_chinese(ucharx,uchary,ucharh,ucharl)//OCMJ2X8写汉字操作{

write_dat(0xF0);〃写汉字命令

write_dat(x);〃写横坐标(取值范围:

00-07,02-09,00-09)

write_dat(y);//写纵坐标(取值范围:

00-01,00-03,00-04)

write_dat(h);〃写汉字码-高位

write_dat(l);〃写汉字码-低位

}

voidwrite_ASCII_8x16(ucharx,uchary,uchara)//OCMJ2X8写ASCII字符(8x16)操作

{

write_dat(0xF9);〃写ASCII字符(8x16)命令

write_dat(x);//写横坐标(取值范围:

00-0F,04-13,00-13)

write_dat(y);//写纵坐标(取值范围:

00-1F,00-3F,00-4F)

write_dat(a);〃写ASCII码

}

voidwrite_point(ucharx,uchary)//OCMJ2X8画点(1x1)操作

{

write_dat(0xF2);〃写画点命令

write_dat(x);//写横坐标(取值范围:

00-7F,20-9F,00-9F)

write_dat(y);//写纵坐标(取值范围:

00-40,00-40,00-40

}

voidclear_lcd()//OCMJ2X8清屏操作

{

write_dat(0xF4);

voidlcd」nit()

{

REQ=0;

BUSY=1;

clear_lcd();

 

}

电压AD显示函数*******/

 

voiddisplay_digit(uintdate)//分离任意三位数,给LCD送数{

ucharbai,shi,ge;

bai=date/100;

shi=date%100/10;

ge=date%10;

//显示"AD"

//显示":

"

write_ASCII_8x16(0,16,0x41);

write_ASCII_8x16(1,16,0x44);

write_ASCII_8x16(2,16,0x3A);

write_ASCII_8x16(3,16,0x30+bai);

write_ASCII_8x16(4,16,0x30+shi);

write_ASCII_8x16(5,16,0x30+ge);

}

voiddisplay_voltage(uintdate)//分离任意五位数,给LCD送数

ucharwan,qian,bai,shi,ge;

wan=date/10000;

qian=date%10000/1000;

bai=date%10000%1000/100;

shi=date%10000%1000%100/10;

ge=date%10;

〃显示"采集电压"

write_chinese(0,0,18,41);

write_chinese(1,0,28,15);

write_chinese(2,0,21,71);

write_chinese(3,0,49,25);

write_ASCII_8x16(8,0,0x3A);//显示":

"

write_ASCII_8x16(9,0,0x30+wan);

write_ASCII_8x16(10,0,0x2E);//显示小数点

write_ASCII_8x16(11,0,0x30+qian);

//显示电压符号V

write_ASCII_8x16(12,0,0x56);

 

}

温度值显示函数**********/

voiddisplay_temperature(intdate)

//分离任意四位数,方便给

LCD送数

 

{

ucharqian,bai,shi,ge;

write_chinese(3,1,46,34);

//显示"温度"

write_chinese(4,1,22,40);

if(date>=0)

 

{

qian=date/1000;

bai=date%1000/100;

shi=date%1000%100/10;

ge=date%10;

write_ASCII_8x16(10,16,0x2b);write_ASCII_8x16(11,16,0x30+qian);write_ASCII_8x16(12,16,0x30+bai);

write_ASCII_8x16(13,16,0x2E);

〃显示正号+

〃显示小数点

write_ASCII_8x16(14,16,0x30+shi);

write_ASCII_8x16(15,16,0x30+ge);

}

if(date<0)

{

date=-date;

qian=date/1000;

bai=date%1000/100;

shi=date%1000%100/10;

ge=date%10;

write_ASCII_8x16(10,16,0x2d);

write_ASCII_8x16(11,16,0x30+qian);

write_ASCII_8x16(12,16,0x30+bai);

write_ASCII_8x16(13,16,0x2E);

write_ASCII_8x16(14,16,0x30+shi);

〃显示负号-

〃显示小数点

 

write_ASCII_8x16(15,16,0x30+ge);

}

}

/*****中断初始化函数*********/

voidconfig(void)

{

IT0=1;//INT0下降沿中断

EX0=1;//允许INT1中断

EA=1;

}

voidAD」nit(void)

{

Port_address=0x00;//虚写一次,启动通道0

}

ucharAD(void){

ucharad_date;〃保存经AD转换后的数据

ad_date=Port_address;

returnad_date;〃返回数据

}

intdeal_wendu()

{

intv,t;

uintda;

da=AD();

v=da*195;

if(da>=14&&da<=24)

{

t=da*100-4400;

}

if(da>=24&&da<=39)

{

t=67*da-3600;

}

if(da>=39&&da<=60)

{

t=48*da-2800;

}

if(da>=60&&da<=86)

{

t=38*da-2300;

}

if(da>=86&&da<=142)

{

t=36*da-2100;

}

if(da>=142&&da<=167)

{

t=40*da-2700;

}

if(da>=167&&da<=188)

{

t=48*da-4000;

}

if(da>=188&&da<=209)

{

t=da*59-5341;

}

if(da>=209&&da<=248)

{

t=46*da-3341;

}

if(da>=248)

{

t=15000;

}

returnt;

voidmain()

{

intr=0;

uintv,da;

config();//中断初始化

lcd」nit();〃显示屏初始化

AD」nit();〃启动通道0

delay(700);

clear_lcd();

delay(700);

write_chinese(0,0,46,34);//显示"温度采集系统"

write_chinese(1,0,22,40);

write_chinese(2,0,18,41);

write_chinese(3,0,28,15);

write_chinese(4,0,47,21);

write_chinese(5,0,45,19);

delay(700);

clear_lcd();

delay(700);

while

(1)

{

if(r==0)

{

da=AD();

v=da*195;

display_voltage(v);

display_digit(da);display_temperature(deal_wendu());AD」nit();

}

}

}

voidint0(void)interrupt0

{

intr=1;

EXO=0;

EXO=1;

}

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

当前位置:首页 > 表格模板 > 合同协议

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

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