大家好:DS12C887时钟芯片,设置成12小时制,上午 和下午,怎么设置和读取。
3条回答 默认 最新
- 丘比特惩罚陆 2023-03-30 08:44关注
有缘 刚好我也要实现这个功能!以下是我给的思路和方法:
第一步:设置12小时制
将DS12C887的寄存器B的第1位(即Bit 1)设置为1,即可将时钟芯片设置为12小时制。// 设置为12小时制 void set12HourFormat() { byte value = readRegister(REG_B); writeRegister(REG_B, value | 0x02); }
其中,readRegister和writeRegister函数用于读写DS12C887的寄存器,具体实现可以参考你的DS12C887的数据手册。
第二步:设置上午和下午
在12小时制下,DS12C887会自动识别上午和下午。如果要设置时钟芯片的时间,只需将小时的值设置为1到12之间的整数即可。例如,如果要将时间设置为下午2点,只需将小时的值设置为14即可。
第三步:读取时间
在12小时制下,DS12C887的小时值范围为1到12。如果小时值大于12,则表示当前时间是下午,并且小时值需要减去12才是实际的小时值。void readTime() { byte second = readRegister(REG_SEC); byte minute = readRegister(REG_MIN); byte hour = readRegister(REG_HOUR); byte ampm = hour & 0x80; hour &= 0x7F; if (hour == 0) { hour = 12; } if (ampm) { Serial.print(hour); Serial.print(":"); Serial.print(minute); Serial.print(":"); Serial.print(second); Serial.println(" PM"); } else { Serial.print(hour); Serial.print(":"); Serial.print(minute); Serial.print(":"); Serial.print(second); Serial.println(" AM"); } }
void readTime() { byte second = readRegister(REG_SEC); byte minute = readRegister(REG_MIN); byte hour = readRegister(REG_HOUR); byte ampm = hour & 0x80; hour &= 0x7F; if (hour == 0) { hour = 12; } if (ampm) { Serial.print(hour); Serial.print(":"); Serial.print(minute); Serial.print(":"); Serial.print(second); Serial.println(" PM"); } else { Serial.print(hour); Serial.print(":"); Serial.print(minute); Serial.print(":"); Serial.print(second); Serial.println(" AM"); } }
其中,ampm变量用于保存小时值的最高位,如果最高位为1,则表示当前时间是下午;否则表示当前时间是上午。hour &= 0x7F用于将最高位清零,获取实际的小时值。最后,根据小时值和ampm变量的值,可以打印出当前的时间。
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报
悬赏问题
- ¥50 三种调度算法报错 有实例
- ¥15 关于#python#的问题,请各位专家解答!
- ¥200 询问:python实现大地主题正反算的程序设计,有偿
- ¥15 smptlib使用465端口发送邮件失败
- ¥200 总是报错,能帮助用python实现程序实现高斯正反算吗?有偿
- ¥15 对于squad数据集的基于bert模型的微调
- ¥15 为什么我运行这个网络会出现以下报错?CRNN神经网络
- ¥20 steam下载游戏占用内存
- ¥15 CST保存项目时失败
- ¥20 java在应用程序里获取不到扬声器设备