鱼C论坛

 找回密码
 立即注册
查看: 1725|回复: 4

单片机的数字温度计谁会设计

[复制链接]
发表于 2021-6-14 12:48:28 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 cwz8632 于 2021-6-15 17:18 编辑

要求:将温度显示在LCD1602上,当温度超过或低于设定的阈值是,能通过LED闪烁b报警
设计思路:采用单总线数字温度传感器DS1305提供温度值。显示模块采用LCD1602,将温度显示在第一行。温度超过或低于设定的阈值,分别用两个LED进行闪烁报警。会的大神麻烦加下我Q1095360407,我还有一些资料。谢谢。

数字温度计设计.zip

406.66 KB, 下载次数: 0

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-6-14 21:43:32 | 显示全部楼层
你确定数字温度传感器是DS1305?
我怎么记得这是个时钟芯片啊。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-6-28 18:10:20 From FishC Mobile | 显示全部楼层
我会,DS18B20典型温度感应器,我有源码胆没写温度报警程序。DS13系列是时钟芯片吧!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-12-29 20:09:41 | 显示全部楼层
#include <reg52.h>  //
#include <intrins.h>
#define uint unsigned int   //宏定义
#define uchar unsigned char

//数码管段码
uchar code seg[] = {0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07,
                        0x7f, 0x6f, 0x77, 0x7c, 0x39, 0x5e, 0x79, 0x71};
uchar smg_wei[] = {0xe3, 0xe7, 0xeb, 0xef, 0xf3, 0xf7, 0xfb, 0xff};
uchar DisplayData[8]={0};
sbit DQ = P3^7;

//延时函数
void delay_ms(uint n)
{
    uint i,j;
    for(i = n; i > 0; i--)
    {
        for(j = 0; j < 114; j++);
    }
}
//延时10*n微秒
void delay_10um(uint n)
{
    while(n--);
}

uchar DS18B20Init()
{
    uchar flag_DQ;
    DQ = 0;             //将总线拉低 480us~960us
    delay_10um(50);     //延时 500us
    DQ = 1;             //然后释放总线,
                        //如果DS18B20做出反应会将在15us~60us后总线拉低
    delay_10um(6);      //延时60us
    flag_DQ = DQ;   
    while(!DQ);     
    //delay_10um(50);   //延时 500us
    return flag_DQ;   
}

//先写低位再读高位
void DS18B20WriteByte(uchar dat)
{
    uchar j;
    for(j=0;j<8;j++)
    {
        DQ = 0;         
        //_nop _: 51单片机中封装好的函数,用于延时,大约1us,需包含#includc“intrins.h”
        _nop_();//延时1微秒
        _nop_();//延时1微秒
        DQ = dat & 0x01;           
        delay_10um(6);//延时 60us
        DQ = 1;
        dat = dat >> 1;//右移一位
    }   
}

//先读低位再读高位
uchar DS18B20ReadByte()
{
    uchar i,byte=0;
    for(i=0;i<8;i++)
    {
        DQ = 0;
        _nop_();
        _nop_();
        byte = byte >> 1;
        DQ = 1;
        _nop_();
        _nop_();

        //byte = byte >> 1;  
        if(DQ)
        {   
            byte |= 0x80;
        }        
        delay_10um(5);//延时 50us      
        
    }
    return byte;
}

//读取温度
uint DS18B20ReadTemp()
{
    uint temp = 0;
    uchar tmh,tml;
    //1.初始化DS18B20
    DS18B20Init();
    //2.执行ROM指令
    DS18B20WriteByte(0xcc); //跳过ROM
    //3.执行RAM指令——启动温度测量
    DS18B20WriteByte(0x44); //启动温度转换(测量)   
    delay_10um(75);//延时 750ms
   
    //4.初始化DS18B20
    DS18B20Init();
    //5.执行ROM指令
    DS18B20WriteByte(0xcc); //跳过ROM
    //6.执行RAM指令——读取温度数据
    DS18B20WriteByte(0xbe); //读取暂存器中的温度数据
    tml = DS18B20ReadByte();//读取byte0低位温度值
    tmh = DS18B20ReadByte();//读取byte1高位温度值
    //7.将低温温度和高位温度组合
    temp = tmh;               
    temp <<= 8;
    temp |= tml;
    //8.温度转换
    temp = temp *0.0625 + 0.5;  
    return temp;
}

void main()
{
    uchar i,temp;      
    while(1)
    {
        temp = DS18B20ReadTemp();
        DisplayData[0] = seg[temp % 10];
        DisplayData[1] = seg[temp / 10];
        for(i = 0; i < 8; i++)
        {
            
            P2 = smg_wei[i];  /n码
            P0 = DisplayData[i];        //取段码
            delay_ms(1);
            P0 = 0x00;
        }               
    }
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2021-12-29 20:10:35 | 显示全部楼层
wpp123456 发表于 2021-12-29 20:09
#include   //
#include
#define uint unsigned int   //宏定义

ds18b20 才是温度传感器
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-3-29 14:28

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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