找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2039|回复: 12
收起左侧

求助各位大佬 51单片机oled和ds18b20显示实时温度不论怎么复位,温度一直不变

[复制链接]
ID:1055423 发表于 2023-1-29 19:50 | 显示全部楼层 |阅读模式
51单片机oled和ds18b20显示实时温度不论怎么复位,温度一直不变,这是为什么?求各位大佬留下意见,以下是主函数。跪谢

#include "REG51.h"
#include "oled.h"
#include "bmp.h"
#include "DS18B20.h"

int main(void)
{
        OLED_Init();                        //初始化OLED ,oled代码来源于中景园
        while(1)
        {               
                float T;//用于后续存储读取的温度
                OLED_Clear();
                OLED_ShowString(0,4,"Temperature:",16);//显示temperature,显示在4列0行,占俩行
               
                 DS18B20_CONVERT_T();//开始,ds18b20代码来源于江科大,此函数中包含,初始化->skip ROM->convert t
                T=DS18B20_READT();//提取温度,存入T
                if(T<0){OLED_ShowString(0,6,"-",16);}//判断正负显示符号,显示在6列0行
               
                 OLED_ShowNum(1,6,T,3,16);//三位整数部分
                OLED_ShowString(4,6,".");//显示小数点
                OLED_ShowNum(5,6,(unsigned long)(T*10000)%10000,4,16);//显示小数部分
                //延时函数
                delay_ms(8000);
                delay_ms(8000);
        }         
        
}





回复

使用道具 举报

ID:1034262 发表于 2023-1-29 23:17 | 显示全部楼层
时序!时序!时序!
回复

使用道具 举报

ID:584814 发表于 2023-1-30 08:16 | 显示全部楼层
很好的编程手法,只需主程序就可以通晓全部。
个人感觉只要有点耐心,温度会变面包也会有的。顺祝新年快乐
回复

使用道具 举报

ID:213173 发表于 2023-1-30 08:42 | 显示全部楼层
int main(void)
{
        OLED_Init();                        //初始化OLED ,oled代码来源于中景园
        while(1)
        {               
                float T;//用于后续存储读取的温度
                OLED_Clear();
                OLED_ShowString(0,4,"Temperature:",16);//显示temperature,显示在4列0行,占俩行       
                DS18B20_CONVERT_T();//开始,ds18b20代码来源于江科大,此函数中包含,初始化->skip ROM->convert t
                T=DS18B20_READT();//提取温度,存入T

                //加一条验证语句,以区分问题在取样部分还是显示部分
                T=0x0190;//25度


                if(T<0){OLED_ShowString(0,6,"-",16);}//判断正负显示符号,显示在6列0行
                OLED_ShowNum(1,6,T,3,16);//三位整数部分
                OLED_ShowString(4,6,".");//显示小数点
                OLED_ShowNum(5,6,(unsigned long)(T*10000)%10000,4,16);//显示小数部分
                //延时函数
                delay_ms(8000);
                delay_ms(8000);
        }                 
}
回复

使用道具 举报

ID:752974 发表于 2023-1-30 09:24 | 显示全部楼层
主要问题是18B20的数据读取上,18B20是单总线器件,对时序的要求很严格,不是随意搬个代码就可用的。
回复

使用道具 举报

ID:1010435 发表于 2023-1-30 10:32 | 显示全部楼层
把后面delay16秒去掉试试,如果你趴在屏幕前盯着屏幕,16秒是很漫长的
回复

使用道具 举报

ID:1055423 发表于 2023-1-31 13:47 | 显示全部楼层
munuc_w 发表于 2023-1-30 09:24
主要问题是18B20的数据读取上,18B20是单总线器件,对时序的要求很严格,不是随意搬个代码就可用的。

好的,感谢这位大佬的建议,
回复

使用道具 举报

ID:1055423 发表于 2023-1-31 13:48 | 显示全部楼层
coody_sz 发表于 2023-1-29 23:17
时序!时序!时序!

我再去检查一遍吧
回复

使用道具 举报

ID:1055423 发表于 2023-1-31 13:48 | 显示全部楼层
mtt661 发表于 2023-1-30 10:32
把后面delay16秒去掉试试,如果你趴在屏幕前盯着屏幕,16秒是很漫长的

复位应该会变吧
回复

使用道具 举报

ID:1055423 发表于 2023-1-31 13:49 | 显示全部楼层
man1234567 发表于 2023-1-30 08:16
很好的编程手法,只需主程序就可以通晓全部。
个人感觉只要有点耐心,温度会变面包也会有的。顺祝新年快乐 ...

对于新手来说,查bug简直无从下手
回复

使用道具 举报

ID:155507 发表于 2023-1-31 18:53 | 显示全部楼层

OLED_18B20.jpg

你的行数不对


  1. int main(void)
  2. {
  3.             float T;//用于后续存储读取的温度
  4.         OLED_Init();                        //初始化OLED ,oled代码来源于中景园
  5.         while(1)
  6.         {               

  7.                 OLED_Clear();
  8.                 OLED_ShowString(0,4,"Temperature:",16);//显示temperature,显示在4列0行,占俩行
  9.                
  10.                  DS18B20_CONVERT_T();//开始,ds18b20代码来源于江科大,此函数中包含,初始化->skip ROM->convert t
  11.                 T=DS18B20_READT();//提取温度,存入T

  12.                 if(T<0){OLED_ShowString(0,6,"-",16);}//判断正负显示符号,显示在6列0行
  13.                  OLED_ShowNum(1,6,(unsigned int)T,3,16);//三位整数部分
  14.                 OLED_ShowString(25,6,".",16);//显示小数点
  15.                 OLED_ShowNum(29,6,(unsigned long)(T*10000)%10000,4,16);//显示小数部分
  16.                 //延时函数
  17.                 //delay_ms(8000);
  18.                 delay_ms(1000);
  19.         }         
  20.         
  21. }
复制代码






回复

使用道具 举报

ID:1055423 发表于 2023-1-31 23:55 | 显示全部楼层

感谢你,说实话,我没看太懂中景园oled的代码,
回复

使用道具 举报

ID:596109 发表于 2023-2-1 08:31 | 显示全部楼层
debug看看提取的温度值T变不变吧,不变的话查一查DS18B20的相关程序,问题很可能在时序上
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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