找回密码
 立即注册

QQ登录

只需一步,快速开始

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

单片机oled显示多级菜单、时间、温度程序问题

[复制链接]
跳转到指定楼层
楼主
ID:1041590 发表于 2022-9-7 17:19 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
80黑币
我在一个多层菜单里准备加入ds1302readtime(),但会显示2055/55/55,
另外这块板子也有ds18b20,一加入ds1302readtime()也会使温度不再更新,急求解决方案
代码:
void fun1(void)
{
         
      int     tem=0;
            int temperature;
      temperature        = Ds18b20ReadTemp();
      tem=temperature*0.625*10+0.5;        
            OLED_ShowString(0,0,"TIME: " ,16);
            OLED_ShowString(0,2,"DATE: ",16);  
            OLED_ShowString(0,4,"TEMP: ",16);
            OLED_ShowString(96,6,"MENU ",16);
         
        OLED_ShowNum(48,4,tem%10000/1000,1,16);        //温度十位
                                OLED_ShowNum(56,4,tem%1000/100,1,16);                //温度个位
                                OLED_ShowString(64,4,".",16);
                                OLED_ShowNum(72,4,tem%100,1,16);                        //温度小数位
                           OLED_ShowCHinese(80,4,0);
                                Delay1ms(10);         
        
        
        

                   OLED_ShowNum(48,0,TIME[2]/16,1,16);        //时
                   OLED_ShowNum(56,0,TIME[2]&0x0f,1,16);
                   OLED_ShowString(64,0,":",16);                                 
                   OLED_ShowNum(72,0,TIME[1]/16,1,16); //分
                   OLED_ShowNum(80,0,TIME[1]&0x0f,1,16);        
                   OLED_ShowString(88,0,":",16);
                   OLED_ShowNum(96,0,TIME[0]/16,1,16);        //秒
                   OLED_ShowNum(104,0,TIME[0]&0x0f,1,16);
                   OLED_ShowString(48,2,"2",16);
                   OLED_ShowString(56,2,"0",16);
                   OLED_ShowNum(64,2,TIME[6]/16,1,16);        //年
                   OLED_ShowNum(72,2,TIME[6]&0x0f,1,16);
                   OLED_ShowString(80,2,"/",16);
                   OLED_ShowNum(88,2,TIME[4]/16,1,16);        //月
                   OLED_ShowNum(96,2,TIME[4]&0x0f,1,16);
                   OLED_ShowString(104,2,"/",16);
                   OLED_ShowNum(112,2,TIME[3]/16,1,16);        //日
                   OLED_ShowNum(120,2,TIME[3]&0x0f,1,16);
                  
                                                
                                                 OLED_Clear1(0,6,96,16);
                   OLED_ShowString(80,6,"->",16);
}

附件里包含完整工程

lzj.rar

114.87 KB, 下载次数: 28

最佳答案

查看完整内容

刷新再调慢一些,或者在18B20完成转换的过程保护起来
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:893997 发表于 2022-9-7 17:19 | 只看该作者
刷新再调慢一些,或者在18B20完成转换的过程保护起来

评分

参与人数 1黑币 +5 收起 理由
bearovo + 5

查看全部评分

回复

使用道具 举报

板凳
ID:213173 发表于 2022-9-7 18:18 | 只看该作者
ds1302和ds18b20都是对时序比较敏感的器件,读取的时间、温度信息暂存在缓存,oled按秒更新速度刷新,不应该发生冲突。

评分

参与人数 1黑币 +5 收起 理由
bearovo + 5 很给力!

查看全部评分

回复

使用道具 举报

地板
ID:624769 发表于 2022-9-7 20:09 | 只看该作者
DS1302 读到 55 就是 IO需要上拉。 读到FF 就是 Delay 不够。

评分

参与人数 1黑币 +5 收起 理由
bearovo + 5 很给力!

查看全部评分

回复

使用道具 举报

5#
ID:1043522 发表于 2022-9-7 22:14 | 只看该作者
wulin 发表于 2022-9-7 18:18
ds1302和ds18b20都是对时序比较敏感的器件,读取的时间、温度信息暂存在缓存,oled按秒更新速度刷新,不应 ...

DS1302还好点,起码他有时钟输入。DS18B20单线通信就是确实敏感。

评分

参与人数 1黑币 +5 收起 理由
bearovo + 5 很给力!

查看全部评分

回复

使用道具 举报

6#
ID:1041590 发表于 2022-9-8 16:26 | 只看该作者
188610329 发表于 2022-9-7 20:09
DS1302 读到 55 就是 IO需要上拉。 读到FF 就是 Delay 不够。

谢谢指点迷津
回复

使用道具 举报

7#
ID:1041590 发表于 2022-9-8 16:26 | 只看该作者
188610329 发表于 2022-9-7 20:09
DS1302 读到 55 就是 IO需要上拉。 读到FF 就是 Delay 不够。

谢谢指点迷津
回复

使用道具 举报

8#
ID:1041590 发表于 2022-9-8 16:27 | 只看该作者
ezuoju 发表于 2022-9-7 22:14
DS1302还好点,起码他有时钟输入。DS18B20单线通信就是确实敏感。

是的  我也看到了与我类似的问题  都是时序原因
回复

使用道具 举报

9#
ID:999824 发表于 2022-9-8 19:36 | 只看该作者
换一下刷新的频率试试

评分

参与人数 1黑币 +5 收起 理由
bearovo + 5

查看全部评分

回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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