采用LCD1602显示18B20数字温度计温度程序.docx

上传人:b****5 文档编号:8129771 上传时间:2023-01-29 格式:DOCX 页数:6 大小:15.21KB
下载 相关 举报
采用LCD1602显示18B20数字温度计温度程序.docx_第1页
第1页 / 共6页
采用LCD1602显示18B20数字温度计温度程序.docx_第2页
第2页 / 共6页
采用LCD1602显示18B20数字温度计温度程序.docx_第3页
第3页 / 共6页
采用LCD1602显示18B20数字温度计温度程序.docx_第4页
第4页 / 共6页
采用LCD1602显示18B20数字温度计温度程序.docx_第5页
第5页 / 共6页
点击查看更多>>
下载资源
资源描述

采用LCD1602显示18B20数字温度计温度程序.docx

《采用LCD1602显示18B20数字温度计温度程序.docx》由会员分享,可在线阅读,更多相关《采用LCD1602显示18B20数字温度计温度程序.docx(6页珍藏版)》请在冰豆网上搜索。

采用LCD1602显示18B20数字温度计温度程序.docx

采用LCD1602显示18B20数字温度计温度程序

采用LCD1602显示18B20数字温度计温度程序

端口说明

18B20数据引脚接P3.7

LCD引脚RS接P3.0,RW接P3.1,EN接P3.2,Data0~7接P2口

温度精确到1为小数

#include

#defineucharunsignedchar

#defineuintunsignedint

sbitDQ=P3^7;//ds18b20与单片机连接口

sbitRS=P3^0;

sbitRW=P3^1;

sbitEN=P3^2;

unsignedcharcodestr1[]={"temperature:

"};

unsignedcharcodestr2[]={""};

uchardatadisdata[5];

uinttvalue;//温度值

uchartflag;//温度正负标志

/*************************lcd1602程序**************************/voiddelay1ms(unsignedintms)//延时1毫秒(不够精确的)

{unsignedinti,j;

for(i=0;i

for(j=0;j<100;j++);

}

voidwr_com(unsignedcharcom)//写指令//

{delay1ms

(1);

RS=0;

RW=0;

EN=0;

P2=com;

delay1ms

(1);

EN=1;

delay1ms

(1);

EN=0;

}

voidwr_dat(unsignedchardat)//写数据//

{delay1ms

(1);;

RS=1;

RW=0;

EN=0;

P2=dat;

delay1ms

(1);

EN=1;

delay1ms

(1);

EN=0;

}

voidlcd_init()//初始化设置//

{delay1ms(15);

wr_com(0x38);delay1ms(5);

wr_com(0x08);delay1ms(5);

wr_com(0x01);delay1ms(5);

wr_com(0x06);delay1ms(5);

wr_com(0x0c);delay1ms(5);

}

voiddisplay(unsignedchar*p)//显示//

{

while(*p!

='\0')

{

wr_dat(*p);

p++;

delay1ms

(1);

}

}

init_play()//初始化显示

{lcd_init();

wr_com(0x80);

display(str1);

wr_com(0xc0);

display(str2);

}

/**************************ds1820程序*********************************/voiddelay_18B20(unsignedinti)//延时1微秒

{

while(i--);

}

voidds1820rst()/*ds1820复位*/

{unsignedcharx=0;

DQ=1;//DQ复位

delay_18B20(4);//延时

DQ=0;//DQ拉低

delay_18B20(100);//精确延时大于480us

DQ=1;//拉高

delay_18B20(40);

}

uchards1820rd()/*读数据*/

{unsignedchari=0;

unsignedchardat=0;

for(i=8;i>0;i--)

{DQ=0;//给脉冲信号

dat>>=1;

DQ=1;//给脉冲信号

if(DQ)

dat|=0x80;

delay_18B20(10);

}

return(dat);

}

voidds1820wr(ucharwdata)/*写数据*/

{unsignedchari=0;

for(i=8;i>0;i--)

{DQ=0;

DQ=wdata&0x01;

delay_18B20(10);

DQ=1;

wdata>>=1;

}

}

read_temp()/*读取温度值并转换*/

{uchara,b;

ds1820rst();

ds1820wr(0xcc);//*跳过读序列号*/

ds1820wr(0x44);//*启动温度转换*/

ds1820rst();

ds1820wr(0xcc);//*跳过读序列号*/

ds1820wr(0xbe);//*读取温度*/

a=ds1820rd();

b=ds1820rd();

tvalue=b;

tvalue<<=8;

tvalue=tvalue|a;

if(tvalue<0x0fff)

tflag=0;

else

{tvalue=~tvalue+1;

tflag=1;

}

tvalue=tvalue*(0.625);//温度值扩大10倍,精确到1位小数return(tvalue);

}

/*******************************************************************/voidds1820disp()//温度值显示

{ucharflagdat;

disdata[0]=tvalue/1000+0x30;//百位数

disdata[1]=tvalue%1000/100+0x30;//十位数

disdata[2]=tvalue%100/10+0x30;//个位数

disdata[3]=tvalue%10+0x30;//小数位

if(tflag==0)

flagdat=0x20;//正温度不显示符号

else

flagdat=0x2d;//负温度显示负号:

-

if(disdata[0]==0x30)

{disdata[0]=0x20;//如果百位为0,不显示

if(disdata[1]==0x30)

{disdata[1]=0x20;//如果百位为0,十位为0也不显示

}

}

wr_com(0xc0);

wr_dat(flagdat);//显示符号位

wr_com(0xc1);

wr_dat(disdata[0]);//显示百位

wr_com(0xc2);

wr_dat(disdata[1]);//显示十位

wr_com(0xc3);

wr_dat(disdata[2]);//显示个位

wr_com(0xc4);

wr_dat(0x2e);//显示小数点

wr_com(0xc5);

wr_dat(disdata[3]);//显示小数位

}

/********************主程序***********************************/

voidmain()

{init_play();//初始化显示

while

(1)

{read_temp();//读取温度

ds1820disp();//显示

}

}

 

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工作范文 > 行政公文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1