51单片机基于DS18B20的温度检测并显示在lcd1602上

发布者:知音学友最新更新时间:2020-12-19 来源: 51hei关键字:51单片机  DS18B20  温度检测  lcd1602 手机看文章 扫描二维码
随时随地手机看文章

单片机源程序如下:

#include

#include

sbit DQ =P1^3;

sbit RS = P1^5;

sbit RW = P1^6;

sbit EN = P1^7;

void delay(unsigned int i);

void init_DS18B20(void);

unsigned char read_DS18B20(void);

void write_DS18B20(unsigned char dat);

double read_temperature(void);

void init_lcd(void);

void lcd_write_dat(unsigned char dat);

void lcd_write_cmd(unsigned char cmd);

void main(void)

{

        double temp;

        unsigned char i;

        char str[16];

          init_lcd();

          init_DS18B20();

          while(1)

                {

                        temp = read_temperature();

                        if(temp)

                        {

                                sprintf(str,"%f",temp);

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

                                        lcd_write_dat(str[i]);

                                delay(20000);

                                init_lcd();

                        }

                }

}


void delay(unsigned int i)

{

     while(i--);   

}


void init_DS18B20(void)

{

bit flag=1;

while(flag==1)

{

  DQ = 1;   

  DQ = 0;   

  delay(70);

  DQ = 1;   

  delay(10);

  flag=DQ;  

  delay(20);

}

}


unsigned char read_DS18B20(void)

{

unsigned char i = 0, dat = 0;

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

{

  DQ = 0;

  dat>>=1;

  DQ = 1;

  if(DQ)

   dat|=0x80;

  delay(4);

}

return dat;

}

void write_DS18B20(unsigned char dat)

{

unsigned char i=0;

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

{

  DQ = 0;

  DQ = dat&0x01;

  delay(3);

  DQ = 1;

  dat>>=1;

}

delay(5);

}


double read_temperature(void)  

{

unsigned int temp=0;

double d;

init_DS18B20();

write_DS18B20(0xCC);

write_DS18B20(0x44);

init_DS18B20();

write_DS18B20(0xCC);

write_DS18B0(0xBE);

temp=read_DS18B20();   

temp=temp+read_DS18B20()*0x100;   

if(temp<0xf000)   

{

  d=temp*0.0625;

}

else

{

  temp=~temp+1;         

  d=-(temp*0.0625);

}

return  d;

}

void init_lcd(void)

{

        lcd_write_cmd(0x38);

        lcd_write_cmd(0x0f);

        lcd_write_cmd(0x06);

        lcd_write_cmd(0x01);

        delay(100);

}

void lcd_write_dat(unsigned char dat)

{

        P2 = dat;

        RS = 1;

        RW = 0;

        EN = 1;

        delay(100);

        EN = 0;

        delay(5000);

}

void lcd_write_cmd(unsigned char cmd)

{

        P2 = cmd;

        RS = 0;

        RW = 0;

        EN = 1;

        delay(100);

        EN = 0;

        delay(5000);

}


关键字:51单片机  DS18B20  温度检测  lcd1602 引用地址:51单片机基于DS18B20的温度检测并显示在lcd1602上

上一篇:基于RS-485总线的单片机温控系统程序
下一篇:51单片机自动红外洗手器程序

推荐阅读最新更新时间:2024-11-11 18:09

51单片机程序执行流程(STARTUP.A51)
keil 版本:uVision 4 单片机是没有上操作系统的东西,在keil中编写的代码都是裸机代码,深入编写裸机代码有助于了解硬件的特性。 若不是硬件特性已定的情况之下的其它流程都是代码作祟。忽然想到来探探51单片机的执行流程。这个念头起源于最初见到每个51程序里面的主函数里面最终都挂一个while(1);语句。为何要加一句while死循环让程序停留在main函数中呢。将while(1);语句去掉有什么影响么? 写一个很简单的程序试一下。 #include reg52.h void delay_ms( int ms ); int main() { P1 = ~P1;
[单片机]
<font color='red'>51单片机</font>程序执行流程(STARTUP.A51)
51单片机的工作原理
51单片机与很多单片机的工作原理是一致的,而且都遵循冯诺依曼架构,即就是数据区和代码区是区分开来的。在单片机中的具体表现就是程序ROM区和数据RAM区。 本文将以应用最广泛的51单片机为例来解析单片机的工作原理。 一、微处理器 主要包括ALU(算数逻辑运算单元)和控制部件。 先来说ALU,它执行的是单片机的数学运算(如:+、-、*、/、%、 、 、++、--等等)。逻辑运算单元执行单片机的逻辑运算(如:与、或、非、==、!、!=、同或、异或、||、&&等等)。其实说到这里,我们很容易就能想到C语言也是在执行以上这些逻辑运算和数学运算。 再来看一下控制部件,它是控制单片机的程序计数器PC向程序存储器获取指令和操作数的
[单片机]
51单片机 4个独立按键控制LED灯 (protues仿真)(C语言版)
一、思路及相关问题 1、逻辑思路: 当按下key1时 led1亮起来 因为按下去具有瞬时性不用while,用if语句,当松开时,用while(!key1) ,函数调用。 先在脑海里想象它的大致运行过程,其次在仿真软件protues上摆好元器件并连接,最后用keil4写对应代码。 需注意keil4软件上的设置如波特率,添加文件,勾选等等。 至少要了解C语言程序设计的基本功。 2、关于消抖: 通常的按键所用开关为机械性开关,当机械触电断开、闭合时、由于机械触点的弹性作用,一个按键开关在闭合时不会马上稳定的接通,在断开时也不会一下子断开、因而在闭合及断开的瞬间均伴随有一连串的抖动,为了不产生这种现象而作的措施就是按键消抖 按
[单片机]
<font color='red'>51单片机</font> 4个独立按键控制LED灯 (protues仿真)(C语言版)
MCS-51单片机的基本知识
8051是MCS-51系列单片机的典型产品,其特性与我们实验的STC89C52RC完全相同,这里以8051为例简介一下单片机的基本知识。 8051单片机包含中央处理器、程序存储器(ROM)、数据存储器(RAM)、定时/计数器、并行接口、串行接口和中断系统等几大单元及数据总线、地址总线和控制总线等三大总线,现在我们分别加以说明: 中央处理器: 中央处理器(CPU)是整个单片机的核心部件,是8位数据宽度的处理器,能处理8位二进制数据或代码,CPU负责控制、指挥和调度整个单元系统协调的工作,完成运算和控制输入输出功能等操作。 图1 数据存储器(RAM): 8051内部有128个8位用户数据存储单元和128个专用寄存器单元,它
[单片机]
MCS-<font color='red'>51单片机</font>的基本知识
基于ARM-LINUX的温度传感器驱动(DS18B20
DS18B20数字温度传感器接线方便,封装成后可应用于多种场合,如管道式,螺纹式,磁铁吸附式,不锈钢封装式,型号多种多样,有LTM8877,LTM8874等等。主要根据应用场合的不同而改变其外观。封装后的DS18B20可用于电缆沟测温,高炉水循环测温,锅炉测温,机房测温,农业大棚测温,洁净室测温,弹药库测温等各种非极限温度场合。耐磨耐碰,体积小,使用方便,封装形式多样,适用于各种狭小空间设备数字测温和控制领域。 技术性能描述 1. 独特的单线接口方式,DS18B20在与微处理器连接时仅需要一条口线即可实现微处理器与DS18B20的双向通讯。 2. 测温范围 -55℃~+125℃,固有测温分辨率0.5℃。 3. 支持
[单片机]
基于ARM-LINUX的温度传感器驱动(<font color='red'>DS18B20</font>)
51单片机精确延时函数集锦
C语言延时程序: 50us延时子程序(12MHZ) void delay_50us(uint16 t) { uint8 j; for(;t 0;t--) for(j=19;j 0;j--); } 10ms延时子程序(12MHZ) void delay10ms(void) { unsigned char i,j,k; for(i=5;i 0;i--) for(j=4;j 0;j--) for(k=248;k 0;k--); } 1s延时子程序(12MHZ) void delay1s(void) { unsigned char h,
[单片机]
ADXL345倾角传感器的51单片机源程序
这是自己做的一个小程序,用到了STC12C5160S2这块单片机芯片做控制,实现ADXL345倾角传感器模块测量角度 单片机源程序如下: /******************************************************************** * 文件名 :GY-29 ADXL345 测角度,角度值显示 * 创建人 :飞翔的猫 * 描述 : 该文件实现了用GY-29 ADXL345角度的采集,并在数码管上显示出来。 使用单片机STC89C51 *晶振 :11.0592M *显示 :LCD1602 *编译环境 :Keil uVision4 ********
[单片机]
51单片机设计方案TOP10(六)
传统的伏特表在我们的日常生活及科学研究中起到了其独特的作用,但是在科学技术日新月异、集成芯片在日常生活中的应用越来越广泛的今天显得比较落伍:①它们的量程往往在出厂以前就限定好的,不能根据具体使用场合进行相应调整;②测量精度有限;③不能够将测量结果用语音播放出来。本文将介绍一种由单片机最小系统、模-数转换电路 、语音电路、LED显示电路组成的单片机式语音播报伏特表。    1、硬件设计   整个系统的组成可以分成四大部分:单片机、模-数转换电路、语音电路、LED显示电路。下面就主要的部分进行具体介绍。   1.1、单片机   目前流行的单片机很多,其中89C51自带有片内ROM和一定数量的RAM,一般不需要扩展片外的存储器,并且
[模拟电子]
<font color='red'>51单片机</font>设计方案TOP10(六)
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved