资讯详情

温度测量DSB1820 lcd1602液晶显示

程序中要用到1602display.h头文件 可以在我的另一篇文章中取得: http://www.51hei.com/mcu/3292.html 为同一个文件 #include <reg52.h> #include <intrins.h> #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百科大全!

锐单商城 - 一站式电子元器件采购平台