找回密码
 立即注册

QQ登录

只需一步,快速开始

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

DS1302小时由24小时制改成12小时制 单片机编程的困惑

[复制链接]
跳转到指定楼层
楼主
红框圈起来的0x11,代表小时初值是11,现在是24小时制  我想改成12小时制  根据手册D7为1代表12小时制
所以我改成0x11|0x91    因为初值是11   即0x11==0001 0001     而或上0x91 即1001  0001  
结果是想让D7=1 ,而D1还是11点的第一个1  D0到D3还是11点的第二个1
但是实际结果是显示91  请教大家  应该怎么改


下图是1302读写寄存器地址及时间初值数组


下图是1302初始化


下图是时间换算函数


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

使用道具 举报

沙发
ID:370913 发表于 2018-7-31 17:02 | 只看该作者
        0x85是时的地址 bit5,bit7是选择12小时制还是24小时制,关键在于显示,与12小时有关的是bit0~bit4,在设定过12小时后,将要显示的代表小时的time[2]去掉无关的位,即通过移位将bit5~bit7全变成0
具体代码如下
       void Ds1302ReadTime()
{
        uchar i;
        for (i=0; i<7; i++)//读取7个字节的时钟信号:分秒时日月周年
        {
                time[i] =Read_add(read_addr[i]);
        }
        Write_add(0x8e,0x00);//禁止写保护位
        time[2]=Read_add(0x85);//! ! !此处是将24小时制转为12小时制,关键就在于显示,与12小时有关的是bit0~bit4,因此,读到的值需要去掉无关的位,否则0xb2显示的小时就是:2了
        time[2]<<=3;
        time[2]>>=3;
        Write_add(0x8e,0x80);         
}
               
回复

使用道具 举报

板凳
ID:1095747 发表于 2024-4-11 22:41 | 只看该作者
ckeai 发表于 2018-7-31 17:02
0x85是时的地址 bit5,bit7是选择12小时制还是24小时制,关键在于显示,与12小时有关的是bit0~bit4,在设定 ...

大佬牛逼
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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