设为首页
收藏本站
找回密码
开启辅助访问
登录
注册
只需一步,快速开始
首页
BBS
在线充值
搜索
工控币获得方法
联系方式
搜索
搜索
本版
帖子
用户
工控论坛
»
首页
›
电子技术
›
EDA设计仿真
›
8路DS18B20温度采集串口发送数据带仿真程序 ...
返回列表
发新帖
8路DS18B20温度采集串口发送数据带仿真程序
[复制链接]
9
|
0
|
2020-1-31 23:55:57
|
显示全部楼层
|
阅读模式
采用51单片机8路温度采集
完整代码和仿真文件:
8路温度采集,串口发送温度数据.zip
(169.7 KB, 售价: 1 工控币)
2020-1-31 23:53 上传
点击文件名下载附件
部分代码
/序列号匹配
void MatchROM(const unsigned char *pMatchData)
{
unsigned char i;
Initialization();
WriteByte(0x55);
for (i = 0; i < 8; i++) WriteByte(*(pMatchData + i));
}
//得到64位ROM序列(在P1口显示,必须与Proteus联调且在单步调试下才能得到)
/*void GetROMSequence()
{
unsigned char i;
Initialization();
WriteByte(READ_ROM);
for (i = 0; i < 8; i++)
P1 = ReadByte();
}*/
//读取温度值
bit ReadTemperature(TEMPDATA * pTempData)
{
unsigned int iTempDataH;
unsigned char btDot, iTempDataL;
static unsigned char i = 0;
pTempData->btNegative = 0; //为0温度为正
i++;
if (i == 9) i = 1;
Initialization();
WriteByte(0xCC); //跳过ROM匹配
WriteByte(0x44); //启动转换
Delay1ms(65);
//Initialization();
//多个芯片的时候用MatchROM(ROMData)换掉WriteByte(SKIP_ROM)
switch (i)
{
case 1 : MatchROM(ROMData1); break; //匹配1
case 2 : MatchROM(ROMData2); break; //匹配2
case 3 : MatchROM(ROMData3); break; //匹配3
case 4 : MatchROM(ROMData4); break; //匹配4
case 5 : MatchROM(ROMData5); break; //匹配5
case 6 : MatchROM(ROMData6); break; //匹配6
case 7 : MatchROM(ROMData7); break; //匹配7
case 8 : MatchROM(ROMData8); break; //匹配8
}
//WriteByte(SKIP_ROM); //跳过ROM匹配(单个芯片时用这句换掉上面的switch)
WriteByte(0xBE); //读数据
iTempDataL = ReadByte();
iTempDataH = ReadByte();
iTempDataH <<= 8;
iTempDataH |= iTempDataL;
if (iTempDataH & 0x8000)
{
pTempData->btNegative = 1;
iTempDataH = ~iTempDataH + 1; //负数求补
}
//为了省去浮点运算带来的开销,而采用整数和小数部分分开处理的方法(没有四舍五入)
btDot = (unsigned char)(iTempDataH & 0x000F); //得到小数部分
iTempDataH >>= 4; //得到整数部分
btDot *= 5; //btDot*10/16得到转换后的小数数据
btDot >>= 3;
//数据处理
pTempData->btThird = (unsigned char)iTempDataH / 100;
pTempData->btSecond = (unsigned char)iTempDataH % 100 / 10;
pTempData->btFirst = (unsigned char)iTempDataH % 10;
pTempData->btDecimal = btDot;
return 1;
}
//数据显示处理子程序
void DataProcess()
{
ReadTemperature(&m_TempData);
if (m_TempData.btNegative) DisplayOne(1, 6, '-', 0);
else DisplayOne(1, 6, m_TempData.btThird, 1);
DisplayOne(1, 7, m_TempData.btSecond, 1);
DisplayOne(1, 8, m_TempData.btFirst, 1);
DisplayOne(1, 10, m_TempData.btDecimal, 1);
}
//温度数据串口发送程序
void tempdatalist()
{ u8 i;
for(i=0;i<8;i++)
{
ReadTemperature(&m_TempData);
if (m_TempData.btNegative)
{ DisplayOne(1, 6, '-', 0);
zhenfu[i]='-';
temp[i]=( m_TempData.btThird*1000+m_TempData.btSecond*100+m_TempData.btFirst*10+m_TempData.btDecimal);
}
else {
DisplayOne(1, 6, m_TempData.btThird, 1);
zhenfu[i]='+';
DisplayOne(1, 7, m_TempData.btSecond, 1);
DisplayOne(1, 8, m_TempData.btFirst, 1);
DisplayOne(1, 10, m_TempData.btDecimal, 1);
temp[i]=( m_TempData.btThird*1000+m_TempData.btSecond*100+m_TempData.btFirst*10+m_TempData.btDecimal);
Delay1ms(1000);
}
}
for(i=0;i<8;i++)
{
UART_SendOneByte(zhenfu[i]);
UART_SendNum(temp[i]);
UART_SendString(":");
}
UART_SendString("\r\n");
}
复制代码
温度
,
串口
,
DS18B20
,
proteus
,
51单片机
相关帖子
•
基于labview的串口助手,包含源代码。具有发送和接受功能
•
西门子1200plc与RKC温控模组com-ml profinet通讯gsd 程序 文档
•
基于WPF开发的串口调试工具源码
•
基于51单片机数字电压表 程序 原理图 pcb 仿真文件 论文
•
51单片机采集温度通过串口发送到labview上位机采集曲线显示
•
基于LABVIEW温度越限报警程序设计
•
基于labview的串口通信的上位机控件软件
•
labview串口通讯入门教程
回复
使用道具
举报
返回列表
发新帖
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
|
注册
本版积分规则
发表回复
回帖后跳转到最后一页
coolice
436
主题
443
帖子
366
积分
初级会员
初级会员, 积分 366, 距离下一级还需 134 积分
初级会员, 积分 366, 距离下一级还需 134 积分
工控币
366
加好友
发消息
回复楼主
返回列表
电子技术综合讨论
单片机嵌入式
EDA设计仿真
STM32/8
51单片机
上位机开发及系统管理
Labview
Multisim仿真
图文推荐
西门子1200plc与RKC温控模组com-ml profinet通讯gsd 程序 文档
2021-02-24
PLC-LAB-非标自动化2D建模仿真软件 中文说明和操作演示视频
2021-02-15
组态王机械手加反应罐监控系统 工程源文件与设计文档
2021-02-04
太阳能翻板追日控制 采用s7-200plc与光照度模块modbus通信
2021-02-01
基于51单片机数字电压表 程序 原理图 pcb 仿真文件 论文
2021-01-26
热门排行
1
付积分后东西下载不了!!!!!
2
音频功率放大器Multisim仿真电路设计
3
数字电路拔河机Multisim仿真设计
4
函数信号发生器Multisim仿真 可调频 幅值(
5
放大器Multisim仿真 放大倍数可调20-200倍
6
克拉波振荡器Multisim仿真电路图
7
基于Multisim的十字路口交通管理控制器的设
8
74LS90简易电子钟的Multisim仿真设计与实现
9
欧姆龙西门子松下台达三菱施耐德各种PLC编
10
EcoStruxure Control Expert V15.0下载