资源简介
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实验模可变计数器 设计程序,已通过
相关资源
- protues仿真 数字时钟的课程设计
- 计算机操作系统课程设计
- 机床主轴系统课程设计
- 安卓课程表源代码
- 学生成绩管理系统+数据库课程设计
- 基于51单片机的ds18b20的proteus仿真
- 计算机网络课程设计_基于思科的简单
- 温度传感器数据在数码管上显示
- labview电梯小程序课程设计
- 传染病模型的数学建模课程设计
- 五子棋,C语言代码,dos环境支持鼠
- 汇编语言的饮水机控制程序
- 二级减速器课程设计含装配图,零件
- DS18B20 资料原理图+test code
- 商务智能课程聚类算法的期末报告和
- 自动机向正规文法的转换
- 数据库课程设计《工资管理系统》
- CPLD FPGA 课程设计报告
- 查询至少学习了1号课程和2号课程的学
- 计算机网络课程设计--校园局域网的规
- 数据结构课程设计--统计成绩
- 通信电子线路 调幅解调混频电路的课
- 行人过街红绿灯的手动控制 课程设计
- 操作系统课程设计之存储管理—动态
- 偏微分数值解课程设计(有设计报告
- 操作系统课程设计报告-多级反馈队列
- 微型计算机课程设计之电子表的设计
- C 程序设计学生宿舍管理系统
- 数字秒表 课程设计 0:00:00~9分59秒99毫
- 交通灯课程设计报告.doc
评论
共有 条评论