一乐电子

一乐电子百科

 找回密码
 请使用微信账号登录和注册会员

QQ登录

只需一步,快速开始

快捷登录

手机号码,快捷登录

搜索
楼主: gongzhu
收起左侧

[51单片机] 万年历集大成版之调试程序

  [复制链接]
发表于 2015-6-23 08:39 | 显示全部楼层
每天进来关注一下(支持)
发表于 2015-6-27 00:41 | 显示全部楼层
每天进来关注一下(支持)
发表于 2015-7-16 19:32 | 显示全部楼层
仿制成功,温度显示有问题,不能大于26度
发表于 2015-7-16 19:46 | 显示全部楼层
有时间仿制看看哈
发表于 2015-7-29 00:37 | 显示全部楼层
每天进来关注一下
发表于 2015-7-29 13:02 | 显示全部楼层
楼主辛苦了谢谢分享
发表于 2015-8-15 19:03 | 显示全部楼层
仿制成功,温度显示有问题,不能大于26度,是哪的问题啊
 楼主| 发表于 2015-8-16 14:11 | 显示全部楼层
hll79316 发表于 2015-8-15 19:03
仿制成功,温度显示有问题,不能大于26度,是哪的问题啊

好多人反应都有这个问题,一超过25.5就回到了20多,暂时没条件测试了,等我的新的大数字万年历板子回来了再测试。
怀疑是DS3231.h中的 uint    read_temp()   是否有问题(26度的临界bug)。
uint    read_temp()       /* -------- read temperature -------- */
{
                int     itemp;
                float   ftemp;
                //温度数据是以2 进制格式存储的并不需要数制转换
                write_byte(0x0e,0x20);//0x0e寄存器的CONV位置1开启温度转换

        itemp = ( (int) read_random(0x11) << 5 );          //放大32倍
        itemp += ( read_random(0x12)>> 3);
        Stop_I2C();
        if(itemp & 0x1000)
                        itemp += 0xe000;        /* if sign bit set, make 16 bit 2's comp */

        ftemp = 0.3125 * (float) itemp+0.5;    /* 放大10倍 */
                return  (uint) ftemp;
}
该read_temp() 函数放在C++编译环境中测试是可以大于26度的。

和温度相关的另一个函数是displaytime.h中的:
/*温度值显示-----------------------------------------------------------------*/
void displaytemp()
{
        uint tvalue=read_temp();

        set1616pic(5,4,0,1);                                         //显示"温度计图标"
        write_com(0x30); write_com(0x06);        
        write_com(0x9d);           //在液晶上显示温度起始位置:"28.8°C"
        if(tvalue>=100)
        write_data(tvalue%1000/100+0x30);    //显示十位
        else
                 write_data(0x20);    //不显示十位
        write_data(tvalue%100/10+0x30);    //显示个位         
        write_data(0x2e);          //显示小数点         
        write_data(tvalue%10+0x30);    //显示小数位
        set1616pic(8,4,0,0);           //在第8列第4行不反白的°C图标
}
此函数似乎没多大问题。

但是我用同样的DS3231.h做的其他几个时钟温度是可以大于26度的:
PIC_20140818_212408_E60.jpg





PIC_20140904_163154_4E0.jpg

PIC_20140816_101506_E60.jpg

29度!




希望其他懂单片机的坛友看到了此回复有精力就帮忙测试下DS3231的温度函数问题。


如果温度不够,可以用手触摸ds3231芯片让其升温至26度上!

发表于 2015-8-17 20:16 | 显示全部楼层
gongzhu 发表于 2015-8-16 14:11
好多人反应都有这个问题,一超过25.5就回到了20多,暂时没条件测试了,等我的新的大数字万年历板子回来了 ...

原因已找到,  ds3231芯片的问题  ,换了个就没事了,用的是一年前买的不带#号的片子。
发表于 2015-8-17 20:18 | 显示全部楼层
刚刚试过了还是老问题…………………

本版积分规则

QQ|一淘宝店|手机版|商店|电子DIY套件|一乐电子 ( 粤ICP备09076165号 ) 公安备案粤公网安备 44522102000183号

GMT+8, 2024-5-9 10:09 , Processed in 0.055917 second(s), 32 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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