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

资源简介

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个文件信息

评论

共有 条评论