收藏 分销(赏)

DS18B20程序实例.doc

上传人:xrp****65 文档编号:7718363 上传时间:2025-01-13 格式:DOC 页数:4 大小:40.50KB 下载积分:10 金币
下载 相关 举报
DS18B20程序实例.doc_第1页
第1页 / 共4页
DS18B20程序实例.doc_第2页
第2页 / 共4页


点击查看更多>>
资源描述
#include <reg51.h> sbit DQ = P3^3; //定义DS18B20端口DQ sbit BEEP=P3^7 ; unsigned char presence ; unsigned char code LEDData[ ] = {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8, 0x80,0x90,0xff}; unsigned char data temp_data[2] = {0x00,0x00}; unsigned char data display[5] = {0x00,0x00,0x00,0x00,0x00}; unsigned char code ditab[16] = {0x00,0x01,0x01,0x02,0x03,0x03,0x04,0x04, 0x05,0x06,0x06,0x07,0x08,0x08,0x09,0x09}; void beep(); sbit DIN = P0^7; //小数点 bit flash=0; //显示开关标记 /**********************************************************/ void Delay(unsigned int num)//延时函数 { while( --num ); } /**********************************************************/ Init_DS18B20(void)//初始化ds1820 { DQ = 1; //DQ复位 Delay(8); //稍做延时 DQ = 0; //单片机将DQ拉低 Delay(90); //精确延时 大于 480us DQ = 1; //拉高总线 Delay(8); presence = DQ; //如果=0则初始化成功 =1则初始化失败 Delay(100); DQ = 1; return(presence); //返回信号,0=presence,1= no presence } /**********************************************************/ ReadOneChar(void)//读一个字节 { unsigned char i = 0; unsigned char dat = 0; for (i = 8; i > 0; i--) { DQ = 0; // 给脉冲信号 dat >>= 1; DQ = 1; // 给脉冲信号 if(DQ) dat |= 0x80; Delay(4); } return (dat); } /**********************************************************/ WriteOneChar(unsigned char dat)//写一个字节 { unsigned char i = 0; for (i = 8; i > 0; i--) { DQ = 0; DQ = dat&0x01; Delay(5); DQ = 1; dat>>=1; } } /*********************************************************/ Read_Temperature(void)//读取温度 { Init_DS18B20(); //初始化 if(presence==1) { beep();flash=1;} //DS18B20不正常,蜂鸣器报警 else //初始化成功 { flash=0; //以下为DS18B20的基本操作时序 WriteOneChar(0xCC); // 跳过读序号列号的操作 WriteOneChar(0x44); // 启动温度转换 Init_DS18B20(); WriteOneChar(0xCC); //跳过读序号列号的操作 WriteOneChar(0xBE); //读取温度寄存器 temp_data[0] = ReadOneChar(); //温度低8位 temp_data[1] = ReadOneChar(); //温度高8位 } } /*********************************************************/ Disp_Temperature()//显示温度 { unsigned char n=0; display[4]=temp_data[0]&0x0f; display[0]=ditab[display[4]]; //查表得小数位的值 display[4]=((temp_data[0]&0xf0)>>4)|((temp_data[1]&0x0f)<<4); //整数位的值 display[3]=display[4]/100; //百位值 display[1]=display[4]%100; //十位加个位值 display[2]=display[1]/10; //十位值 display[1]=display[1]%10; //个位值 if(!display[3]) //高位为0,不显示 { display[3]=0x0a; if(!display[2]) //次高位为0,不显示 display[2]=0x0a; } P0 = 0xc6; //显示 C P2 = 0x7f; Delay(300); P0 = 0x9c; //显示 ° P2 = 0xbf; Delay(300); P0 =LEDData[display[0]] ; //显示小数位 P2 = 0xdf; Delay(300); P0 =LEDData[display[1]]; //显示个位 DIN = 0; P2 = 0xef; Delay(300); P0 =LEDData[display[2]]; //显示十位 P2 = 0xf7; Delay(300); P0 =LEDData[display[3]]; //显示百位 P2 = 0xfb; Delay(300); P2 = 0xff; //关闭显示 } /*********************************************************/ void beep() { unsigned char i; for (i=0;i<100;i++) { Delay(60); BEEP=!BEEP; //BEEP取反 } BEEP=1; //关闭蜂鸣器 } /*********************************************************/ void main(void) { while(1) { Read_Temperature(); if(flash==0) {Disp_Temperature();} else P2 = 0xff ; //DS18B20不正常,关闭显示 } } /*********************************************************/
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 教育专区 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服