基于51单片机的DS18B20温度传感器

DS18B20温度传感器

选用芯片AT89S52
函数功能如下

/*************************************************************************
此程序功能如下:此程序为DS18B20的使用程序。将DS18B20的温度值读取出来,并显
示在液晶LCD1602上。
作者:Crazy Wind     
日期:2020.11.9
version:1.0.0
**************************************************************************/
#include"reg52.h"
#include"intrins.h"
#define uchar unsigned char
#define uint unsigned int
uchar code digit[11]={
   "0123456789-"};     //定义字符数组显示数字
uchar code Str[]={
   "DS18B20"};     		  //说明显示的是温度
uchar code Error[]={
   "  DS18B20 ERROR"};   //说明没有检测到DS18B20
uchar code Error1[]={
   " PLEASE  CHECK"};   //说明没有检测到DS18B20
uchar code Temp[]={
   "Temp:"};              //说明显示的是温度
uchar code Cent[]={
   "C"};                  //温度单位
uchar flag,tltemp;						  //负温度标志和临时暂存变量

/*****************************************************
函数功能:ms延时
******************************************************/
void delayms(uint ms) 
{
   
	uchar i,j;
    for(i=0;i<ms;i++)
    {
   
        for(j=115;j>0;j--);
    }
}

/*****************************************************************/
/***********************液晶LCD1602操作程序***********************/
/*****************************************************************/
sbit RS=P2^0;    //寄存器选择位RS为P2.0
sbit RW=P2^1;    //读写选择位RW为P2.1
sbit E=P2^2;     //使能信号位E为P2.2
sbit BF=P0^7;    //忙碌标志位BF为P0.7

/*****************************************************
函数功能:判断液晶模块的忙碌状态
返回值:busy。busy=1,忙碌;busy=0,不忙
******************************************************/
bit BusyTest(void)
{
   
    bit busy;
    RS=0;          //RS为低电平,RW为高电平时,可以读状态
    RW=1;
    E=1;           //E=1,才允许读写
    _nop_();       //空操作四个机器周期,给硬件反应时间
    _nop_();
    _nop_();
    _nop_();
    busy=BF;       //将忙碌标志电平赋给m
    E=0;
    return busy;   //将忙碌标志电平赋给m
}

/*****************************************************
函数功能:将模式设置指令或显示地址写入液晶模块
入口参数:z
******************************************************/
void Write_zl(uchar z)
{
   
    while(BusyTest()==1);   //如果忙就等待
    RS=0;     //RS和RW同时为低电平时,可以写入指令
    RW=0;
    E=0;      //使能信号E置低电平(写指令前先赋低电平0)
    _nop_();
    _nop_();  //空操作两个机器周期,给硬件反应时间
    P0=z;     //将数据送入P0口(数据总线line),即写入指令或地址
    _nop_();
    _nop_();
    _nop_();
    _nop_();  //空操作四个机器周期,给硬件反应时间
    E=1;      //使能信号E上升沿(0到1)时读取信息
    _nop_();
    _nop_();
    _nop_();
    _nop_();  //空操作四个机器周期,给硬件反应时间 
    E=0;      //使能信号E下降沿(1到0)时执行指令
}

/*****************************************************
函数功能:指定字符显示的实际地址
入口参数:x
******************************************************/
void WriteAddress(uchar x)
{
   
    Write_zl(
  • 5
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值