温度采集与显示系统_第1页
温度采集与显示系统_第2页
温度采集与显示系统_第3页
温度采集与显示系统_第4页
温度采集与显示系统_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、温度采集与显示系统的设计温度采集与显示系统的设计姓名: 学号:摘要:由于人体不能精准的感受到环境中的温度,而温度采集系统能够准确、及时、全面地反映环境质量现状及发展趋势,因而本论文设计了基于8051单片机控制技术的温度采集与显示系统。该系统通过温度传感器将检测到的温度信号转换成电压信号,该模拟量电压经8路AD0809输出数字量电压值送给单片机。根据AD值与温度之间的关系利用查表和插值法得出温度值。并且这些数值都能实时显示在显示屏上。1、 设计内容及意义温度采集与显示系统在人们的日常生活中的应用越来越广泛,如花卉栽培温湿度控制、大棚温室控制系统、粮库温室控制系统、现代化居室温湿度控制等等。随着半

2、导体技术的不断发展,热敏电阻作为一种新型感温元件应用越来越广泛。他具有体积小、灵敏度高、重量轻、热惯性小、寿命长以及价格便宜等优点。单片机在测控系统中的作用是对信息进行处理、运算和发出控制命令等,但所要处理的信息是从外界拾取的,拾取的信号可以分为开关量和模拟量两种。开关量只需放大、整形和电平转换等处理后,即可直接送入单片机系统。但输入量如果是模拟量,处理的复杂程度就大大地增加了,由于模拟输入信号一般很微弱,需要进行放大,对于一个测控范围较大的仪器,还要有多级可变放大电路。另外,在放大有用信号的同时,干扰信号也被同时放大,还要进行必要的滤波处理。所以要设计出一个真正实用的单片机测控系统,必须先设

3、计好适用的前向通道。根据被测对象输出信号的类型、大小、数量不同,前向通道的结构类型也各不相同。本系统基于51单片机设计的温度采集与显示系统是A/D转换器、热敏电阻温度传感器、LCD显示屏及相应接口的综合应用。2、 整体设计原理及方案图2.1 整体系统框图该系统是以NTC型热敏电阻为传感器的信号采集端,将温度信号转换成电压信号,再经ADC0809进行模数转换,进一步将电压信号转换成单片机可以处理的00HFFH数字信号,并保证温度与数字信号实时同步,经单片机8051进行数据处理(查表和线性插值法),再进一步转换成与实际温度相符合的数字信号,并在LCD显示屏上实时跟踪显示。1、显示模块方案选择:方案

4、一:数码管显示,采用动态扫描的方式。优点是编程容易,硬件电路调试简单,显示两部分也比较好控制。缺点是显示的内容不够丰富,本系统需要实时显示电压AD值,放大后的十进制值以及温度值,实验台上提供的数码管数就达不到实时显示的效果。方案二:用LCD液晶显示器显示,优点是功耗低,还能显示更多的字符,有着良好的人机界面,缺点是控制比较复杂。实验台上提供的是OCMJ2*8的中文模块系列液晶显示器,内含汉字字库和英文字库,可以实汉字、ASCII码的同屏显示,能够达到实时显示的效果。2、 AD0809设计AD0809型8位MOS型A/D转换器,可实现8路模拟信号的分时采集,片内有8路模拟选通开关,以及相应的通道

5、地址锁存用译码电路,其转换时间为100微秒左右。图2.2 AD0809逻辑图由图2.2可知,该输出公式为:(实验台上基准电压为5V)图2.3 AD0809时序图如图2.3,其工作过程是:1) 在IN0IN7上可分别接上要测量转换的8路模拟量信号。该系统只需要将热敏电阻温度传感器的电压输出端接IN0。2) 将ADDAADDC端给上代表选择测量通道的代码。该系统选通通道0。3) 将ALE由低电平置为高电平,从而将ADDAADDC送进的通道代码锁存,经译码后通道0的模拟量送给内部转换单元。4) 给START一个正脉冲。当上升沿时,所有内部寄存器清零。下降沿时,开始进行A/D转换;在转换期间,STAR

6、T保持低电平。5) EOC为转换结束信号。在上述的A/D转换期间,可以对EOC进行不断测量,当EOC为高电平时,表明转换结束。否则,表明正在进行A/D转换。 6) 当A/D转换结束后,将OE设置为1,这时D0D7的数据便可以读取了。OE0,D0D7输出端为高阻态,OE1,D0D7端输出转换的数据。3、数据处理部分-查表和线性插值法热敏电阻为一种阻值随温度变化的电阻,按其变化关系可分为两类:正温度系数(简称PTC)和负温度系数(简称NTC)。PTC元件的阻值随温度的上升而上升,NTC元件的阻值随温度的上升而下降。本模块中使用的为NTC型热敏电阻,在常温(25)下其阻值为10K,其阻值与温度的关系

7、、阻值与电压的关系、电压值与电压AD值得关系如下表所示:温度()-30-20-100102025304050阻值(K)176.096.2954.8532.4119.8012.4710.008.0665.3423.618电压(V)0.268817200.470411130.771010021.178967221.677852342.225189142.52.767629803.259027503.67161110电压AD1424396086114128142167188温度()60708090100110120130140150阻值(K)2.5021.7631.2650.92260.68340.

8、51580.39420.30480.23820.1881电压(V)3.999360104.250616334.438526404.577664654.680158004.754749994.810375014.852107754.883670954.90768641电压AD205218228235240244247249250252在上面列的表格中,温度与阻值的关系是已知的,电压是根据式3-1得出的,电压的AD值是根据式2-1得出的。 电压V与电压AD的关系: (2-1)图2.4 电压AD值与温度关系折线图根据图2.4可用线性插值法在线性区间建立函数关系,随着电压的改变输出温度值。3、 硬件电

9、路图图3.1 热敏电阻温度采集电路图图3.1中J1、J2、J3分别对应于模块上的V1、Vzero、Vout插孔,R3对应与 ZERO电位器,用于偏置电压调节;R9对应于GAIN电位器,用于增益调节。 使用时,可先将电路增益调节为1,具体做法如下:调节ZERO电位器,使Vzero=0V,用万用表分别测量V1、Vout端电压,调节GAIN电位器,使V1=Vout,此时电路增益为1。由此可得出电压与电阻之间的关系: (3-1)4、 程序设计流程图图4.1 主函数程序流程图 图4.2 LCD显示流程图图4.3 A/D转换流程图图4.3 中断服务程序5、 问题和不足出现的问题及解决方法:在数据处理部分,

10、之前是建立电压值V与温度值T的关系来显示温度,发现再怎么细分线性部分,输出的温度误差还是很大,而且显示的温度值一直在跳变。于是决定找电压值AD与温度之间的关系,这样减小了误差,显示的温度值也几乎不再跳变了。不足之处:实验台提供的可调输出电压的范围是0-4.5V,正确来说显示的温度范围应为-35至90。这样选定的线性区间才能较小误差,更趋近与表格提供的数值。所以,更细分的取线性部分得到的数值会更好。6、 总结通过此次实习,使我对所学知识进行了实践。掌握了A/D转换芯片性能及编程方法、单片机系统中扩展LCD显示的方法以及温度传感器和LCD的工作原理及综合应用。在数据处理部分学会了线性插值法。在编写

11、程序时,也发现对一些程序中的函数的处理不够合理,在自己的多次运行下,还是能够实现温度监控的功能。本次单片机实训让我很有成就感,并对以前所学的单片机知识做了一个小结。附件#include <reg51.h>#include <stdio.h>#include <intrins.h>#include <absacc.h>#define uchar unsigned char #define ulong unsigned long #define uint unsigned int #define Port_address XBYTE0X0CFA0sb

12、it REQ=P35;/请求信号,高电平有效sbit BUSY=P34;/忙检测sbit EOC=P32;/转换结束信号,EOC=1-转换结束,EOC=0-正在转换 void delay1ms(uint time) /延迟子程序1uint ii;uint jj;for (ii=0;ii<time;ii+)for(jj=0;jj<200;jj+);void delay(uint time) /延迟子程序2uint ii;uint jj;for (ii=0;ii<time;ii+) for(jj=0;jj<110;jj+); void write_dat(uchar dat

13、) /OCMJ2X8写时序操作if(BUSY=0)delay1ms(1);P1=dat;REQ=1;delay1ms(1);REQ=0;void write_chinese(uchar x,uchar y,uchar h,uchar l) /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);/写汉字码-低位 void write_ASCII_8

14、x16(uchar x,uchar y,uchar a) /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码 void write_point(uchar x,uchar y) /OCMJ2X8 画点(1x1)操作write_dat(0xF2);/写画点命令write_dat(x);/写横坐标(取值范围:00-7F,20-9

15、F,00-9F)write_dat(y);/写纵坐标(取值范围:00-40,00-40,00-40) void clear_lcd() /OCMJ2X8 清屏操作write_dat(0xF4);void lcd_init()REQ=0;BUSY=1;clear_lcd(); /*电压AD显示函数*/void display_digit(uint date) /分离任意三位数,给LCD送数uchar bai,shi,ge;bai=date/100;shi=date%100/10;ge=date%10; write_ASCII_8x16(0,16,0x41);/显示"AD"wr

16、ite_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);/*电压V显示函数*/void display_voltage(uint date) /分离任意五位数,给LCD送数uchar wan,qian,bai,shi,ge;wan=date/10000;qian=date%10000/1000;bai=date%10000%

17、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,0

18、x30+qian);write_ASCII_8x16(12,0,0x56);/显示电压符号V/*温度值显示函数*/void display_temperature(int date) /分离任意四位数,方便给LCD送数uchar qian,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

19、,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);/

20、显示负号-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);/*中断初始化函数*/void config(void)IT0=1; /INT0下降沿中断EX0=1; /允许INT1中断EA=1;void AD_init(void)Port_address=0x00;/虚写一次,启动通道0/*AD转换函数*/uchar

21、 AD(void)uchar ad_date; /保存经AD转换后的数据ad_date=Port_address;return ad_date; /返回数据/*温度处理函数*/int deal_wendu()int v,t;uint da;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(d

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论