找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1998|回复: 4
打印 上一主题 下一主题
收起左侧

单片机高效率代码读取18B20 显示在LCD1602上

[复制链接]
跳转到指定楼层
楼主
#include <STC89C5xRC.H>
#include <intrins.h>

sbit DATA_IO = P3^2;


/* 软件延时函数,延时时间(t*10)us */
void DelayX10us(unsigned char t)
{
    do {
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        _nop_();
    } while (--t);
}

bit GetACK()
{
        bit ack;
        EA = 0;
        DATA_IO = 0;
        DelayX10us(60);
        DATA_IO = 1;
        DelayX10us(6);
        ack = DATA_IO;
        while(!DATA_IO);
        EA = 1;
        return ack;
}

void DS18B20_Write(unsigned char dat)
{
        unsigned char mask;
        EA = 0;
        for(mask=0x01;mask!=0;mask<<=1)
        {
                DATA_IO = 0;
                _nop_();
                _nop_();
                if((dat&mask)!= 0)
                        DATA_IO = 1;
                else
                        DATA_IO = 0;
                DelayX10us(6);
                DATA_IO = 1;
        }
        EA = 1;
}
unsigned char DS18B20_Read()
{
        unsigned char dat;
        unsigned char mask;
        EA = 0;
        for(mask=0x01;mask!=0;mask<<=1)
        {
                DATA_IO = 0;
                _nop_();
                _nop_();
                DATA_IO = 1;
                _nop_();
                _nop_();
                if(!DATA_IO)
                        dat &= ~(mask);
                else
                        dat |= mask;
                DelayX10us(6);
        }
        EA = 1;
        return dat;
}

bit DS18B20_Start()
{
        bit ack;
        ack = GetACK();
        if(ack == 0)
        {
                DS18B20_Write(0xCC);
                DS18B20_Write(0x44);
        }
        return ~ack;
}

bit GetTemp(int *temp)
{
        bit ack;
        unsigned char LSB,MSB;
        ack = GetACK();
        if(ack==0)
        {
                DS18B20_Write(0xCC);
                DS18B20_Write(0xBE);
                LSB = DS18B20_Read();
                MSB = DS18B20_Read();
        }
        *temp = ((int)MSB<<8) + LSB;
        return ~ack;
}

IMG_3558.JPG (2.46 MB, 下载次数: 38)

IMG_3558.JPG

18B20.zip

60.46 KB, 下载次数: 21, 下载积分: 黑币 -5

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:810174 发表于 2020-8-11 23:02 来自手机 | 只看该作者
没有注释的程序,无论程序写得怎么样,都不能称为合格的程序
回复

使用道具 举报

板凳
ID:468878 发表于 2020-8-13 14:53 | 只看该作者
19011250 发表于 2020-8-11 23:02
没有注释的程序,无论程序写得怎么样,都不能称为合格的程序

哈哈,我刚还看了好一会,你这么一说,我才发现这个问题。算了,不看了。
回复

使用道具 举报

地板
ID:981034 发表于 2021-11-17 15:21 | 只看该作者
是,有些不明白
回复

使用道具 举报

5#
ID:906597 发表于 2021-11-19 15:19 | 只看该作者
19011250 发表于 2020-8-11 23:02
没有注释的程序,无论程序写得怎么样,都不能称为合格的程序

哈哈有道理
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表