ds18b20c语言显示小数位,DS18B20多点测温(读序列,匹配序列,51单片机C程序,1602显示)...

DS18B20多点测温(读序列,匹配序列,51 C程序,1602显示)

程序一:单个读序列号。程序二,匹配并且读两个DS18B20,当然,读多个与读两个基本原理一样,只要加上其序列号等即可。本程序所有显示都是用LCD1602显示。

程序一:度序列号,并用1602显示,1602从左到右分别是低到高位。

#include

#define uchar unsigned char

#define uint unsigned int

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

sbit RS=P2^4;

sbit RW=P2^5;

sbit EN=P2^6;

uchar fCode[8];//序列号

/*************************lcd1602程序**************************/

void delay1ms(unsigned int ms)//延时1毫秒(不够精确的)

{unsigned int i,j;

for(i=0;i

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

}

void wr_com(unsigned char com)  //写指令

{ delay1ms(1);

RS=0;

RW=0;

EN=0;

P0=com;

delay1ms(1);

EN=1;

delay1ms(1);

EN=0;

}

void wr_dat(unsigned char dat)  //写数据

{ delay1ms(1);;

RS=1;

RW=0;

EN=0;

P0=dat;

delay1ms(1);

EN=1;

delay1ms(1);

EN=0;

}

void lcd_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);

}

/******************************ds1820 *********************/

void delay_18B20(unsigned int i)//延时1微秒

{

while(i--);

}

void ds1820rst() //ds1820复位

{ uchar x=0;

DQ = 1;          //DQ复位,总线拉高

delay_18B20(4); //延时

DQ = 0;          //DQ拉低

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

DQ = 1;          //拉高

delay_18B20(40);

}

uchar ds1820rd()  //读数据

{ uchar i=0;

uchar dat = 0;

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

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

dat>>=1;

DQ = 1; //给脉冲信号

if(DQ)

dat|=0x80;

delay_18B20(10);

}

return(dat);

}

void ds1820wr(uchar wdata)//写数据

{uchar i=0;

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

{ DQ = 0;

DQ = wdata&0x01;

delay_18B20(10);

DQ = 1;

wdata>>=1;

}

}

void DispCode()//把序列号显示出来

{

unsigned char i,temp;

ds1820rst();

ds1820wr(0x33);//读序列号

for (i=0;i<8;i++)

{

fCode[ i]=ds1820rd();//64位

}

wr_com(0x80+0x40);

for (i=0;i<8;i++)

{

temp = fCode[ i]>>4; //显示高四位

if (temp<10)

wr_dat(temp + 0x30);//转化为0~9的字符显示

else

wr_dat(temp + 0x37);//将值转化为大写字母显示

temp = fCode[ i]&0x0f;//显示低四位

if (temp<10)

wr_dat(temp+ 0x30);

else

wr_dat(temp + 0x37);

}

}

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

void main()

{

init_init();//初始化显示

DispCode();          //系列号显示

delay1ms(1000);

while(1);

}

程序二:匹配序列号,并读温度。

#include

#include

#define uchar unsigned char

#define uint unsigned int

sbit RS=P2^4;

sbit RW=P2^5;

sbit EN=P2^6;

sbit DQ=P3^7;

uchar code str1[]={0x28,0x08,0xA7,0xBA,0x02,0x00,0x00,0x18};        //ROM 1

uchar code str2[]={0x28,0x0C,0xBA,0xBA,0x02,0x00,0x00,0x54};        //ROM2

uchar code table[8]={0x0c,0x12,0x12,0x0c,0x00,0x00,0x00,0x00};        // 摄氏温度符号

uchar data disdata[5];

uint tvalue;//温度值

uchar tflag;//温度正负标志

/*************************lcd1602程序**************************/

void delay1ms(uint ms)//延时1毫秒(不够精确的)

{  uint i,j;

for(i=0;i

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

}

void wr_com(uchar com)  //写指令

{ delay1ms(1);

RS=0;

RW=0;

EN=0;

P0=com;

delay1ms(1);

EN=1;

delay1ms(1);

EN=0;

}

void wr_dat(uchar dat)//写数据//

{ delay1ms(1);;

RS=1;

RW=0;

EN=0;

P0=dat;

delay1ms(1);

EN=1;

delay1ms(1);

EN=0;

}

void wr_new()                   //写新字符

{

uchar i;

wr_com(0x40);

for(i=0;i<8;i++)

{

wr_dat(table[ i]);

}

}

void lcd_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);

wr_new();

wr_com(0x80);

wr_dat('A');

wr_com(0x81);

wr_dat(':');

wr_com(0x89);

wr_dat(0x00);

wr_com(0x8a);

wr_dat('C');

wr_com(0xc9);

wr_dat(0x00);                        //摄氏温度字符

wr_com(0xca);

wr_dat('C');

wr_com(0xc0);

wr_dat('B');

wr_com(0xc1);

wr_dat(':');

}

/******************************ds1820程序***************************************/

void delay_18B20(uint i)//延时1微秒

{

while(i--);

}

void ds1820rst()/*ds1820复位*/

{   uchar x=0;

DQ = 1;          //DQ复位

delay_18B20(4); //延时

DQ = 0;          //DQ拉低

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

DQ = 1;          //拉高

delay_18B20(40);

}

uchar ds1820rd()/*读数据*/

{ uchar i=0;

uchar dat = 0;

for (i=0;i<8;i++)

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

dat>>=1;

DQ = 1; //给脉冲信号

if(DQ)

dat|=0x80;

delay_18B20(10);

}

return(dat);

}

void ds1820wr(uchar dat)/*写数据*/

{         uchar i=0;

for (i=0; i<8; i++)

{ DQ = 0;

DQ = dat&0x01;

delay_18B20(10);

DQ = 1;

dat>>=1;

}

}

void b20_Matchrom(uchar a)         //匹配ROM

{

char j;

ds1820wr(0x55);           //发送匹配ROM命令

if(a==1)

{

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

ds1820wr(str1[j]);                //发送18B20的序列号,先发送低字节

}

if(a==2)

{

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

ds1820wr(str2[j]);                //发送18B20的序列号,先发送低字节

}

}

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

{        uchar a,b;

float tt;

ds1820rst();

ds1820wr(0xcc);                        //读序列号

ds1820rst();

if(z==1)

{

b20_Matchrom(1);                 //匹配ROM 1

}

if(z==2)

{

b20_Matchrom(2);                 //匹配ROM         2

}

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

delay1ms(5);

ds1820rst();

ds1820wr(0xcc);                                //读序列号

ds1820rst();

if(z==1)

{

b20_Matchrom(1);                            //匹配ROM 1

}

if(z==2)

{

b20_Matchrom(2);                                //匹配ROM         2

}

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

a=ds1820rd();

b=ds1820rd();

tvalue=b;

tvalue<<=8;

tvalue=tvalue|a;

if(tvalue<0x0fff)

tflag=0;

else

{        tvalue=~tvalue+1;

tflag=1;

}

tt=tvalue*0.0625;

tvalue=tt*10;

return(tvalue);

}

/*****************显示函数******************************/

void ds1820disp(uchar z)//温度值显示

{    uchar flagdat;

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也不显示

}

}

if(z==1)

{

wr_com(0x82);

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

wr_com(0x83);

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

wr_com(0x84);

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

wr_com(0x85);

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

wr_com(0x86);

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

wr_com(0x87);

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

}

if(z==2)

{

wr_com(0xc2);

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

wr_com(0xc3);

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

wr_com(0xc4);

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

wr_com(0xc5);

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

wr_com(0xc6);

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

wr_com(0xc7);

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

}

}

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

void main()

{

lcd_init();//初始化显示

while(1)

{

read_temp(1);//读取温度

ds1820disp(1);//显示

read_temp(2);//读取温度

ds1820disp(2);//显示

//                delay1ms(10000);

}

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/336281.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【WebRTC---入门篇】(五)Web服务器原理与Nodejs搭建

Web服务器工作原理 Nodejs工作原理 首先自己开发的APPLICATION(自己开发的JS程序)输出给V8引擎,解析后的二进制文件调用NODE API,然后调用LIBUV事件处理库(插入到事件队列,在队列中不断循环处理事件)。 JavaScript解析 V8引擎先收到JS程序,解析生成JS语法树,通过解析器…

代理模式和动态代理模式_代理模式介绍

代理模式和动态代理模式代表&#xff1a;被选中或当选为他人投票或代理的人– Merriam-Webster 。 委托模式&#xff1a;在软件工程中&#xff0c;委托模式是面向对象编程中的一种设计模式&#xff0c;其中&#xff0c;一个对象而不是执行其陈述的任务之一&#xff0c;而是将该…

【WebRTC---入门篇】(六)JavaScript基础

变量与类型 var与let的区别&#xff0c;var局部变量&#xff1b;let全局变量 函数

javaio流层次结构_流的多层次分组

javaio流层次结构1.简介 使用Java 8流&#xff0c;可以很容易地根据不同的标准对对象集合进行分组。 在这篇文章中&#xff0c;我们将看到如何从简单的单级分组到更复杂的&#xff0c;涉及多个级分组的分组。 我们将使用两个类来表示我们要分组的对象&#xff1a;人和宠物。 …

【开源项目----Android OPenGLES渲染YUV视频文件】

【开源项目----Android OPenGLES渲染YUV视频文件】 OpenGLES对YUV渲染相关文章参考

大型程序是如何开发的_大型小程序如何研发提效

作者:王梦君微信公众号:滴滴顺风车技术出处:https://mp.weixin.qq.com/s/M1VArJ_ORY-eXSKzD6ysQw导读&#xff1a;自2016年小程序诞生以来&#xff0c;小程序以其“用完即走”的设计理念&#xff0c;以及简单易上手的开发模式&#xff0c;吸引了大批的小程序使用者以及开发者&a…

c 语言栈,C语言栈

C语言实现简单的栈结构今天看到一个问题是要交换两个变量的值并且不能使用中间变量&#xff0c;首先想到的方法就是用数学的方法&#xff1a;int a 10,b 12;a a b; // 求和b a - b; // 和减去b得到的是a的值a a - b; // 和减去a(此时的b是最初a的值)得到b 的值这种方法很…

【WebRTC---入门篇】(七)MediaStream

MediaStream方法 MediaStream.addTrack( ) 功能&#xff1a;向流媒体中加入不同的轨 MediaStream.removeTrack( ) 功能&#xff1a;从流媒体中移除不同的轨 MediaStream.getVideoTracks( ) 功能&#xff1a;从流媒体中取出所有的视频轨 MediaStream.getAudioTracks( …

jvm 宕机 打印jvm_通过入侵JVM打印阵列

jvm 宕机 打印jvm总览 Java中最常见的陷阱之一就是知道如何打印数组。 如果有关如何打印阵列的答案获得了超过1000票赞成票&#xff0c;那么您必须怀疑是否有更简单的方法。 几乎所有其他流行语言都具有这种更简单的方法&#xff0c;所以我不清楚为什么Java仍会这样做。 与其他…

python数码时钟代码_Python+Pyqt实现简单GUI电子时钟

本文实例为大家分享了PythonPyqt实现简单GUI电子时钟的具体代码&#xff0c;供大家参考&#xff0c;具体内容如下 突发奇想想用GUI做一个简单的电子时钟界面&#xff0c;利用pyqt模块也很方便&#xff0c;代码如下&#xff1a; from PyQt5.QtGui import * from PyQt5.QtCore im…

两个人投票的c语言程序,设计网页投票器(二)《精通Unix下C语言编程与项目实践》之十...

本处设计一个网页投票器&#xff0c;它访问“www.zhiliaowang.com”上的服务程序“/toupiaoceshi.asp”&#xff0c;并通过“name”参数向选手投票。如代码15-16所示&#xff1a;代码15-16网页投票器(节自/code/chapter15/http1.c)#include char buf2[]/*组装HTTP协议GET请求报…

【WebRTC---入门篇】(八)WebRTC核心之RTP Medio 媒体控制与数据统计

RTCPeerConnection底层是通过RTP Medio实现的,处理真正数据传输,编码流量各种控制的实现。 Receiver 通过 getReceivers 可以获取一组RTCRtpReceiver对象,用于接收数据 Sender 通过getSenders 可以获取一组RTCRtpSender对象,用于发送数据,每个对象对应一个媒体轨 RTCR…

事件驱动程序设计_简单的事件驱动设计

事件驱动程序设计总览 开发人员经常询问系统或其代码的性能或效率。 这到底是什么意思&#xff1f; 我的代码是如此高效&#xff0c;只有编码神能理解它的工作原理。 我的代码确实很聪明&#xff0c;但是却难以维护。 下一位开发人员将继续重写它。 我的代码对机器确实很有效…

python语言中的单行注释语句_Python 1基础语法一(注释、行与缩进、多行语句、空行和代码组)...

#第一个注释 print ("Hello, Python!") #第二个注释 输出结果为&#xff1a;RESTART: E:/python/change.py Hello, Python! 多行注释可以用多个 # 号&#xff0c;还有 和 """&#xff1a;实例如下&#xff1a; #第一个注释#第二个注释 第三注释 第四…

c语言文件的读写通讯录,学C三个月了,学了文件,用C语言写了个通讯录程序

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼#include #include #include #include struct QQ //结构体&#xff0c;有6个成员{char name[20];char age[5];char tel[15];char qq[15];char birth[12];char address[80];}user;void style()//窗口风格函数{system("mode con…

【WebRTC---入门篇】(九)WebRTC网络基础:P2P/STUN/TURN/ICE

NAT 作用:内网地址转公网地址 STUN 作用:中介将公网信息彼此交换 TURN 作用:P2P不成功的话在云端架设服务器,双方进入同一房间。可以在一起进行数据交互 ICE 作用:打包以上取最优,先尝试P2P。如果P2P不通再选择TURN。ICE尝试所有可能性 Relay是TURN Server,大多数情况…

antlr4例子_ANTLR和网络:一个简单的例子

antlr4例子网络上的ANTLR&#xff1a;为什么&#xff1f; 我开始在MS-DOS上编写我的第一个程序。 因此&#xff0c;我非常习惯在自己的机器上安装工具。 但是在2016年&#xff0c;网络无处不在&#xff0c;因此那里也可能需要我们的语言。 可能的情况&#xff1a; ANTLR 也在…

python 形参_python中参数总结

一、形参和实参 函数参数的作用是传递数据给函数使用。 在使用的过程中&#xff0c;参数有两种形式&#xff1a;形式参数和实际参数 形参&#xff1a;定义函数时的参数 实参&#xff1a;调用函数时的参数 根据实际参数类型不同&#xff0c;将实际参数传递给形参的方式有两种&am…

【WebRTC---入门篇】(十)NAT

NAT主要用于内网穿透 NAT产生原因 NAT的种类 NAT穿越原理 完全锥型:内网主机先向外发送一个请求形成IP和port

linux安装mq报5724,小白提问:linux安装MQ出现的错误

在安装MQ中遇到以下问题&#xff0c;求大神帮助# ./mqlicense.sh -acceptLicensed Materials - Property of IBM 5724-H72 (C) Copyright IBM Corporation 1994, 2009 All rights reserved.US Gover...显示全部在安装MQ中遇到以下问题&#xff0c;求大神帮助…