温度采集与显示系统Word格式.docx

上传人:b****2 文档编号:5937893 上传时间:2023-05-05 格式:DOCX 页数:17 大小:94.35KB
下载 相关 举报
温度采集与显示系统Word格式.docx_第1页
第1页 / 共17页
温度采集与显示系统Word格式.docx_第2页
第2页 / 共17页
温度采集与显示系统Word格式.docx_第3页
第3页 / 共17页
温度采集与显示系统Word格式.docx_第4页
第4页 / 共17页
温度采集与显示系统Word格式.docx_第5页
第5页 / 共17页
温度采集与显示系统Word格式.docx_第6页
第6页 / 共17页
温度采集与显示系统Word格式.docx_第7页
第7页 / 共17页
温度采集与显示系统Word格式.docx_第8页
第8页 / 共17页
温度采集与显示系统Word格式.docx_第9页
第9页 / 共17页
温度采集与显示系统Word格式.docx_第10页
第10页 / 共17页
温度采集与显示系统Word格式.docx_第11页
第11页 / 共17页
温度采集与显示系统Word格式.docx_第12页
第12页 / 共17页
温度采集与显示系统Word格式.docx_第13页
第13页 / 共17页
温度采集与显示系统Word格式.docx_第14页
第14页 / 共17页
温度采集与显示系统Word格式.docx_第15页
第15页 / 共17页
温度采集与显示系统Word格式.docx_第16页
第16页 / 共17页
温度采集与显示系统Word格式.docx_第17页
第17页 / 共17页
亲,该文档总共17页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

温度采集与显示系统Word格式.docx

《温度采集与显示系统Word格式.docx》由会员分享,可在线阅读,更多相关《温度采集与显示系统Word格式.docx(17页珍藏版)》请在冰点文库上搜索。

温度采集与显示系统Word格式.docx

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

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

 

70

80

90

100

110

120

130

140

150

2.502

1.763

1.265

0.9226

0.6834

0.5158

0.3942

0.3048

0.2382

0.1881

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

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<

reg51.h>

#include<

stdio.h>

#includevintrins.h>

absacc.h>

#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<

time;

ii++)

for(jj=0;

jj<

200;

jj++);

}

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

for(ii=O;

for(jj=0;

110;

jj++);

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

if(BUSY==0)

delay1ms

(1);

P仁dat;

REQ=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)命令

//写横坐标(取值范围:

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

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

write_dat(a);

〃写ASCII码

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

write_dat(0xF2);

〃写画点命令

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

00-40,00-40,00-40

voidclear_lcd()//OCMJ2X8清屏操作

write_dat(0xF4);

voidlcd」nit()

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;

〃显示"

采集电压"

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;

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;

write_ASCII_8x16(10,16,0x2d);

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

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

〃显示负号-

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

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;

=24&

=39)

t=67*da-3600;

=39&

=60)

t=48*da-2800;

=60&

=86)

t=38*da-2300;

=86&

=142)

t=36*da-2100;

=142&

=167)

t=40*da-2700;

=167&

=188)

t=48*da-4000;

=188&

=209)

t=da*59-5341;

=209&

=248)

t=46*da-3341;

t=15000;

returnt;

voidmain()

intr=0;

uintv,da;

config();

//中断初始化

lcd」nit();

〃显示屏初始化

AD」nit();

〃启动通道0

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);

while

(1)

if(r==0)

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