• 大小: 310KB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2021-06-07
  • 语言: 其他
  • 标签: DS18B20  

资源简介

含datasheet schematic code

资源截图

代码片段和文件信息

/*
 * DS18B20测试程序
 * 
 * 用途:数码管模块测试程序
 * 
 * 作者 日期 备注
 * Huafeng Lin 2012/04/21 新增
 * Huafeng Lin 2012/04/21 修改
 * 
 */

#include 

#define uchar unsigned char

code unsigned char seg7code[]={0xc00xf90xa40xb00x990x920x820xf80x800x900xff};  //不带小数点的共阳数码管段码
code unsigned char seg7codeB[]={0x400x790x240x300x190x120x020x780x000x100xff};  //带小数点的共阳数码管段码

sbit DQ=P3^6;  //数据传输线接单片机的相应的引脚 
unsigned char tempL=0;  //设全局变量
unsigned char tempH=0; 
unsigned int sdata; //测量到的温度的整数部分
unsigned char xiaoshu1; //小数第一位
unsigned char xiaoshu2; //小数第二位
unsigned char xiaoshu; //两位小数
bit fg=1;         //温度正负标志

void delay(unsigned char i)
{
for(i;i>0;i--);
}

void delay1(uchar i)
{
uchar jk; 
for(j=i;j>0;j--)
for(k=125;k>0;k--);
}

void Init_DS18B20(void) 
{
unsigned char x=0;
DQ=1;  //DQ先置高 
delay(8);  //稍延时
DQ=0;  //发送复位脉冲 
delay(80);  //延时(>480us) 
DQ=1;  //拉高数据线 
delay(5);  //等待(15~60us) 
x=DQ;  //用X的值来判断初始化有没有成功,18B20存在的话X=0,否则X=1 
delay(20); 
}

//读一个字节
ReadOneChar(void)   //主机数据线先从高拉至低电平1us以上,再使数据线升为高电平,从而产生读信号
{
unsigned char i=0;  //每个读周期最短的持续时间为60us,各个读周期之间必须有1us以上的高电平恢复期
unsigned char dat=0; 
for (i=8;i>0;i--)  //一个字节有8位 
{
DQ=1; 
delay(1); 
DQ=0;
dat>>=1; 
DQ=1; 
if(DQ) 
dat|=0x80; 
delay(4);

return(dat);
}

//写一个字节
void WriteOneChar(unsigned char dat) 

unsigned char i=0;  //数据线从高电平拉至低电平,产生写起始信号。15us之内将所需写的位送到数据线上,
for(i=8;i>0;i--)  //在15~60us之间对数据线进行采样,如果是高电平就写1,低写0发生。 
{
DQ=0;  //在开始另一个写周期前必须有1us以上的高电平恢复期。 
DQ=dat&0x01; 
delay(5); 
DQ=1; 
dat>>=1;

delay(4);
}

//读温度值(低位放tempL;高位放tempH;)
void ReadTemperature(void) 

Init_DS18B20();  //初始化
WriteOneChar(0xcc);  //跳过读序列号的操作
WriteOneChar(0x44);  //启动温度转换
delay(125);  //转换需要一点时间,延时 
Init_DS18B20();  //初始化
WriteOneChar(0xcc);  //跳过读序列号的操作 
WriteOneChar(0xbe);  //读温度寄存器(头两个值分别为温度的低位和高位) 
tempL=ReadOneChar();  //读出温度的低位LSB
tempH=ReadOneChar();  //读出温度的高位MSB
if(tempH>0x7f)       //最高位为1时温度是负
{
tempL=~tempL; //补码转换,取反加一
tempH=~tempH+1;       
fg=0;       //读取温度为负时fg=0
}
sdata = tempL/16+tempH*16;       //整数部分
xiaoshu1 = (tempL&0x0f)*10/16;  //小数第一位
xiaoshu2 = (tempL&0x0f)*100/16%10; //小数第二位
xiaoshu=xiaoshu1*10+xiaoshu2;  //小数两位
}

//显示函数
void Led(unsigned int date)

if(fg==1)
{
P2=0xfe;      //P1.0=0,选通第一位
P0=seg7code[date/10];   //十位数,查表,输出
delay1(5);
P0=0xff;         //消隐

P2=0xfd;      //P1.1=0选通第二位,个位数
P0=seg7codeB[date%10];
delay1(5);
P0=0xff;        //消隐

P2=0xfb;      //P1.3=0选通第三位,小数点第一位
P0=seg7code[xiaoshu1];
delay1(5);
P0=0xff;          //消隐

P2=0xf7;      //P1.3=0选通第四位,小数点第二位
P0=seg7code[xiaoshu2];
delay1(5);
P0=0xff;        //消隐
}

if(fg==0)   //温度为负时显示的数据
{
P2=0xfe;      //P1.0=0

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2015-06-11 15:32  模块A150\
     目录           0  2015-06-11 15:32  模块A150\原理图\
     文件       64029  2015-06-11 15:31  模块A150\原理图\DS18B20.pdf
     目录           0  2015-06-11 15:32  模块A150\测试程序\
     目录           0  2015-06-11 15:32  模块A150\测试程序\DS18B20\
     文件        7066  2015-06-11 15:31  模块A150\测试程序\DS18B20\DS18B20
     文件       10431  2015-06-11 15:31  模块A150\测试程序\DS18B20\DS18B20.M51
     文件        2111  2015-06-11 15:31  模块A150\测试程序\DS18B20\DS18B20.hex
     文件          43  2015-06-11 15:31  模块A150\测试程序\DS18B20\DS18B20.lnp
     文件         347  2015-06-11 15:31  模块A150\测试程序\DS18B20\DS18B20.plg
     文件       55210  2015-06-11 15:31  模块A150\测试程序\DS18B20\DS18B20.uvopt
     文件       13239  2015-06-11 15:31  模块A150\测试程序\DS18B20\DS18B20.uvproj
     文件       55215  2015-06-11 15:31  模块A150\测试程序\DS18B20\DS18B20_uvopt.bak
     文件       13236  2015-06-11 15:31  模块A150\测试程序\DS18B20\DS18B20_uvproj.bak
     文件        9826  2015-06-11 15:31  模块A150\测试程序\DS18B20\Main.LST
     文件        8080  2015-06-11 15:31  模块A150\测试程序\DS18B20\Main.OBJ
     文件        4048  2015-06-11 15:31  模块A150\测试程序\DS18B20\Main.c
     目录           0  2015-06-11 15:32  模块A150\相关资料\
     文件      261896  2015-06-11 15:31  模块A150\相关资料\DS18B20.pdf

评论

共有 条评论