襄城人才网

用ds1820芯片在液晶显示的温度无变化是什么问题

    发布时间:2020-03-21

    电路接线:DS18B20可以直接和CPU相连的,1接地,3接电源,2接CPU,下面是控制程序下载:通过DS18B20测试当前环境温度, 并通过数码管显示当前温度值, 目前显示范围: 0.0~ +99.9度
    #include<AT89X52.H>
    #include <absacc.h>
    #define uchar unsigned char
    #define uint unsigned int
    #define DATAPORT P0 //定义P0口为Led数据口
    //#define SETTEMP P1 //定义P1口为设定温度
    #define SELECT P2 //定义P2口为选择信号
    sbit L1 = P1^1; //灯作为电机
    sbit L2 = P1^2;
    sbit L3 = P1^3;

    sbit DQ = P3^4; //定义ds18b20通信端口
    char Num[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//0~9
    int temp1,temp2,ID=0,set=0,blink;
    int temp1=27,xs=5; //定义整数和小数

    unsigned int max,mid,min,flag;
    /////////////////////下面是小板的地址///大板对应为0xc700,0xc600,0xc500////
    #define led_data XBYTE[0xe000] //显示数据端口
    #define led_sel XBYTE[0xc000] //显示器选择端
    #define key_addr XBYTE[0xa000] //按键端口

    //uchar d[10]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0x0F8,0x80,0x90};//仿真时用到

    /*********延时>K*1ms,*//////*12.000mhz>11.0596有误差********/

    void delayms(int ms)
    {
    uchar i;
    while(ms--)
    {
    for(i=250;i>0;i--);
    }
    }
    /***********ds18b20延迟子函数(晶振11.0596MHz )*******/
    void delay_18B20(unsigned int i)
    {
    while(i--);
    }
    /**********ds18b20初始化函数**********************/
    void Init_DS18B20(void)
    {
    unsigned char x=0;
    DQ = 1; //DQ复位 ds18b20通信端口
    delay_18B20(8); //稍做延时
    DQ = 0; //单片机将DQ拉低
    delay_18B20(80); //精确延时 大于 480us
    DQ = 1; //拉高总线
    delay_18B20(4);
    x=DQ; //稍做延时后 如果x=0则初始化成功 x=1则初始化失败
    delay_18B20(20);
    }
    /***********ds18b20读一个字节**************/
    unsigned char ReadOneChar(void)
    {
    uchar i=0;
    uchar dat = 0;
    for (i=8;i>0;i--)
    {
    DQ = 0; // 高电平拉成低电平时读周期开始
    dat>>=1;
    DQ = 1; // 给脉冲信号
    if(DQ)
    dat|=0x80; // | *
    delay_18B20(4);
    }
    return(dat);
    }
    /*************ds18b20写一个字节****************/
    void WriteOneChar(uchar dat)
    {
    unsigned char i=0;
    for (i=8; i>0; i--)
    {
    DQ = 0; //从高电平拉至低电平时,写周期的开始
    DQ = dat&0x01; //数据的最低位先写入
    delay_18B20(5); //60us到120us延时
    DQ = 1;
    dat>>=1; //从最低位到最高位传入
    }
    }
    /**************读取ds18b20当前温度************/
    void ReadTemperature(void)
    {
    unsigned char a=0;
    unsigned char b=0;
    unsigned char t=0;
    Init_DS18B20();
    WriteOneChar(0xCC); // 跳过读序号列号的操作
    WriteOneChar(0x44); // 启动温度转换
    delay_18B20(100); // this message is wery important
    Init_DS18B20();
    WriteOneChar(0xCC); //跳过读序号列号的操作
    WriteOneChar(0xBE); //读取温度寄存器等(共可读9个寄存器) 前两个就是温度
    delay_18B20(100);
    a=ReadOneChar(); //读取温度值低位
    b=ReadOneChar(); //读取温度值高位
    temp1=b<<4; //高8位中后三位数的值
    temp1+=(a&0xf0)>>4; //低8位中的高4位值加上高8位中后三位数的值 temp1室温整数值
    temp2=a&0x0f; //小数的值
    // temp=((b*256+a)>>4); //当前采集温度值除16得 实际温度值
    xs=temp2*0.0625*10; //小数位,若为0.5则算为5来显示 xs小数

    回复:

    2.2.1 温度采集单元
    在采集温度采用DS18B20型传感器,DS18B20是美国 DALLAS公司推出的单总线数字测温芯片[3]。它具有独特的单总线的接口方式,仅需使用1个端口就可以实现与单片机之间的双向通讯。同时采用数字信号输出提高了信号抗干扰能力和温度测量精度。它的工作电压使用范围宽(3.0V~5.5V),可以采用外部供电方式,也可以采用寄生电源方式供电,即当总线DQ为高电平时,窃取信号能量给DS18B20进行供电[4,5,6]。它还有负压特性,电源极性接反时,DS18B20不会因接错线而烧毁,但不能正常工作。还可以通过编程实现9~12位的温度转换精度的设置。由表2-1[7]可见,设定的分辨率越高,所需要的温度数据转换时间就越长,在实际应用中要将分辨率和转换时间权衡的考虑。

    电子信息毕业班的同学们,现在本人有大量电子信息类的完整毕业论文(大部分包括中英文摘要,无误的程序,电路图,英文文献翻译,答辩演示文件等),质量保证过硬,在网站上均无雷同,几乎打印出来即可,可放心使用,可以节省你大部分宝贵的时间,去找心仪的工作。
    QQ:354837828
    邮箱:354837828@qq.com

    回复:

    问错区了,这里应该没人懂。。。

    回复:

    该问题分错分类了

    回复:

    你都不留下联系方式,怎么帮你?

    回复:

    通过编写程序控制DS18B20读与写而得到温度的,不懂的再来找我啦

    回复:

    DALLAS最新单线数字温度传感器DS18B20简介新的“一线器件”体积更孝适用电压更宽、更经济 Dallas 半导体公司的数字化温度传感器DS1820是世界上第一片支持 “一线总线”接口的温度传感器。一线总线独特而且经济的特点,使用户可轻松地组建传感器网络...

    回复:

    1,是不是一定准确。 鲁大师或其他同类软件,并不能直接测量温度的装置。 CPU内置的温度传感器测得的温度,温度值被传递到主板上的I / O芯片的寄存器。鲁大师与其他软件的I / O芯片寄存器读取的温度值? 但董事会可采取多种不同类型的I / O芯片...

    上一篇:4399炫舞的处女座衣服是什么样的 下一篇:武汉全辰装饰设计工程有限公司具体地址在哪儿

    返回主页:襄城人才网

    本文网址:http://0710job.cn/view-12301-1.html
        信息删除