微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > DS18B20程序

DS18B20程序

时间:10-02 整理:3721RD 点击:
#include"12.h"
#include<intrins.h>
#define uint8 unsigned char
#define uint16 unsigned int
sbit beep=P3^1;
sbit DQ=P3^4;
uint8 TPH,TPL;
uint8 code Segment[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
void Delay10us(uint16 us);
void Ds18b20Rst();
void Ds18b20WriteByte(uint8 Data);
void Display(float temp);
void di(float temp);
uint8 Ds18b20ReadByte();
void main()
{       
        uint16 tempHex;
        float temp;
        while(1)
        {
                Ds18b20Rst();                                       
                Ds18b20WriteByte(0xcc);       
                Ds18b20WriteByte(0x44);
                while(!DQ);
       
                Ds18b20Rst();                                               
                Ds18b20WriteByte(0xcc);       
                Ds18b20WriteByte(0xbe);
                TPL=Ds18b20ReadByte();
                TPH=Ds18b20ReadByte();
                tempHex=TPH;
                tempHex=(tempHex<<8)+TPL;
                temp=tempHex/16.0;
                        Display(temp);
                        di(temp);
        }
}
void Delay10us(uint16 us)
{
        us=us*1;
        while(us--)
        {
                _nop_();
                _nop_();
        }
}
void Ds18b20Rst()
{
        CY=1;
        while(CY)
        {
                DQ=0;                               
                Delay10us(48);
                DQ=1;                                       
                Delay10us(6);       
                CY=DQ;                       
                Delay10us(46);
                DQ=1;                       
                Delay10us(46);
        }
}
void Ds18b20WriteByte(uint8 Data)
{
        uint8 i;
        for(i=0;i<8;i++)               
        {
                DQ=0;                                               
                _nop_();
                _nop_();                               
                Data>>=1;                               
                DQ=CY;                                               
                Delay10us(6);                       
                DQ=1;                                                       
                _nop_();
        }
}
uint8 Ds18b20ReadByte()
{
        uint8 i,Data;
        for(i=0;i<8;i++)
        {
                Data>>=1;
                DQ=0;
                _nop_();
                _nop_();
                DQ=1;
                _nop_();
                _nop_();
                if(DQ)
                        Data|=0x80;
                Delay10us(6);       
        }
                return Data;
}
/****************************************************************************************************
*****************************************************************************************************
下面是你需要改的,根据具体电路连接,选择的IO口不同
*****************************************************************************************************
***************************************************************************************************/
void Display(float temp)
{
       
        P2=Segment[(uint16)temp/100];P1=0X7F;
        Delay10us(1);
       
        P2=Segment[(uint16)temp%100/10];P1=0XBF;
        Delay10us(1);
       
        P2=Segment[(uint16)temp%10]|0x80;P1=0XDF;
        Delay10us(1);
       
       
        P2=Segment[(uint16)(temp*10)%10];P1=0XEF;
        Delay10us(1);
       
}
void di(float temp)
{
        uint16 num;
        if(temp>=30)
        {
                num++;
                Delay10us(10);
                if(num==50)
                {
                beep=~beep;
                num=0;
                }
        }
        if(temp<30)
        {
                num=0;
                beep=1;
        }
}
/****************************************************************************************************
*****************************************************************************************************
上面是你需要改的,根据具体电路连接,选择的IO口不同
*****************************************************************************************************
***************************************************************************************************/

做实物好使吗,有的仿真好使,实物不好使

谢谢小编分享,辛苦了。

多谢大神分享

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top