这实际上是我正在使用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