基于AT89C51,DS18B20和1602液晶屏的温度传感器_第1页
基于AT89C51,DS18B20和1602液晶屏的温度传感器_第2页
基于AT89C51,DS18B20和1602液晶屏的温度传感器_第3页
全文预览已结束

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、基于 AT89C51 , DS18B20和 1602 液晶屏的温度传感器DS18B20 与 51 单片机的连接非常简单,只须把DS18B20 的数据线DQ 与 51 单片机的一根并口线连接即可,51单片机通过这根并口就能实现对DS18B20 的所有操作,这根并口线一般通过电阻接电源。DS18B20 的电源可采用外部电源供电,也可采用内部寄生电源供电。当外部电源供电时,VDD 接外部电源, GND接地地。当采用内部寄生电源供电时,VDD 与 GND 一起接地。另外,也可用多片DS18B20 连接组网形成多点测温系统,在多片连接时,DS18B20 必须采用外部电源供电方式。C 语言程序:/ 晶振为

2、 12MHz/ 测量的温度范围 -55 +99 ,温度精确到小数点后一位#include <REG52.H>#define uchar unsigned char#define uint unsigned intsbit DQ =P10;/sbit RS=P17;sbit RW=P16;sbit EN=P15;unionuchar c2;uint x;temp;uchar flag;/flag为温度值的正负号标志单元uint cc,cc2;/变量 cc 中保存读出的温度值float cc1;定义端口 , "1"表示为负值,"0"时表示为正值。

3、uchar buff113="temperature:"uchar buff26="+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()wc

4、51r(0x01);/清屏wc51r(0x38);/使用 8 位数据,显示两行,使用5*7的字型wc51r(0x0c);/显示器开,光标开,字符不闪烁wc51r(0x06);/字符不动,光标自动右移一格void delay(uint useconds)/ 延时程序for(;useconds>0;useconds-);uchar ow_reset(void)/ 复位uchar presence;DQ = 0;/ DQ低电平delay(50);/ 480msDQ = 1;/ DQ高电平delay(3);/等待presence = DQ;/ / presence信号delay(25);retu

5、rn(presence);/0允许,1禁止uchar read_byte(void)/ 从单总线上读取一个字节uchar i;uchar value = 0;for (i=8;i>0;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; i>0; i-)/一次写一字节DQ=0;DQ = val&0x01;delay(5);DQ=1;val=val/2;delay(

6、5);void Read_Temperature(void)/ 读取温度ow_reset();write_byte(0xCC);/跳过 ROMwrite_byte(0xBE);/读temp.c1=read_byte();精选文库2精选文库temp.c0=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 列for (k=0;k<13;k

7、+)/ 第一行显示提示信息"current temp is:" wc51ddr(buff1k);while(1)delay(10000);Read_Temperature();/ 读取双字节温度cc=temp.c0*256.0+temp.c1;if (temp.c0>0xf8) flag=1;cc=cc+1;else flag=0;cc1=cc*0.0625;/ 计算出温度值cc2=cc1*100;/ 放大 100 倍,放在整型变量中便于取数字buff21=cc2/1000+0x30;if ( buff21=0x30) buff21=0x20;/取出十位,转换成字符,如果十位是0 不显示。buff22=cc2/100-(cc2/1000)*10+0x30;/取出个位,转换成字符buff24=cc2/10-(cc2/100)*10+0x30;/取出小数点后一位,转换成字符if (flag=1) buff20

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论