单片机 > 单片机程序设计 > 详情

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

发布时间:2020-06-18 发布时间:
|

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到

                {



『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
C8051F020的UART