找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
12
返回列表 发新帖
楼主: 七颗星星
打印 上一主题 下一主题
收起左侧

刚刚告知老师不允许用DS18B20数字传感器测温,还有什么吗?

  [复制链接]
41#
ID:145062 发表于 2016-10-29 15:26 | 只看该作者
通过热敏电阻的阻值变化,通过MCU的ADC获取热敏电阻的两端电压变化,计算出相应的电阻值,根据组织查边获取温度值,首先热敏电阻便宜,电阻简单,查表方便,相应的江都不高一般是0.1摄氏度吧!
回复

使用道具 举报

42#
ID:143848 发表于 2016-10-29 20:15 | 只看该作者
pingguotu 发表于 2016-10-29 15:26
通过热敏电阻的阻值变化,通过MCU的ADC获取热敏电阻的两端电压变化,计算出相应的电阻值,根据组织查边获取 ...

热敏电阻3950的测温单片机里程序
code        uint VOL[]和code        uint Temper[]中的数据是怎么计算查表得到的。
       result=(uint)((res/2048.0-1.0)*500.0);
                 
                 temp1=abs(result-VOL[0]);
                 for(i=1;i<150;i++)
                 {
                         temp2=abs(result-VOL);
                        if(temp1>=temp2)
                        {
                                temp1=temp2;
                                flag=i;
                        }
   这一段程序是什么意思呢?         
               :#include <reg52.h>           
#include <intrins.h>
#include <math.h>

typedef unsigned char uchar;
typedef unsigned int  uint;
code        uint VOL[]={                343,        339,        339,        335,        332,        332,        328,        324,        320,        320,        
                                                        316,        312,        312,        308,        304,        300,        300,        296,        292,        292,
                                                        289,        285,        285,        281,        277,        273,        273,        269,        265,        265,        
                                                        261,        257,        257,        253,        250,        250,        246,        242,        242,        238,
                                                        234,        234,        230,        230,        226,        222,        222,        218,        218,        214,        
                                                        210,        210,        207,        207,        203,        199,        199,        195,        195,        191,
                                                        191,        187,        187,        183,        179,        179,        175,        175,        171,        171,        
                                                        167,        167,        164,        164,        160,        160,        160,        156,        156,        152,
                                                        152,        148,        148,        144,        144,        140,        140,        140,        136,        136,        
                                                        132,        132,        132,        128,        128,        125,        125,        125,        121,        121,
                                                        121,        117,        113,        109,        109,        105,        101,        101,        97,                97,
                                                        93,                89,                89,                85,                85,                82,                82,                78,                78,                74,        
                                                        74,                70,                70,                66,                66,                66,                62,                62,                58,                58,        
                                                        58,                54,                54,                54,                50,                50,                50,                46,                46,                46,        
                                                        42,                42,                42,                42,                39,                39,                39,                39,                35,                35};

code        uint Temper[]={                100,        150,        200,        250,        300,        350,        400,        450,        500,        550,        
                                                        600,        650,        700,        750,        800,        850,        900,        950,        1000,        1050,
                                                        1100,        1150,        1200,        1250,        1300,        1350,        1400,        1450,        1500,        1550        
                                                        1600,        1650,        1700,        1750,        1800,        1850,        1900,        1950,        2000,        2050,
                                                        2100,        2150,        2200,        2250,        2300,        2350,        2400,        2450,        2500,        2550,        
                                                        2600,        2650,        2700,        2750,        2800,        2850,        2900,        2950,        3000,        3050,
                                                        3100,        3150,        3200,        3250,        3300,        3350,        3400,        3450,        3500,        3550,        
                                                        3600,        3650,        3700,        3750,        3800,        3850,        3900,        3950,        4000,        4050,
                                                        4100,        4150,        4200,        4250,        4300,        4350,        4400,        4450,        4500,        4550,        
                                                        4600,        4650,        4700,        4750,        4800,        4850,        4900,        4950,        5000,        5050,
                                                        5100,        5200,        5300,        5400,        5500,        5600,        5700,        5800,        5900,        6000,
                                                        6100,        6200,        6300,        6400,        6500,        6600,        6700,        6800,        6900,        7000,        
                                                        7100,        7200,        7300,        7400,        7500,        7600,        7700,        7800,        7900,        8000,        
                                                        8100,        8200,        8300,        8400,        8500,        8600,        8700,        8800,        8900,        9000,        
                                                        9100,        9200,        9300,        9400,        9500,        9600,        9700,        9800,        9900,        10000};
sbit STS=P1^0;                           
sbit CE = P1^1;
sbit CS=P1^2;
sbit A0=P1^3;
sbit RC=P1^4;

sbit RS=P1^5 ;
sbit RW=P1^6 ;
sbit EN=P1^7 ;           

void delay_ms(uint z)
{
        uint x,y;
        for(x=z;x>0;x--)
                for(y=110;y>0;y--);
}
uint AD1674_Read(void)
{
        uint temp;
        uchar temp1,temp2;
        CS=1;        //片选信号
        CE=0;        //初始化,关闭数据采集
        CS=0;
        A0=0;
        RC=0;
        CE=1;//CE=1,CS=0,RC=0,A0=0启动12位温度转换
        _nop_();
        while(STS==1);         //等待数据采集结束
        CE=0;         //芯片使能关闭
        RC=1;
        A0=0;
        CE=1;//CE=1,CS=0,RC=1,12/8=1,A0=0 允许高八位数据并行输出
        _nop_();
        temp1=P0; //读取转换结果的高八位
        CE=0;  //芯片使能关闭
        RC=1;
        A0=1;
        CE=1;//CE=1,CS=0,RC=1,12/8=0,A0=1 允许低四位数据 并行输出
        _nop_();
        temp2=P0;         //读取转换结果的第四位
        temp=((temp1<<4)|(temp2&0X0F));          //高位和低位合成实际温度,temp2为PO口的高四位
        return (temp);           //还回转换结果,右移四位是因为temp2为P0口的高四位
}
/*** 写数据***/
void w_dat(unsigned char dat)
{
        RS = 1;
        //EN = 0;
        P2 = dat;
        delay_ms(5);
        RW = 0;
        EN = 1;
        EN = 0;
}
/*** 写命令***/
void w_cmd(unsigned char cmd)
{
        RS = 0;
//        EN = 0;
        P2 = cmd;
        delay_ms(5);
        RW = 0;
        EN = 1;
        EN = 0;
}                        
/*** 发送字符串到LCD***/
void w_string(unsigned char addr_start, unsigned char *p)
{
        unsigned char *pp;
        
        pp = p;
        w_cmd(addr_start);
        while (*pp != '\0')
        {
                w_dat(*pp++);
        }
}           

/*** 初始化1602****/
void Init_LCD1602(void)
{
        EN = 0;
        w_cmd(0x38);  // 16*2显示,5*7点阵,8位数据接口
        w_cmd(0x0C);  // 显示器开、光标开、光标允许闪烁
        w_cmd(0x06);  // 文字不动,光标自动右移
        w_cmd(0x01);  // 清屏
}
void process(uint date,uchar add)
{
        uchar A[7];
        A[0]=date/1000%10+'0';
        A[1]=date/100%10+'0';
        A[2]='.';        
        A[3]=date/10%10+'0';
        A[4]=date%10+'0';
        A[5]='C';                        
        w_string(add,A);
}         
void main()
{

        uchar i,flag=0;
        uint result,temp1,temp2;
        float        res;

        Init_LCD1602();
         
        w_string(0x80,"Temper:");
        
        while (1)
        {
                 res=(float)(AD1674_Read());
                 result=(uint)((res/2048.0-1.0)*500.0);
                 
                 temp1=abs(result-VOL[0]);
                 for(i=1;i<150;i++)
                 {
                         temp2=abs(result-VOL);
                        if(temp1>=temp2)
                        {
                                temp1=temp2;
                                flag=i;
                        }
                                
                 }
        
                 process(Temper[flag],0x80+7);
        }   
回复

使用道具 举报

43#
ID:140371 发表于 2016-10-30 16:11 | 只看该作者
這個電路不妨用麵包板,試做看看(或是用仿真軟體模擬看看)...例如測試範圍從  0到 100度  輸出Vo從0到4.92 這個電路就可以用  
回复

使用道具 举报

44#
ID:164989 发表于 2017-5-28 16:48 | 只看该作者
pt100接一个tl431恒流源再接2个运放加调零出来就是电压的变化再接个tl1543AD转换接到单片机里计算电阻值在计算温度temp_r=((float)temp)*5000/(1024*20)+100;  //计算电阻值。[img]C:\Users\asus\Desktop\E13DA9FA454BBB6930F3639E5E9D33EE.pngC:\Users\asus\Desktop\4700A418B4F82E4F6F6DE1ED1AB49134.png[/img]
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表