锐单电子商城 , 一站式电子元器件采购平台!
  • 电话:400-990-0325

温度测量DSB1820 lcd1602液晶显示

时间:2024-04-29 05:07:09

程序中要用到1602display.h头文件 可以在我的另一篇文章中取得: http://www.51hei.com/mcu/3292.html 为同一个文件
#include
#include
#include "LCD1602display.h"
sbit DQ=P2^0; //ds18b20
uint wendu=0;
uchar num,num1;
uint temperature=0;
uchar code range[]="===MPERTURE===";
uchar code ASCII[]="0123456789.";
uchar code table0[]="ROME TEMP:00.0C ";
uchar code table1[]=" ERRO !!! ";
uchar temp[3]={0,0,0};
//********************延时
void delay1ms(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=114;y>0;y--);
}
//*************************初始化
bit init_DS18B20()
{
bit flag; //储存DS18B20是否存在的标志,flag=0,表示存在;flag=1,表示不存在
DQ=1;
_nop_(); //先拉高
DQ=0;
for(num=0;num<200;num++); //要求保持480~960us
DQ=1; //释放数据线
for(num=0;num<10;num++); //等待DS18B20响应
flag=DQ; // 响应
for(num=0;num<200;num++); //延时足够长时间(此延时函数为了防止收不到信号而进入死胡同)
DQ=1; //释放数据线
return (flag); //返回检测成功标志
}
//*******************************写温度数据
void DS18B20_WR_CHAR(uchar byte) // 先写低位
{
for(num1=0;num1<8;num1++)
{
DQ=1;
_nop_();
DQ=0; //将数据线从高拉低时即启动写时序
for(num=0;num<5;num++);//等待15us
DQ=byte&0x01;
for(num=0;num<15;num++); //延时约45us,DS18B20在约15~45us期间从数据线上采样
byte>>=1;
for(num=0;num<1;num++);//延时3us,两个写时序间至少需要1us的恢复期
}
DQ=1;//释放数据线
}
//**********************************读出温度数据
uchar DS18B20_RD_CHAR() //先读低位
{
uchar byte=0;
for(num1=0;num1<8;num1++)
{
DQ=1;
_nop_();
DQ=0; //给个低脉冲
_nop_();
DQ=1;
for(num=0;num<5;num++); //延时约15us,使主机在15us内采样
byte>>=1;
if(DQ==1)
byte|=0x80;
else
byte|=0x00;
for(num=0;num<1;num++);//延时3us,两个读时序之间必须有大于1us的恢复期
}
return (byte);
}
//*********************************温度计
void DS18B20_WENDU()
{
uchar temperaturel=0,temperatureh=0;
if(init_DS18B20()==0)
{
DS18B20_WR_CHAR(0xcc);
DS18B20_WR_CHAR(0x44);
delay1ms(1000);
if(init_DS18B20()==0)
{
DS18B20_WR_CHAR(0xcc);
DS18B20_WR_CHAR(0xBE);
_nop_();
temperaturel=DS18B20_RD_CHAR();
temperatureh=DS18B20_RD_CHAR();
temperature=(temperatureh*256+temperaturel)*0.625;
init_DS18B20();
}
//return (temperature);
}
}
//******************************温度显示
void display_DS18B20()
{
temp[2]=temperature/100%10;
temp[1]=temperature%100/10;
temp[0]=temperature%10;

DisplayListChar(0, 1, table0);
DisplayOneChar(10, 1, ASCII[ temp[2] ] );
DisplayOneChar(11, 1, ASCII[ temp[1] ] );
DisplayOneChar(12, 1, ASCII[10] );
DisplayOneChar(13, 1, ASCII[ temp[0] ] );
}
//*******************************主函数
main()
{
InitLCM();
DisplayListChar(0,0,range);
DisplayListChar(0,1,table0);
while(1)
{
if( init_DS18B20()==0)
{
DS18B20_WENDU();
display_DS18B20();
}
}
}


-电子元器件采购网(www.ruidan.com)是本土元器件目录分销商,采用“小批量、现货、样品”销售模式,致力于满足客户多型号、高质量、快速交付的采购需求。 自建高效智能仓储,拥有自营库存超过50,000种,提供一站式正品现货采购、个性化解决方案、选型替代等多元化服务。
锐单商城拥有海量元器件数据手册IC替代型号,打造电子元器件IC百科大全!

相关文章