温度检测系统完整版
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
温度检测系统设计
本设计测量的温度为环境温度,测量范围从0℃—50℃。 检测系统主要由硬件系统和软件系统两大部分组成。
硬件系统包括:集成温度传感器LM35,数据采集和转换模块(A/D 转换器ADC0809),主控器(AT89S51),点阵字符型液晶显示模块(RT1602C )。
软件系统包括:前置的各芯片管脚定义、函数声明、全局变量声明、主函数和实现各种功能的子程序:A/D 驱动程序、LCD 初始化程序、LCD 判忙程序、LCD 写数据命令程序、LCD 显示程序、延时程序。
系统设计原理:温度传感器输出0~1V 的线形电压信号,为了提高测量精度将温度传感器的输出电压通过调理电路输出0~3V 的线形电压信号,2路模拟信号通过A/D 转换器转换成数字信号然后由A/D 转换器把数字信号输入到单片机,单片机进行温度补偿后送入液晶显示模块中显示。
系统的硬件设计
系统的硬件主要由温湿度检测模块、ADC0809的A/D 转换模块、主控制模块、LCD 显示模块等组成。系统原理图如图所示。系统硬件设计电路图见附录A 。
温度传感器
温度传感器采用菲利浦公司生产的精密集成电路温度传感器LM35,功耗低,精度高,价格便宜。
LM35具有很高的工作精度和较宽的线性工作范围,他的输出电压与摄氏温度成线性比例,且无需外部校准或微调,可以提供±1/4℃的常用的室温精度。LM35的输出电压与摄氏温度的线形关系用公式表示,0℃时输出为0 V,每升高1℃,输出电压增加10 mV。
•工作电压:直流4~30V;
•工作电流:小于133μA
•输出电压:+6V~-1.0V
•输出阻抗:1mA负载时0.1Ω;
•精度:0.5℃精度(在+25℃时);
•漏泄电流:小于60μA;
•比例因数:线性+10.0mV/℃;
•非线性值:±1/4℃;
•校准方式:直接用摄氏温度校准;
•封装:密封TO-46晶体管封装或塑料TO-92晶体管封装;
•使用温度范围:-55~+150℃额定范围。
温度传感器信号调理电路
A/D转换
数据采集和转换通过A/D转换器实现,本次设计采用8位A/D转换器ADC0809来完成转换任务。
转换电路设计
根据ADC0809的特点和管脚特性设计其外围电路接口如图所示。
ADC0809与单片机接口电路
其中26管脚接收温度模拟电压信号。CLOCK为工作时钟,时钟信号由外
界提供,频率为1MHZ,由10管脚外接二进制计数器CD14024二分频得到。为了提高A/D转换精度,A/D转换器的基准电压调整为3V,由图2所示电路完成。
图1时钟信号分频电路
图2电压调制电路
液晶显示设计
字符型液晶显示模块是一种专门用于显示字母、数字、符号等点阵式LCD,其显示美观、使用方便,故本设计采用点阵字符型液晶显示模块RT1602C。
液晶模块RT1602C简介
液晶模块RT1602C是一种用5×7点阵图形来显示字符的液晶显示器,根据显示的容量可分为1行16个字、2行16个字。
本系统的液晶显示模块与单片机接口电路如图3所示。
图3 液晶显示模块与单片机接口电路
A/D转换的软件设计
A/D转换由集成电路ADC0809完成,地址线(23~25脚)决定对哪一路模拟输入作A/D转换。ALE锁存地址控制,当输入为高电平时,对地址信号进行锁存。START为测试控制,当输入为一个2µs宽电平脉冲时,就开始A/D转换。EOC为A/D转换结束标志,当A/D转换结束时,EOC高电平。OE为A/D
转换数据输出允许控制,当OE为高电平时,A/D转换数据从P0端口输出。A/D 转换子函数R eadADC0809()的流程图如图4所示。
图4 A/D转换程序流程图
3.3 液晶显示软件设计
显示程序由各程序模块组成,LCD初始化程序、LCD判忙程序、LCD写数据命令程序、LCD显示程序,在主函数中我们只需要调用这些程序模块即可,这样既简单又实用。
LCD判忙程序:
void LcdBusy(void)
{
do
{
DataPort=0xff;
LCD_RS=0;
LCD_RW=1;
LCD_E =0;
_nop_();
LCD_E = 1;
}while(DataPort & 0x80);
LCD_E=0;
}
LCD写命令程序:
void LcdWriteCmd ( Uchar Command ) {
LCD_ME = 0;
LcdBusy();
LCD_RS = 0;
LCD_RW = 0;
DataPort = Command;
LCD_E = 1;
_nop_();
_nop_();
LCD_E = 0;
}
LCD写数据程序:
void LcdWriteData( Uchar DATA ) {
LcdBusy();
LCD_ME = 0;
LCD_RS = 1;
LCD_RW = 0;
LCD_E = 1;
DataPort=DATA;
_nop_();
LCD_E=0;
}
LCD初始化程序:
void Initialization_1602(void) {
LcdWriteCmd(0x01);
LcdWriteCmd(0x38);