基于热敏电阻的单片机温度测量系统设计

2020-01-20来源: 51hei关键字:热敏电阻  单片机  温度测量系统

本课题用一种基于单片机的数据采集系统方案,该方案根据热敏电阻随温度变化而变化的特性,采用串联分压电路。单片机采集热敏电阻的电压,通过A/D转换将模拟量电压信号转换成数字量电压信号,经过查表转换得到温度值,控制液晶屏实时显示温度值。本系统中所用到的器件是STC89C52单片机、NTC热敏电阻和LCD1602液晶显示屏。


原理图如下

单片机源程序如下:

#include

#include

#define uchar unsigned char

#define uint unsigned int

sbit rs=P0^5;

sbit rw=P0^6;

sbit e=        P0^7;

sbit ADCS=P1^0;

sbit ADCLK=P1^1;

sbit ADDI=P1^2;

sbit ADDO=P1^2;

uchar code tab3[]="Low-temperature ";  

uchar code tab4[]="Over-temperature";

uchar code tab5[]="     Error      ";

uchar code tab6[]="  Temp:";

uchar code tab7[]="     Normal     ";

uchar code tab1[]="0123456789";

uchar code tab2[]=

          {79,78,77,76,75,74,73,72,                   //温度补偿表

           71,70,69,68,67,67,66,65,

           64,63,63,62,61,60,60,59,

           58,58,57,56,56,55,54,54,

           53,53,52,52,51,50,50,49,

           49,48,48,47,47,46,46,45,

           45,44,44,43,43,43,42,42,

           41,41,40,40,39,39,39,38,

           38,37,37,36,36,36,35,35,

           34,34,34,33,33,33,32,32,

           31,31,31,30,30,30,29,29,

           28,28,28,27,27,27,26,26,

           26,26,25,25,24,24,23,23,

           23,22,22,22,21,21,21,20,

           20,20,19,19,19,18,18,18,

           17,17,17,16,16,16,15,15,

           15,14,14,13,13,13,12,12,

           12,11,11,11,10,10,10,9,

           9,9,8,8,7,7,7,6,

           6,6,5,5,4,4,4,3,

           3,3,2,2,1,1,1,0,

           0,1,1,2,2,2,3,3,

           4,4,5,5,6,6,7,7,

           8,8,9,9,10,10,11,11,

           12,12,13,14,15,15,16,17,

           17,18,19,19,20};

uint ad,ad1;

//*********延时50us*t*******************

void delay_50us(uint t)

{

        uchar j,z;

        for(z=t;z>0;z--)

                for(j=19;j>0;j--);

}

//**************************************

//**********延时1ms*z*******************

void delay(uint z)

{

    uint x,y;

    for(x=z;x>0;x--)

        for(y=110;y>0;y--);

}

//**************************************

//*********写指令****************

void write_com(uchar com1)

{

        e=0;

        rs=0;

        rw=0;

        P2=com1;

        delay_50us(10);

    e=1;

        delay_50us(20);

        e=0;  

}

//**********写数据*******************

void write_data(uchar dat1)

{

    e=0;

    rs=1;

    rw=0;

    P2=dat1;

    delay_50us(10);

    e=1;

    delay_50us(20);

    e=0;        

}

//*****液晶初始化*******************

void lcd1602init()

{

        delay_50us(300);

        write_com(0x38);

        write_com(0x08);

        write_com(0x01);

    write_com(0x06);

        write_com(0x0c);

}

//***********AD转换模块**************

uint ADC0832(uchar channel)

{

        uchar i;

        uint dat=0;

        uchar ndat=0;

        if(channel==0)channel=2;

        if(channel==1)channel=3;

        ADDI=1;

        _nop_();

        _nop_();

        ADCS=0;//拉低CS端

        _nop_();

        _nop_();

        ADCLK=1;//拉高CLK端

        _nop_();

        _nop_();

        ADCLK=0;//拉低CLK端,形成下降沿1

        _nop_();

        _nop_();

        ADCLK=1;//拉高CLK端

        ADDI=channel&0x1;

        _nop_();

        _nop_();

        ADCLK=0;//拉低CLK端,形成下降沿2

        _nop_();

        _nop_();

        ADCLK=1;//拉高CLK端

        ADDI=(channel>>1)&0x1;

        _nop_();

        _nop_();

        ADCLK=0;//拉低CLK端,形成下降沿3

        ADDI=1;//控制命令结束 

        _nop_();

        _nop_();

        dat=0;

        for(i=0;i<8;i++)

        {

                dat|=ADDO;//收数据

                   ADCLK=1;

                   _nop_();

                   _nop_();

                   ADCLK=0;//形成一次时钟脉冲

            _nop_();

            _nop_();

            dat<<=1;

            if(i==7)dat|=ADDO;

        } 

        for(i=0;i<8;i++)

        {                

            ndat>>=1;

                if(ADDO==1)

                ndat|=0x80;

            ADCLK=1;

            _nop_();

            _nop_();

            ADCLK=0;//形成一次时钟脉冲

            _nop_();

            _nop_();

        }

        

        ADCS=1;//拉低CS端

        ADCLK=0;//拉低CLK端

        ADDO=1;//拉高数据端,回到初始状态

    if(dat==ndat)

        {

            return(ndat);

        }

        else

        {

                return(0x00);

        }           

}


//**************显示模块***********************

void disp()

{

     ad1=ad-29;

         write_com(0x80);

         if(ad<29)

         {

              uchar i;

                  for(i=0;i<16;i++)

                  {

                          write_data(tab4[i]);

                  }

                  write_com(0x80+0x40);

                   for(i=0;i<16;i++)

                  {

                          write_data(tab5[i]);

                  }                

         }

                  else if(ad>233)

         {

                   uchar i;

                  for(i=0;i<16;i++)

                  {

                          write_data(tab3[i]);

                  }        

                   write_com(0x80+0x40);

                   for(i=0;i<16;i++)

                  {

                          write_data(tab5[i]);

                  }                

         }                 

         else if(ad>=29&&ad<=233)

{

[1] [2]
关键字:热敏电阻  单片机  温度测量系统 编辑:什么鱼 引用地址:http://news.eeworld.com.cn/mcu/ic486265.html 本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

上一篇:STC89C52RC单片机+串口+红外控制16路舵机程序
下一篇:基于51单片机的定时器程序设计

关注eeworld公众号 快捷获取更多信息
关注eeworld公众号
快捷获取更多信息
关注eeworld服务号 享受更多官方福利
关注eeworld服务号
享受更多官方福利

推荐阅读

TI 全新线性热敏电阻,将比负温度系数(NTC)提高50%
德州仪器(TI)将其线性热敏电阻纳入其温度检测产品组合,该线性热敏电阻精度比负温度系数(NTC)热敏电阻高50%。德州仪器热敏电阻具有更高精度,可在接近其他组件和整个系统的热限值的条件下运行,从而帮助工程师在降低物料清单(BOM)和解决方案总成本的同时实现性能的更大化。如需更多信息, NTC热敏电阻由于价格低廉而被广泛使用,但也给设计工程师带来了一些挑战,比如在极端温度下性能的下降以及由于校准要求复杂而增加设计时间。德州仪器的新型线性热敏电阻能够在价格相近的前提下提供更高价值——其中更主要的是使设计时间更短,减少组件数量并提高系统性能。 扩展系统性能和可靠性德州仪器的新型热敏电阻可提供可靠、高精度的热测量
发表于 2020-02-20
TI 全新线性热敏电阻,将比负温度系数(NTC)提高50%
NTC热敏电阻测温度 单片机C和汇编源程序
NTC热敏电阻器参数介绍:【标称阻值】标称阻值是NTC热敏电阻器设计的电阻值,常在热敏电阻器表面标出。标称阻值是指在基准温度为25℃时零功率阻值,因此又被称为电阻值R25。【额定功率】额定功率是指热敏电阻器在环境温度25℃、相对湿度为45%~80%及大气压力为0.87~1.07Pa的大气条件下,长期连续负荷所允许的耗散功率。【B值范围】B值范围(K)是负温度系数热敏电阻器的热敏指数,反映了两个温度之间的电阻变化。它被定义为两个温度下零功率电阻值的自然对数之差与这个温度倒数之差的比值。B值可用下述公式计算,即  式中,R1、R2分别是绝对温度T1、T2时的电阻值(Ω)。【零功率电阻值】在规定温度下测量热敏电阻
发表于 2019-11-11
NTC热敏电阻测温度 单片机C和汇编源程序
ATmega8+PT100热敏电阻+AD824S proteus仿真与源程序
pt100热敏电阻+AD824S放大并由ATmega8单片机主控的测温系统仿真原理图如下ATmega8单片机源程序如下:/*****************************************************This program was produced by theCodeWizardAVR V2.03.4 StandardAutomatic Program Generator?Copyright 1998-2008 Pavel Haiduc, HP InfoTech s.r.l.Project : Version : Date    
发表于 2019-11-08
ATmega8+PT100热敏电阻+AD824S proteus仿真与源程序
HAL库教程14:查表法测量NTC热敏电阻
如果超过范围,返回32767 ℃。10K上拉,3950 10K热敏电阻  * @retval 温度值  */  short calcuTem(u16 ad_value){  short tempValue= 0x7fff;  if ((ad_value < 3877)&&(ad_value > 72))  {    for (short i = 0 ; i < 181 ; i++)    {      if (ad_value > tempRes_buf[i
发表于 2019-05-30
HAL库教程14:查表法测量NTC热敏电阻
热敏电阻和模拟温度传感器感测解决方案
选择合适的温度传感器不但可以节省成本,还可以尽可能地提高系统性能。在这篇博文中,我将主要来谈一谈热敏电阻和模拟温度传感器,这两个都是成本有效的温度感测解决方案。而问题在于,你怎么才能知道选择哪一个呢?从技术上讲,热敏电阻是一种电阻器,它的电阻值随温度的变化而变化。如图1中所示,需要一个偏置电路和少数几个外部组件,在这里,偏置电阻器和热敏电阻组成了一个分压器,并且被接到一个可选运算放大器上,这个运算放大器与微控制器 (MCU) 的模数转换器 (ADC) 相连,从而将热敏电阻的电阻值转换为一个温度值。热敏电阻的优势在于其低成本。此外,作为一个电阻器,它可以采用极小型两端子封装,并被放置在接线式探针内。热敏电阻的缺点是,只有在很窄
发表于 2018-05-20
基于52单片机控制编码器显示程序
#include "reg52.h"    #define uchar unsigned char#define uint unsigned int#define LCD1602_DATAPINS P0sbit LCD1602_E=P2^7;sbit LCD1602_RW=P2^5;sbit LCD1602_RS=P2^6;sbit DIR=P1^0;sbit STEP=P1^1;sbit K1=P3^1;sbit K2=P3^0;typedef unsigned int u16;   //对数据类型进行声明定义typedef unsigned char
发表于 2020-02-08
小广播
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2020 EEWORLD.com.cn, Inc. All rights reserved