- 1、本文档共3页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
基于 AT89C51 ,DS18B20 和 1602 液晶屏的温度传感器
DS18B20 与 51 单片机的连接非常简单,只须把 DS18B20 的数据线 DQ 与 51 单片机的一根并口线连接即可, 51
单片机通过这根并口就能实现对 DS18B20 的所有操作,这根并口线一般通过电阻接电源。
DS18B20 的电源可采用外部电源供电, 也可采用内部寄生电源供电。 当外部电源供电时, VDD 接外部电源, GND
接地地。当采用内部寄生电源供电时, VDD 与 GND 一起接地。另外,也可用多片 DS18B20 连接组网形成多点测温系
统,在多片连接时, DS18B20 必须采用外部电源供电方式。
C 语言程序:
// 晶振为 12MHz
// 测量的温度范围 -55 ℃~+99 ℃,温度精确到小数点后一位
#include REG52.H
#define uchar unsigned char
#define uint unsigned int
sbit DQ =P1^0; // 定义端口
sbit RS=P1^7;
sbit RW=P1^6;
sbit EN=P1^5;
union{
uchar c[2];
uint x;
}temp;
uchar flag;//flag 为温度值的正负号标志单元 , 1 表示为负值 ,0 时表示为正值。
uint cc,cc2;// 变量 cc 中保存读出的温度值
float cc1;
uchar buff1[13]={temperature:};
uchar buff2[6]={+00.0};
// 检查忙函数
void fbusy()
{
P2 = 0xff;
RS = 0;
RW = 1;
EN = 1;
EN = 0;
while((P2 0x80))
{
EN = 0;
EN = 1;
}
}
// 写命令函数
void wc51r(uchar j)
{
fbusy();
EN = 0;
RS = 0;
RW = 0;
EN = 1;
P2 = j;
EN = 0;
}
// 写数据函数
void wc51ddr(uchar j)
{
fbusy(); // 读状态;
EN = 0;
RS = 1;
RW = 0;
EN = 1;
P2 = j;
EN = 0;
}
void init()
{
wc51r(0x01); // 清屏
wc51r(0x38); // 使用 8 位数据,显示两行,使用 5*7 的字型
wc51r(0x0c); // 显示器开,光标开,字符不闪烁
wc51r(0x06); // 字符不动,光标自动右移一格
}
void delay(uint useconds) // 延时程序
{
for(;useconds0;useconds--);
}
uchar ow_reset(void) // 复位
{
uchar presence;
DQ = 0; // DQ 低电平
delay(50); // 480ms
DQ = 1; // DQ 高电平
delay(3); // 等待
presence = DQ; / / presence 信号
delay(25);
return(presence); // 0 允许, 1 禁止
}
uchar read_byte(void) // 从单总线上读取一个字节
{
uchar i;
uchar value = 0;
for (i=8;i0;i--)
{
value=1;
DQ = 0;
DQ = 1;
delay(1);
if(DQ)value|=0x80;
delay(6);
}
return(value);
}
void write_byte(uchar val) // 向单总线上写一个字节
{
uchar i;
for (i=8; i0; i--) // 一次写一字节
{
DQ = 0;
DQ = val0x01;
delay(5);
DQ = 1;
val=val/2;
}
delay(5);
}
void Read_Temperature(void) // 读取温度
{
ow_reset();
write_byte(0xCC); // 跳过 ROM
write_byte(0xBE); // 读
temp.c[1]=read_byte();
temp.c[0]=read_byte();
ow_reset();
write_byte(0xCC);
write_byte(0x44); // 开始
return;
}
void main() // 主程序
{
uchar k;
delay(10);
EA=0;
flag=0;
init();
wc51r(0x80); // 写入显示缓冲区起始地址为第 1 行第 1 列
您可能关注的文档
- 电阻应变式称重传感器设计.docx
- 电阻应变式压力传感器设计.docx
- 动量定理、动量守恒在电磁感应中导轨与导体棒地应用—解析版.docx
- 抖音蓝V认证微信营销话术(20200807092727).docx
- 法拉第电磁感应定律综合练习题.docx
- 高考物理大题突破--电磁感应(附答案).docx
- 高考物理电磁感应双杆模型(答案).docx
- 高强螺栓扭矩值.docx
- 高中电磁学公式总结.docx
- 高中物理概念电磁学.docx
- 电气工程与自动化专业英语(第3版)课件:电力电子技术.pptx
- 2004-2018年南京航空航天大学考研《627公共管理学》历年真题合集(含部分答案).pdf
- 2011-2018年南京航空航天大学《813无机化学》考研历年真题合集.pdf
- 2004-2014年南京航空航天大学考研《850社会研究方法》历年真题合集(含部分答案).pdf
- 2012-2018年南京航空航天大学考研《834数据库原理及应用》历年真题合集.pdf
- 一级建造师《法律法规》重点知识总结.pdf
- 2011-2018年南京航空航天大学考研《815理论力学》历年真题汇编.pdf
- 2009-2018年南京航空航天大学《811普通物理》考研真题合集.pdf
- 2010-2018年南京航空航天大学《919电路》考研历年真题合集.pdf
- 2011-2018年南京航空航天大学《630物理化学》考研历年真题汇编.pdf
文档评论(0)