找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]
跳转到指定楼层
楼主
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);
        }         
        
}





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

使用道具 举报

沙发
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);
        }                 
}
回复

使用道具 举报

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

使用道具 举报

6#
ID:1010435 发表于 2023-1-30 10:32 | 只看该作者
把后面delay16秒去掉试试,如果你趴在屏幕前盯着屏幕,16秒是很漫长的
回复

使用道具 举报

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

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

使用道具 举报

8#
ID:1055423 发表于 2023-1-31 13:48 | 只看该作者
coody_sz 发表于 2023-1-29 23:17
时序!时序!时序!

我再去检查一遍吧
回复

使用道具 举报

9#
ID:1055423 发表于 2023-1-31 13:48 | 只看该作者
mtt661 发表于 2023-1-30 10:32
把后面delay16秒去掉试试,如果你趴在屏幕前盯着屏幕,16秒是很漫长的

复位应该会变吧
回复

使用道具 举报

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

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

使用道具 举报

11#
ID:155507 发表于 2023-1-31 18:53 | 只看该作者



你的行数不对


  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. }
复制代码






回复

使用道具 举报

12#
ID:1055423 发表于 2023-1-31 23:55 | 只看该作者

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

使用道具 举报

13#
ID:596109 发表于 2023-2-1 08:31 | 只看该作者
debug看看提取的温度值T变不变吧,不变的话查一查DS18B20的相关程序,问题很可能在时序上
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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