C 将 char 读取为二进制
这实际上是我正在使用 avr 进行的项目的一部分。我通过 twi 与 DS1307 实时时钟 IC 连接。它将信息报告为一系列 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,则不会点亮。
我想有一种相当简单的方法可以通过位移来实现这一点,但我无法具体说明执行此操作的逻辑。
This is actually part of a project I'm working on using an avr. I'm interfacing via twi with a DS1307 real-time clock IC. It reports information back as a series of 8 chars. It returns in the format:
// Second : ds1307[0]
// Minute : ds1307[1]
// Hour : ds1307[2]
// Day : ds1307[3]
// Date : ds1307[4]
// Month : ds1307[5]
// Year : ds1307[6]
What I would like to do is take each part of the time and read it bit by bit. I can't think of a way to do this. Basically lighting up an led if the bit is a 1, but not if it's a 0.
I'd imagine that there is a rather simple way to do it by bitshifting, but I can't put my finger on the logic to do it.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
检查位 N 是否已设置可以使用简单的表达式来完成,例如:
其中位图是包含位的整数值(例如,在您的情况下为 64 位)。
求秒:
求分钟:
求小时:
Checking whether the bit N is set can be done with a simple expression like:
where bitmap is the integer value (e.g. 64 bit in your case) containing the bits.
Finding the seconds:
Finding the minute:
Finding the hour:
如果我的解释正确,以下内容将从最低到最高迭代所有位。即,秒的 8 位,后面是分钟的 8 位,依此类推。
If I'm interpreting you correctly, the following iterates over all the bits from lowest to highest. That is, the 8 bits of Seconds, followed by the 8 bits of Minutes, etc.
是的 - 您可以使用
>>
将位右移一位,而& 1
获取最低有效位的值:(这将检查从最低有效位到最高有效位的位。顺便说一句,您的示例数组只有 7 个字节,而不是 8 个...)
Yes - you can use
>>
to shift the bits right by one, and& 1
to obtain the value of the least significant bit:(This will examine the bits from least to most significant. By the way, your example array only has 7 bytes, not 8...)
本质上,如果以二进制格式显示秒数的 6 个 LED 连接到 PORTA2-PORTA7,您可以
PORTA = ds1307[0]
让秒数自动正确点亮。essentially, if the 6 LEDs to show the seconds in binary format are connected to PORTA2-PORTA7, you can
PORTA = ds1307[0]
to have the seconds automatically lit up correctly.