标题: 单片机oled显示多级菜单、时间、温度程序问题 [打印本页]

作者: bearovo    时间: 2022-9-7 17:19
标题: 单片机oled显示多级菜单、时间、温度程序问题
我在一个多层菜单里准备加入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, 下载次数: 31


作者: 风之痕于梦想    时间: 2022-9-7 17:19
刷新再调慢一些,或者在18B20完成转换的过程保护起来
作者: wulin    时间: 2022-9-7 18:18
ds1302和ds18b20都是对时序比较敏感的器件,读取的时间、温度信息暂存在缓存,oled按秒更新速度刷新,不应该发生冲突。
作者: 188610329    时间: 2022-9-7 20:09
DS1302 读到 55 就是 IO需要上拉。 读到FF 就是 Delay 不够。
作者: ezuoju    时间: 2022-9-7 22:14
wulin 发表于 2022-9-7 18:18
ds1302和ds18b20都是对时序比较敏感的器件,读取的时间、温度信息暂存在缓存,oled按秒更新速度刷新,不应 ...

DS1302还好点,起码他有时钟输入。DS18B20单线通信就是确实敏感。
作者: bearovo    时间: 2022-9-8 16:26
188610329 发表于 2022-9-7 20:09
DS1302 读到 55 就是 IO需要上拉。 读到FF 就是 Delay 不够。

谢谢指点迷津
作者: bearovo    时间: 2022-9-8 16:26
188610329 发表于 2022-9-7 20:09
DS1302 读到 55 就是 IO需要上拉。 读到FF 就是 Delay 不够。

谢谢指点迷津
作者: bearovo    时间: 2022-9-8 16:27
ezuoju 发表于 2022-9-7 22:14
DS1302还好点,起码他有时钟输入。DS18B20单线通信就是确实敏感。

是的  我也看到了与我类似的问题  都是时序原因
作者: XCYYLX    时间: 2022-9-8 19:36
换一下刷新的频率试试




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1