资源简介
DS18B20 多点温度测量 用proteus仿真 课程设计 单片机 51。我设计的是3个温度器,程序课改成8个温度。只需在仿真图上加上即可

代码片段和文件信息
//头文件包含
#include
#include
#include “DS18B20.H“
//引脚定义
sbit DQ = P2^7; //数据线端口
//DS18B20序列号通过调用GetROMSequence()函数在P1口读出(读8次)
const unsigned char code ROMData1[8] = {0x28 0x33 0xC5 0xB8 0x00 0x00 0x00 0xD7}; //U1
const unsigned char code ROMData2[8] = {0x28 0x30 0xC5 0xB8 0x00 0x00 0x00 0x8E}; //U2
const unsigned char code ROMData3[8] = {0x28 0x31 0xC5 0xB8 0x00 0x00 0x00 0xB9}; //U3
//const unsigned char code ROMData4[8] = {0x28 0x32 0xC5 0xB8 0x00 0x00 0x00 0xE0}; //U4
//const unsigned char code ROMData5[8] = {0x28 0x34 0xC5 0xB8 0x00 0x00 0x00 0x52}; //U5
//const unsigned char code ROMData6[8] = {0x28 0x35 0xC5 0xB8 0x00 0x00 0x00 0x65}; //U6
//const unsigned char code ROMData7[8] = {0x28 0x36 0xC5 0xB8 0x00 0x00 0x00 0x3C}; //U7
//const unsigned char code ROMData8[8] = {0x28 0x37 0xC5 0xB8 0x00 0x00 0x00 0x0B}; //U8
//延时16us子函数
void Delay16us()
{
unsigned char a;
for (a = 0; a < 4; a++);
}
//延时60us子函数
void Delay60us()
{
unsigned char a;
for (a = 0; a < 18; a++);
}
//延时480us子函数
void Delay480us()
{
unsigned char a;
for (a = 0; a < 158; a++);
}
//延时240us子函数
void Delay240us()
{
unsigned char a;
for (a = 0; a < 78; a++);
}
//延时500ms子函数
void Delay500ms()
{
unsigned char a b c;
for (a = 0; a < 250; a++)
for (b = 0; b < 3; b++)
for (c = 0; c < 220; c++);
}
//芯片初始化
void Initialization()
{
while(1)
{
DQ = 0;
Delay480us(); //延时480us
DQ = 1;
Delay60us(); //延时60us
if(!DQ) //收到ds18b20的应答信号
{
DQ = 1;
Delay240us(); //延时240us
break;
}
}
}
//写一个字节(从低位开始写)
void WriteByte(unsigned char btData)
{
unsigned char i btBuffer;
for (i = 0; i < 8; i++)
{
btBuffer = btData >> i;
if (btBuffer & 1)
{
DQ = 0;
_nop_();
_nop_();
DQ = 1;
Delay60us();
}
else
{
DQ = 0;
Delay60us();
DQ = 1;
}
}
}
//读一个字节(从低位开始读)
unsigned char ReadByte()
{
unsigned char i btDest;
for (i = 0; i < 8; i++)
{
btDest >>= 1;
DQ = 0;
_nop_();
_nop_();
DQ = 1;
Delay16us();
if (DQ) btDest |= 0x80;
Delay60us();
}
return btDest;
}
//序列号匹配
void MatchROM(const unsigned char *pMatchData)
{
unsigned char i;
Initialization();
WriteByte(MATCH_ROM);
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 == 4) i = 1;
Initialization();
WriteByte(SKIP_ROM); //跳过ROM匹配
WriteByte(TEMP_SWITCH); //启动转换
Delay500ms(); //调用一次就行
Delay500
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 457 2009-05-30 19:05 设计1\Keil\Include\1602.H
文件 1692 2009-10-31 11:10 设计1\Keil\Include\DS18B20.H
文件 2385 2014-12-02 21:43 设计1\Keil\Keil.Opt
文件 2325 2014-12-02 21:43 设计1\Keil\Keil.Uv2
....... 2358 2009-11-22 16:11 设计1\Keil\Keil_Opt.Bak
....... 2192 2009-10-31 11:10 设计1\Keil\Keil_Uv2.Bak
文件 849 2014-12-02 21:43 设计1\Keil\LST\1602驱动.lst
文件 864 2014-12-02 21:43 设计1\Keil\LST\DS18B20驱动.lst
文件 11760 2009-11-22 16:02 设计1\Keil\LST\STARTUP.lst
文件 839 2014-12-02 21:43 设计1\Keil\LST\主函数.lst
文件 20837 2014-12-02 21:43 设计1\Keil\LST\多点温度测量.m51
文件 1380 2009-07-25 15:01 设计1\Keil\Source\1602驱动.C
文件 4509 2014-12-02 21:27 设计1\Keil\Source\DS18B20驱动.c
文件 5115 2002-04-16 15:32 设计1\Keil\Source\STARTUP.A51
文件 540 2014-12-02 21:43 设计1\Keil\Source\主函数.c
文件 6470 2014-12-02 21:43 设计1\Keil\Target\1602驱动.obj
文件 11335 2014-12-02 21:43 设计1\Keil\Target\DS18B20驱动.obj
文件 126 2014-12-02 21:43 设计1\Keil\Target\DS18B20驱动.__i
文件 826 2009-11-22 16:02 设计1\Keil\Target\STARTUP.obj
文件 4616 2014-12-02 21:43 设计1\Keil\Target\主函数.obj
文件 20226 2014-12-02 21:43 设计1\Keil\Target\多点温度测量
文件 3091 2014-12-02 21:43 设计1\Keil\Target\多点温度测量.hex
文件 164 2014-12-02 21:43 设计1\Keil\Target\多点温度测量.lnp
文件 3010 2014-12-02 21:43 设计1\Keil\Target\多点温度测量.plg
文件 124343 2009-10-19 10:17 设计1\Last Loaded 多点温度测量.DBK
文件 119919 2014-12-02 21:30 设计1\多点温度测量.DSN
文件 3030 2014-12-09 10:45 设计1\多点温度测量.PWI
目录 0 2014-12-02 21:01 设计1\Keil\Include
目录 0 2014-12-02 21:43 设计1\Keil\LST
目录 0 2014-12-02 21:01 设计1\Keil\Source
............此处省略6个文件信息
- 上一篇:50MHz逐步分频器VHDL代码
- 下一篇:EDA实验模可变计数器 设计程序,已通过
相关资源
- FTP课程设计(服务端+客户端)
- railroad铁路CAD生成
- ISE_14.7_license.lic
- ANSYS LS-DYNA
- phong模型(简单光照模型)
- 编译原理实验工具及参考源码(lex&
- Python全栈学习笔记面向对象大作业:
- 高频电子线路课程设计报告收音机
- 直流稳压电源的课程设计、安装及调
- EDA课程设计_密码锁
- 教室管理系统.rar
- 单片机课程设计 篮球计分器
- 数据结构课程设计 6 1 彩票系统
- 单片机与温度传感器DS18B20的程序设计
- 毕业论文之温度传感器DS18B20(源码
- 端口扫描课程设计详细的报告
- 步进电机课程设计(个人设计)
- 校园网络规划与设计课程设计
- stm32 ds18b20 温度传感器 测试通过
- 编译原理课程设计:词法语法编译器
-
simuli
nk 课程设计 qpsk - 武汉理工大学 单片机课程设计 16*16点
- 数据库VFP课程设计
- 51单片机读取温度数据存储到SD卡中并
- 分页系统模拟实验 操作系统 课程设
- 课程作业:模拟仓库管理系统
- 模拟段页式虚拟存储管理中地址转换
- STM32F103 DS18B20 V3.5.0固件库驱动程序工
- 硬件课程设计—流水灯(quartus软件
- 超市收银系统eclipse access大学课程设计
评论
共有 条评论