这实际上是我正在使用avr的项目的一部分。我正在通过twi与DS1307实时时钟集成电路连接。它以8个字符的顺序报告信息。它以以下格式返回:

// Second : ds1307[0]
// Minute : ds1307[1]
// Hour   : ds1307[2]
// Day    : ds1307[3]
// Date   : ds1307[4]
// Month  : ds1307[5]
// Year   : ds1307[6]

我想做的是把每一部分时间一点一点地读出来。我想不出办法来做这件事。基本上,如果位是1,则点亮led,但如果位是0,则不点亮led。
我想有一个相当简单的方法可以通过比特移位来实现,但是我不能用手指来理解逻辑。

最佳答案

检查是否设置了位N可以使用如下简单表达式来完成:

(bitmap & (0x1 << N)) != 0

其中,bitmap是包含位的整数值(例如,在您的情况下是64位)。
查找秒数:
(bitmap & 0xFF)

找到分钟:
(bitmap & 0xFF00) >> 8

寻找时间:
(bitmap & 0xFF0000) >> 16

08-19 18:25