如何将ds18b20中文资料采集的温度写入AT24C02芯片?

后使用快捷导航没有帐号?
查看: 1670|回复: 6
DS18B20多路温度采集
在线时间47 小时
芯币814 枚
TA的帖子TA的资源
一粒金砂, 积分 20, 距离下一级还需 180 积分
在用MSP430X15x采集多路DS18B20时是不是要先规定每一路18B20的地址?这个地址是根据什么规定的?看到的程序基本上都是采集一路的,在搜索ROM后还需要哪些改动
本帖子中包含更多资源
才可以下载或查看,没有帐号?
在线时间42 小时
TA的帖子TA的资源
首先要得到挂在同一总线的ds18b20的ROM序列号
读取序列号命令是0x33
在初始化18b20后向18b20写0x33(在测序列号的时候总线上只能挂一只18B20)
然后18b20会返回64个比特的序列号;
每一个18b20的序列号不一样;
得到所有的18B20的序列号后将这些序列号事先存入程序;
之后要识别的话向总线写ROM匹配命令即0x55
然后向总线写你要找的18B20序列号;
之后就只有这个18B20会响应单片机的指令;
另外:在启动温度转换的时候先向18B20写0xcc(跳过ROM匹配)这样所有在总线上的18B20都收的到命令
然后写启动温度转换命令0X44;
事实上18B20启动温度转换命令或者读取温度数据命令之前必须要有0xcc(跳过ROM匹配)或是0x55(ROM匹配);这其实就是在发送命令前先指定接收者,可以是全部的18B20或者是其中一个。
至于18B20序列号自动检测。。。相当难搞。。检测命令以及检测方法在DATASHEET上有,不过建议还是直接事先测好序列号然后存入程序来识别比较简单。
#define uchar unsigned char
#define uint unsigned int
#define DataDir
#define DataPort
#define Busy
#define CtrlDir
在线时间47 小时
芯币814 枚
TA的帖子TA的资源
回复 沙发 voodo 的帖子
#include&msp430x15x.h&
#include&intrins.h&
#define uchar unsigned char
#define uint unsigned int
#define DataDir& &&&P4DIR
#define DataPort& & P4OUT& & & & & & & & & & & & & & & &
#define Busy& & & && &&&0x80
#define CtrlDir& &&&P3DIR
#define CLR_RS P3OUT&=~BIT0;& & //RS = P3.0& & & &
#define SET_RS P3OUT|=BIT0;& & & &
#define CLR_RW P3OUT&=~BIT1;& & & & //RW = P3.1
#define SET_RW P3OUT|=BIT1;& & & &
#define CLR_EN P3OUT&=~BIT2;& & & & //EN = P3.2& & & &
#define SET_EN P3OUT|=BIT2;& & & &
#define DQ1 P2OUT |= BIT4
#define DQ0 P2OUT &= ~BIT4
#define DQ_in& &P2DIR &= ~BIT4
#define DQ_out&&P2DIR |= BIT4
#define DQ_val&&(P2IN & BIT4)
uchar tab1[16];
uchar code tab[]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
void delay(int ms)
&&while(ms--)
& &&&for(i=0;i&250;i++)
& && & _nop_(); _nop_(); _nop_(); _nop_();
void DispStr(uchar x,uchar y,uchar *ptr)
& & uchar *
& & uchar i,n = 0;
& & temp =
& & while(*ptr++ != '\0')& &n++;& & //计算字符串有效字符的个数
& & for (i=0;i&n;i++)
& && &&&Disp1Char(x++,y,temp);
& && &&&if (x == 0x0f)
& && && &&&x&&= 0;
& && && &&&y ^= 1;
/*******************************************
函数名称:DispNchar
功& & 能:让液晶从某个位置起连续显示N个字符
参& & 数:x--位置的列坐标
& && && & y--位置的行坐标
& && && & n--字符个数
& && && & ptr--指向字符存放位置的指针
返回值&&:无
********************************************/
void DispNChar(uchar x,uchar y, uchar n,uchar *ptr)
& & for (i=0;i&n;i++)
& && &&&Disp1Char(x++,y,ptr);
& && &&&if (x == 0x0f)
& && && &&&x = 0;
& && &&&y ^= 1;
/*******************************************
函数名称:LocateXY
功& & 能:向液晶输入显示字符位置的坐标信息
参& & 数:x--位置的列坐标
& && && & y--位置的行坐标
返回值&&:无
********************************************/
void LocateXY(uchar x,uchar y)
& & temp = x&0x0f;
& & y &= 0x01;
& & if(y)& &temp |= 0x40;&&//如果在第2行
& & temp |= 0x80;
& & LcdWriteCommand(temp,1);
/*******************************************
函数名称:Disp1Char
功& & 能:在某个位置显示一个字符
参& & 数:x--位置的列坐标
& && && & y--位置的行坐标
& && && & data--显示的字符数据
返回值&&:无
********************************************/
void Disp1Char(uchar x,uchar y,uchar data)
& & LocateXY( x, y );& & & & & & & & & & & &
& & LcdWriteData( data );& & & & & & & &
/*******************************************
函数名称:LcdReset
功& & 能:对1602液晶模块进行复位操作
参& & 数:无
返回值&&:无
********************************************/
void LcdReset(void)
& & CtrlDir |= 0x07;& && && && && &&&//控制线端口设为输出状态
& & DataDir&&= 0xFF;& && && && && &&&//数据端口设为输出状态
& & LcdWriteCommand(0x38, 0);& & & && &&&//规定的复位操作
& & Delay5ms();
& & LcdWriteCommand(0x38, 0);& & & & & & & &
& & Delay5ms();
& & LcdWriteCommand(0x38, 0);
& & Delay5ms();
& & LcdWriteCommand(0x38, 1);& & & & & & & & //显示模式设置
& & LcdWriteCommand(0x08, 1);& & & & & & & & //显示关闭
& & LcdWriteCommand(0x01, 1);& & & && &&&//显示清屏
& & LcdWriteCommand(0x06, 1);& & & & & & & & //写字符时整体不移动
& & LcdWriteCommand(0x0c, 1);& & & & & & & & //显示开,不开游标,不闪烁
/*******************************************
函数名称:LcdWriteCommand
功& & 能:向液晶模块写入命令
参& & 数:cmd--命令,
& && && & chk--是否判忙的标志,1:判忙,0:不判
返回值&&:无
********************************************/
void LcdWriteCommand(uchar cmd,uchar chk)
& & if (chk) WaitForEnable();& &// 检测忙信号?
& & CLR_RS;& & & &
& & CLR_RW;
& & _NOP();
& & DataPort =& && && && & //将命令字写入数据端口
& & _NOP();& & & & & & & & & & & & & & & & & & & &
& & SET_EN;& && && && && && && &//产生使能脉冲信号
& & _NOP();
& & _NOP();
& & CLR_EN;& & & & & & & & & & & &
/*******************************************
函数名称:LcdWriteData
功& & 能:向液晶显示的当前地址写入显示数据
参& & 数:data--显示字符数据
返回值&&:无
********************************************/
void LcdWriteData( uchar data )
& & WaitForEnable();& && &&&//等待液晶不忙
& & SET_RS;
& & CLR_RW;
& & _NOP();
& & DataPort =& && &&&//将显示数据写入数据端口
& & _NOP();
& & SET_EN;& && && && && &&&//产生使能脉冲信号
& & _NOP();
& & _NOP();
& & CLR_EN;& & & & & & & &
/*******************************************
函数名称:WaitForEnable
功& & 能:等待1602液晶完成内部操作
参& & 数:无
返回值&&:无
********************************************/
void WaitForEnable(void)
& & P4DIR &= 0x00;&&//将P4口切换为输入状态
& & CLR_RS;
& & SET_RW;
& & _NOP();
& & SET_EN;
& & _NOP();
& & _NOP();
& & while((P4IN & Busy)!=0);&&//检测忙标志
& & CLR_EN;
& & P4DIR |= 0xFF;&&//将P4口切换为输出状态
& && && && && && && &&&
/*******************************************
函数名称:Delay5ms
功& & 能:延时约5ms
参& & 数:无
返回值&&:无
********************************************/
void Delay5ms(void)
& & uint i=40000;
& & while (i != 0)
& && &&&i--;
void DelayNus(uint n)
& & CCR0 =
& & TACTL |= MC_1;& && && &&&//增计数到CCR0
& & while(!(TACTL & BIT0));& &//等待
& & TACTL &= ~MC_1;& && && & //停止计数
& & TACTL &= ~BIT0;& && && & //清除中断标志
/*******************************************
函数名称:Init_18B20
功& & 能:对DS18B20进行复位操作
参& & 数:无
返回值&&:初始化状态标志:1--失败,0--成功
********************************************/
uchar Init_18B20(void)
& & uchar E
& & _DINT();
& & DelayNus(500);
& & DelayNus(55);
& & _NOP();
& & if(DQ_val)& && &
& && &&&Error = 1;& && && & //初始化失败
& && &&&Error = 0;& && && & //初始化成功
& & _EINT();
& & DelayNus(400);
& & return E
/*******************************************
函数名称:Write_18B20
功& & 能:向DS18B20写入一个字节的数据
参& & 数:wdata--写入的数据
返回值&&:无
********************************************/
void Write_18B20(uchar wdata)
& & _DINT();
& & for(i = 0; i & 8;i++)
& && &&&DQ0;
& && &&&DelayNus(6);& && && && &//延时6us
& && &&&if(wdata & 0X01)& & DQ1;
& && &&&else& && && && && & DQ0;
& && &&&wdata &&= 1;
& && &&&DelayNus(50);& && && &&&//延时50us
& && &&&DQ1;
& && &&&DelayNus(10);& && && &&&//延时10us
& & _EINT();
/*******************************************
函数名称:Read_18B20
功& & 能:从DS18B20读取一个字节的数据
参& & 数:无
返回值&&:读出的一个字节数据
********************************************/
uchar Read_18B20(void)
& & uchar temp = 0;
& & _DINT();
& & for(i = 0;i & 8;i++)
& && &&&temp &&= 1;
& && &&&DQ0;
& && &&&DelayNus(6);& && && && &//延时6us
& && &&&DQ1;
& && &&&DelayNus(8);& && && && &//延时9us
& && &&&DQ_
& && &&&_NOP();
& && &&&if(DQ_val)& &temp |= 0x80;
& && &&&DelayNus(45);& && && &&&//延时45us
& && &&&DQ_
& && &&&DQ1;
& && &&&DelayNus(10);& && && &&&//延时10us
& & _EINT();
& & return&&
void readrom()
&&uchar i,sn1,sn2,sn3,sn4,sn5,sn6,sn7,sn8;
&&uchar Init_18B20;
&&delay(1);
&&Write_18B20(0x33);
&&sn1=Read_18B20();
&&sn2=Read_18B20();
&&sn3=Read_18B20();
&&sn4=Read_18B20();
&&sn5=Read_18B20();
&&sn6=Read_18B20();
&&sn7=Read_18B20();
&&sn8=Read_18B20();
&&tab1[14]=sn1/16;tab1[15]=sn1%16;
&&tab1[12]=sn2/16;tab1[13]=sn2%16;
&&tab1[10]=sn3/16;tab1[11]=sn3%16;
&&tab1[8]=sn4/16;tab1[9]=sn4%16;
&&tab1[6]=sn5/16;tab1[7]=sn5%16;
&&tab1[4]=sn6/16;tab1[5]=sn6%16;
&&tab1[2]=sn7/16;tab1[2]=sn7%16;
&&tab1[0]=sn8/16;tab1[1]=sn8%16;
& &LocateXY(0,0);
&&while(tab!='\0')
& &LcdWriteData(tab[tab1]);
& &_nop_();_nop_();_nop_();_nop_();
void main()
&&delay(10);
&&LcdReset();
&&while(1)
& &readrom();
这是楼主自己整理的测DS18B20序列的程序&&测不到序列& & 请帮忙查看一下&&不胜感激
写0x33之前没有初始化18B20&
在线时间42 小时
TA的帖子TA的资源
回复 板凳 泡泡鱼会飞 的帖子
写0x33之前没有初始化18B20
初始化后也不行啊&
在线时间47 小时
芯币814 枚
TA的帖子TA的资源
回复 4楼 voodo 的帖子
初始化后也不行啊
顺序是这样:1初始化18B20;2写序列号检测指令;3读序列号;4显示
有问题的话就1个个查过,先看你液晶显示是否正常,这个最容易;然后看18B20各个驱动函数里面的时间对不对,比如初始化的时候拉低的时间,因为你可&
在线时间42 小时
TA的帖子TA的资源
回复 5楼 泡泡鱼会飞 的帖子
顺序是这样:1初始化18B20;2写序列号检测指令;3读序列号;4显示
有问题的话就1个个查过,先看你液晶显示是否正常,这个最容易;然后看18B20各个驱动函数里面的时间对不对,比如初始化的时候拉低的时间,因为你可能是用其他人的驱动,芯片时钟频率上不一致,导致时间不对,这个要算一下;然后再看各个驱动里面的动作对不对,这个可以对着DATASHEET看
在线时间1 小时
TA的帖子TA的资源
你好,你的那个多点的程序 现在 改好了吗?
我想请教几个问题
Powered by
逛了这许久,何不进去瞧瞧?DS18B20 基于8051的 的数字温度计源程序,可以精确到2个小数点位 SCM 单片机开发 182万源代码下载-
&文件名称: DS18B20
& & & & &&]
&&所属分类:
&&开发工具: C-C++
&&文件大小: 2 KB
&&上传时间:
&&下载次数: 74
&&提 供 者:
&详细说明:基于8051的DS18B20的数字温度计源程序,可以精确到2个小数点位-Based on the 8051 Digital Thermometer DS18B20 source can be accurate to two decimal places
文件列表(日期:~)(点击判断是否您需要的文件,如果是垃圾请在下面评价投诉):
&[]:一般,勉强可用&[]:一般,勉强可用
&近期下载过的用户:
&相关搜索:
&输入关键字,在本站182万海量源码库中尽情搜索:
&[] - 单片机温度控制系统
&[] - 本文介绍了一种基于ds18b20的数字温度计设计方案。方案利用AT89S52单片机控制DS18B20进行数据采集并由HS1602液晶显示模块显示结果,另外,采集结果可由RS-232-C接口送入计算机显示并存储。按键控制实现过界报警温度设定和实时监控,利用AT24C08芯片进行存储,实现温度测量存储与
&[] - 本演示程序提供了哈夫曼编码法的压缩和解压缩函数,并实现了对图象文件的压缩和解压缩
&[] - 《圣殿祭司的ASP.NET 2.0开发详解――使用C#》光盘,范例数据库
&[] - 这是18b20与1602显示器的结合,做为菜鸟的我编的很辛苦,但好歹编出来了,希望对大家有用
&[] - ds18b20+LCD1602+AT24C02智能温度控制系统
&[] - 这是用C写的读取温度传感器ds18b20,并在4个LED上动态显示温度的代码
&[] - 数字温度计设计任务书,详细的代码,详细的电路图,试验通过,可直接运行,硬件采用89S51单片机,18B20温度传感器
&[] - AT89S51控制ds18b20进行温度测量,用三段LED进行显示,伟福仿真成功
&[] - 关于ds18b20的毕业设计论文,其主要功能和指标如下:
1、利用温度传感器(DS18B20)测量某一点环境温度;
2、测量范围为-55℃~+99℃,精度为±0.5℃;
3、用4位数码管进行显示实际温度值显示;
4、手持端通过红外发射管发射测温信号;
5、测温端通过红外发射管发送到手持端利用STC89C52、DS18B20、LCD1602、AT24C02等元器件设计温度采集与显示系统。_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
文档贡献者贡献于
评价文档:
6页免费5页免费9页免费20页7下载券19页2下载券 8页1下载券3页2下载券30页2下载券3页免费20页2下载券
利用STC89C52、DS18B20、LCD1602、AT24C02等元器件设计温度采集与显示系统。|利​用​S​T​C9​C2​、​D​S8​B0​、​L​C​D62​、​A​T4​C2​等​元​器​件​设​计​温​度​采​集​与​显​示​系​统​。
把文档贴到Blog、BBS或个人站等:
普通尺寸(450*500pix)
较大尺寸(630*500pix)
大小:7.93KB
登录百度文库,专享文档复制特权,财富值每天免费拿!
你可能喜欢 下载
 收藏
该文档贡献者很忙,什么也没留下。
 下载此文档
正在努力加载中...
基于STC89C52、DS18B20、LCD1602、AT24C02温度警报器的单片机课程设计
下载积分:
内容提示:基于STC89C52、DS18B20、LCD1602、AT24C02温度警报器的单片机课程设计
文档格式:DOC|
浏览次数:9|
上传日期: 13:21:51|
文档星级:
该用户还上传了这些文档
官方公共微信
下载文档:基于STC89C52、DS18B20、LCD1602、AT24C02温度警报器的单片机课程设计.DOCThe current browser does not support JavaScript, please set your browser to allow JavaScript
File Name:&&&&
DS18B20+LCD1602+AT..
File Size:&&&&119.99 KB
Username:&&&&at89c58
&&&&&&&& If miss used, please
Upload Time:&&&& 00:00:00
You are not logged in!&&&&&&&Not sign up?
As a result of the anti-hotlinking system, browser prohibit cookies will not be able to download and slower, please use the download tool for high-speed download.
Tips:,Have you a QianNao cloud computer!
Disclaimer: QianNao
download content is uploaded, if it involves violation of your copyright or illegal content, pleaseDelete it immediately.
Account &:&&
Password&:&&
Remember me&&&&&
Not registered
&Sign Up&&
&Registry Complete

我要回帖

更多关于 ds18b20中文资料 的文章

 

随机推荐