NTC热敏电阻测温度 单片机C和汇编源程序

发布者:星辰耀眼最新更新时间:2019-11-11 来源: 51hei关键字:NTC  热敏电阻  单片机C  汇编 手机看文章 扫描二维码
随时随地手机看文章

NTC热敏电阻器参数介绍:


【标称阻值】
标称阻值是NTC热敏电阻器设计的电阻值,常在热敏电阻器表面标出。标称阻值是指在基准温度为25℃时零功率阻值,因此又被称为电阻值R25。


【额定功率】
额定功率是指热敏电阻器在环境温度25℃、相对湿度为45%~80%及大气压力为0.87~1.07Pa的大气条件下,长期连续负荷所允许的耗散功率。


【B值范围】
B值范围(K)是负温度系数热敏电阻器的热敏指数,反映了两个温度之间的电阻变化。它被定义为两个温度下零功率电阻值的自然对数之差与这个温度倒数之差的比值。B值可用下述公式计算,即  
式中,R1、R2分别是绝对温度T1、T2时的电阻值(Ω)。


【零功率电阻值】
在规定温度下测量热敏电阻器的电阻值,当由于电阻器内部发热引起的电阻值变化相对于总的测量误差来说可以忽略不计时测得的电阻值。


【耗散系数δ(mW/℃)】
耗散系数是指热敏电阻器消耗的功率与环境温度变化之比,即
 
式中,W是热敏电阻消耗的功率(mW);T是热平衡时的温度(℃);T0是周围环境温度(℃);I是在温度为T时通过热敏电阻器的电流(A);R是在温度为T时热敏电阻器的电阻值(Ω)。


【时间常数τ(s)】
时间常数τ(s)指的是热敏电阻器在零功率状态下,当环境温度由一个特定温度向另一个特定温度突变时,热敏电阻器阻值变化63.2%所需的时间。


【电阻温度系数】
电阻温度系数是指环境温度变化1℃时热敏电阻器电阻值的相对变化量。知道某一个型号热敏电阻器的电阻温度系数后,就可以估算出热敏电阻器在相应温度下的实际电阻值。


单片机源程序如下:

/*---------------------------------------------------------------------*/

/* --- STC MCU International Limited ----------------------------------*/

/* --- STC 1T Series MCU Demo Programme -------------------------------*/

/* 如果要在程序中使用此代码,请在程序中注明使用了宏晶科技的资料及程序   */

/*---------------------------------------------------------------------*/



/*************        本程序功能说明        **************


读ADC和测温度.


用STC的MCU的IO方式控制74HC595驱动8位数码管。


用户可以修改宏来选择时钟频率.


用户可以在"用户定义宏"中选择共阴或共阳. 推荐尽量使用共阴数码管.


使用Timer0的16位自动重装来产生1ms节拍,程序运行于这个节拍下, 用户

修改MCU主时钟频率时,自动定时于1ms.


左边4位数码管显示ADC2接的电压基准TL431的读数, 右边4位数码管显示温度值, 分辨率0.1度.


NTC使用1%精度的MF52 10K@25度C.


测温度时, 为了通用, 使用12位的ADC值, 使用对分查找表格来计算, 小数点后

一位数是用线性插补来计算的.


所以, 测温度的ADC3进行4次ADC连续采样, 变成12位的ADC来计算温度.


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


#include        "config.H"

#include        "adc.h"


/****************************** 用户定义宏 ***********************************/


#define                LED_TYPE        0x00                //定义LED类型, 0x00--共阴, 0xff--共阳


#define        Timer0_Reload        (65536UL -(MAIN_Fosc / 1000))                //Timer 0 中断频率, 1000次/秒


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







/*************        本地常量声明        **************/

u8 code t_display[]={                                                //标准字库

//         0    1    2    3    4    5    6    7    8    9    A    B    C    D    E    F

        0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71,

//black         -     H    J         K          L           N        o   P         U     t    G    Q    r   M    y

        0x00,0x40,0x76,0x1E,0x70,0x38,0x37,0x5C,0x73,0x3E,0x78,0x3d,0x67,0x50,0x37,0x6e,

        0xBF,0x86,0xDB,0xCF,0xE6,0xED,0xFD,0x87,0xFF,0xEF,0x46};        //0. 1. 2. 3. 4. 5. 6. 7. 8. 9. -1


u8 code T_COM[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};                //位码



/*************        IO口定义        **************/

sbit        P_HC595_SER   = P4^0;        //pin 14        SER                data input

sbit        P_HC595_RCLK  = P5^4;        //pin 12        RCLk        store (latch) clock

sbit        P_HC595_SRCLK = P4^3;        //pin 11        SRCLK        Shift data clock



/*************        本地变量声明        **************/


u8         LED8[8];                //显示缓冲

u8        display_index;        //显示位索引

bit        B_1ms;                        //1ms标志


u16        msecond;


/*************        本地函数声明        **************/

u16        get_temperature(u16 adc);



/****************  外部函数声明和外部变量声明 *****************/




/********************** ADC配置函数 ************************/

void ADC_config(void)

{

        ADC_InitTypeDef                ADC_InitStructure;                                //结构定义

        ADC_InitStructure.ADC_Px        = ADC_P12 | ADC_P13;//设置要做ADC的IO,        ADC_P10 ~ ADC_P17(或操作),ADC_P1_All

        ADC_InitStructure.ADC_Speed     = ADC_90T;                        //ADC速度                        ADC_90T,ADC_180T,ADC_360T,ADC_540T

        ADC_InitStructure.ADC_Power     = ENABLE;                        //ADC功率允许/关闭        ENABLE,DISABLE

        ADC_InitStructure.ADC_AdjResult = ADC_RES_H8L2;                //ADC结果调整,        ADC_RES_H2L8,ADC_RES_H8L2

        ADC_InitStructure.ADC_Polity    = PolityLow;                //优先级设置        PolityHigh,PolityLow

        ADC_InitStructure.ADC_Interrupt = DISABLE;                        //中断允许                ENABLE,DISABLE

        ADC_Inilize(&ADC_InitStructure);                                        //初始化

        ADC_PowerControl(ENABLE);                                                        //单独的ADC电源操作函数, ENABLE或DISABLE

}



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

void main(void)

{

        u8        i;

        u16        j;

        

        display_index = 0;

        ADC_config();

        

        Timer0_1T();

        Timer0_AsTimer();

        Timer0_16bitAutoReload();

        Timer0_Load(Timer0_Reload);

        Timer0_InterruptEnable();

        Timer0_Run();

        EA = 1;                                                //打开总中断

        

        for(i=0; i<8; i++)        LED8[i] = 0x10;        //上电消隐


        

        while(1)

        {

                if(B_1ms)        //1ms到

                {

                        B_1ms = 0;

                        if(++msecond >= 300)        //300ms到

                        {

                                msecond = 0;

                                j = Get_ADC10bitResult(2);        //参数0~7,查询方式做一次ADC, 返回值就是结果, == 1024 为错误

                                

                                if(j < 1024)

                                {

                                        LED8[0] = j / 1000;                //显示ADC值

                                        LED8[1] = (j % 1000) / 100;

                                        LED8[2] = (j % 100) / 10;

                                        LED8[3] = j % 10;

                                        if(LED8[0] == 0)        LED8[0] = DIS_BLACK;

                                }

[1] [2] [3] [4]
关键字:NTC  热敏电阻  单片机C  汇编 引用地址:NTC热敏电阻测温度 单片机C和汇编源程序

上一篇:STC15单片机ADC温敏电阻测温源程序
下一篇:STC15w4k58s4单片机4串口同时收发例程

小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
  • 学习ARM开发(16)
    ARM有很多东西要学习,那么中断,就肯定是需要学习的东西。自从CPU引入中断以来,才真正地进入多任务系统工作,并且大大提高了工作效率。采 ...
  • 学习ARM开发(17)
    因为嵌入式系统里全部要使用中断的,那么我的S3C44B0怎么样中断流程呢?那我就需要了解整个流程了。要深入了解,最好的方法,就是去写程序 ...
  • 学习ARM开发(18)
    上一次已经了解ARM的中断处理过程,并且可以设置中断函数,那么它这样就可以工作了吗?答案是否定的。因为S3C44B0还有好几个寄存器是控制中 ...
  • 嵌入式系统调试仿真工具
    嵌入式硬件系统设计出来后就要进行调试,不管是硬件调试还是软件调试或者程序固化,都需要用到调试仿真工具。 随着处理器新品种、新 ...
  • 最近困扰在心中的一个小疑问终于解惑了~~
    最近在驱动方面一直在概念上不能很好的理解 有时候结合别人写的一点usb的例子能有点感觉,但是因为arm体系里面没有像单片机那样直接讲解引脚 ...
  • 学习ARM开发(1)
  • 学习ARM开发(2)
  • 学习ARM开发(4)
  • 学习ARM开发(6)
何立民专栏 单片机及嵌入式宝典

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

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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