发 帖  
原厂入驻New
[文章]

DS18B20程序

2014-6-22 13:58:28  1265
分享
0
#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口不同

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

陈晨 2015-4-11 00:22:11
做实物好使吗,有的仿真好使,实物不好使
回复

举报

李永林 2017-8-28 21:10:49
谢谢楼主分享,辛苦了。
回复

举报

张贤国 2017-8-28 22:01:47
多谢大神分享
回复

举报

评论

高级模式
您需要登录后才可以回帖 登录 | 注册

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容图片侵权或者其他问题,请联系本站作侵删。 侵权投诉
发文章
关闭

站长推荐 上一条 /7 下一条

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