DS18B20 测温+LCD1602显示.doc
上传人:yy****24 上传时间:2024-09-10 格式:DOC 页数:6 大小:21KB 金币:16 举报 版权申诉
预览加载中,请您耐心等待几秒...

DS18B20 测温+LCD1602显示.doc

DS18B20测温+LCD1602显示.doc

预览

在线预览结束,喜欢就下载吧,查找使用更方便

16 金币

下载此文档

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

战龙啸野/*DS18B20测温+LCD1602显示*/#include<intrins.h>#include"lcd1602.h"#defineuintunsignedint#defineucharunsignedcharsbitbuz=P2^0;sbitDQ=P3^2;//温度输入口#definenops();{_nop_();_nop_();_nop_();_nop_();}//定义空指令4usvoiddelay(uintn)//11us{while(n--);}/*18B20复位函数*/voidDS18b20_reset(void){bitflag=1;while(flag){while(flag){DQ=1;delay(1);DQ=0;delay(50);//550usDQ=1;delay(6);//66usflag=DQ;}delay(45);//延时500usflag=~DQ;}DQ=1;}/*18B20写1个字节函数*向1-WIRE总线上写一个字节*/voidwrite_byte(ucharval){uchari;for(i=0;i<8;i++){DQ=1;_nop_();DQ=0;nops();//4usDQ=val&0x01;//最低位移出delay(6);//66usval>>=1;//右移一位}DQ=1;delay(1);}/*18B20读1个字节函数从1-WIRE总线上读取一个字节*/ucharread_byte(void){uchari,value=0;for(i=0;i<8;i++){DQ=1;_nop_();value>>=1;DQ=0;nops();//4usDQ=1;nops();//4usif(DQ)value|=0x80;delay(6);//66us}DQ=1;return(value);}/*启动温度转换*/voidstart_temp_sensor(void){DS18b20_reset();write_byte(0xCC);//发SkipROM命令write_byte(0x44);//发转换命令}/*读出温度*/intread_temp(void){uchartemp_data[2];//读出温度暂放inttemp;DS18b20_reset();//复位write_byte(0xCC);//发SkipROM命令write_byte(0xBE);//发读命令temp_data[0]=read_byte();//温度低8位temp_data[1]=read_byte();//温度高8位temp=temp_data[1];temp<<=8;temp|=temp_data[0];temp>>=4;returntemp;}/*将数据转换成ASC码并通过1602显示*/voidSend1602_dat(uchardat){write_1602dat(dat/10%10+'0');write_1602dat(dat%10+'0');}main(){inttemp;ucharalmtemp=31;lcd1602_init();buz=0;while(1){start_temp_sensor();delay_ms(1000);//延时1秒temp=read_temp();if(temp>=almtemp)buz=1;elsebuz=0;if(temp<0){write_1602com(er);write_1602dat('-');temp=-temp;}write_1602com(er+2);Send1602_dat(temp);delay_ms(3);}}