发作品签到
专业版

基于51单片机的数字温度计

工程标签

4.1k
0
0
0

简介

数字温度计是一种用于测量温度的电子设备,它能够以数字形式显示温度值。数字温度计通常由传感器、微处理器和显示屏等组成。

简介:数字温度计是一种用于测量温度的电子设备,它能够以数字形式显示温度值。数字温度计通常由传感器、微处理器和显示屏等组成。

开源协议

GPL 3.0

创建时间:2024-01-05 18:07:44更新时间:2024-01-05 19:32:58

描述

方案框图:

原理图设计说明

电源部分:

显示部分:

温度检测部分:

报警电路:

51最小系统:

PCB设计说明

没有什么特别需要注意的,就是P0要外接上拉电阻。

软件说明

提示:软件可以使用代码块来进行嵌套放置,无需全部软件部分说明,只需说明重要部分即可
代码块:

#include
void main()
{
    unsigned char high, low;
    init_ds18b20(); // 初始化DS18B20
    write_byte(0xcc); // 跳过ROM操作
    write_byte(0x44); // 启动温度转换
    delay(1000); // 等待转换完成
    init_ds18b20(); // 初始化DS18B20
    write_byte(0xcc); // 跳过ROM操作
    write_byte(0xbe); // 读取温度寄存器
    low = read_byte(); // 读取温度低位
    high = read_byte(); // 读取温度高位
    // 计算温度值
    printf("Temperature: %d.%d Celsius\n", high, low);
  while(1); printf(""/n); }

void delay(unsigned int t) // 延时函数
{
    while(t--);
}

void init_ds18b20() // 初始化DS18B20
{
    DQ = 1; // 线拉高
    delay(8); // 延时480us
    DQ = 0; // 发送复位脉冲
    delay(80); // 延时4800us
    DQ = 1; // 释放总线
    delay(8); // 延时480us
}

unsigned char read_byte() // 读取一个字节
{
    unsigned char i, dat = 0;
    for(i = 0; i < 8; i++)
    {
        dat >>= 1; // 从高位到低位读取数据
        DQ = 0; // 发送读取命令
        _nop_();
        _nop_();
        DQ = 1; // 释放总线
        _nop_();
        _nop_();
        if(DQ) // 读取数据
            dat |= 0x80;
        delay(8); // 延时
    }
    return dat;
}

void write_byte(unsigned char dat) // 写入一个字节
{
    unsigned char i;
    for(i = 0; i < 8; i++)
    {
        DQ = 0; // 发送写入命令
        DQ = dat & 0x01;
        _nop_();
        _nop_();
        DQ = 1; // 释放总线
        dat >>= 1; // 下一位
    }
    delay(8); // 延时
}

实物展示说明

提示:作品的实物图片,图片可以加上说明。

演示视频

提示:演示视频上传附件即可,附件最大只能长传50M的文件,大于50M的文件可放置在其他网盘或视频网站上,只需把地址链接放入这里即可

其它附件上传

提示:参加活动的作品必须把工程相关的程序附件上传至开源平台或个人的代码存储云端,附件最大支持50M上传(请勿在立创工作区上传,有限制)

设计图

未生成预览图,请在编辑器重新保存一次

BOM

暂无BOM

附件

序号文件名称下载次数
1
main.c
90
2
DS18B20.c
89
克隆工程
添加到专辑
0
0
分享
侵权投诉

评论

全部评论(1
按时间排序|按热度排序
粉丝0|获赞0
相关工程
暂无相关工程

底部导航