找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1895|回复: 5
收起左侧

STC89C52单片机四则运算出错

[复制链接]
ID:160658 发表于 2018-11-5 18:13 | 显示全部楼层 |阅读模式
设:bufTime.year = 18, bufTime.mon = 11, bufTime.day = 4算出的w的值等于2,正确值应该是0。不知是什么原因,望大侠们指点,先谢谢了!


void RefreshTimeShow()
{
    unsigned int d, m, y, w;

    ShowBcdByte(16, 0, bufTime.year);          //Year
    ShowBcdByte(48, 0, bufTime.mon);          //Month
    ShowBcdByte(80, 0, bufTime.day);          //Date
    ShowBcdByte(0, 2, bufTime.hour);          //Hour
    ShowBcdByte(32, 2, bufTime.min);          //Minutes
    ShowBcdByte(64, 2, bufTime.sec);          //Seconds

    d = bufTime.day;
    m = bufTime.mon;
    y = 2000 + bufTime.year;

    if(m == 1 || m == 2)
    {
        m += 12;
        y--;
    }
    w = (d + 1 + 2*m + 3*(m+1)/5 + y + y/4 - y/100 + y/400)%7;
    bufTime.week = (unsigned char)w;
    ShowBcdByte(32, 4, bufTime.week);
}



回复

使用道具 举报

ID:277550 发表于 2018-11-5 19:14 | 显示全部楼层
vc中测试正常,,,,,,好好检查一下各数值。。。。。。。。
回复

使用道具 举报

ID:160658 发表于 2018-11-5 23:53 | 显示全部楼层
devcang 发表于 2018-11-5 19:14
vc中测试正常,,,,,,好好检查一下各数值。。。。。。。。

我的是STC89单片机,折腾了一个晚上,还是没有找出问题
回复

使用道具 举报

ID:388197 发表于 2018-11-6 09:36 | 显示全部楼层
w = (d + 1 + 2*m + 3*(m+1)/5 + y + y/4 - y/100 + y/400)%7;
不要中了谭浩强的遗毒...把这句表达式拆开来写吧...DEBUG的时候也更容易发现问题.
回复

使用道具 举报

ID:373093 发表于 2018-11-6 10:54 | 显示全部楼层

w = (d + 1 + 2*m + 3*(m+1)/5 + y + y/4 - y/100 + y/400)%7;
不要中了谭浩强的遗毒...把这句表达式拆开来写吧...DEBUG的时候也更容易发现问题.

回复

使用道具 举报

ID:160658 发表于 2018-11-6 19:59 | 显示全部楼层
终于搞明白了,感谢各位了!!!
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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