74hc138 led副程式
2024/09/06 23:12
瀏覽23
迴響0
推薦0
引用0
// 控制LED亮灭,led_index为LED的序号(0-7)
void control_led(unsigned char led_index) {
A = led_index & 0x01; // A为最低位
B = (led_index >> 1) & 0x01; // B为次低位
C = (led_index >> 2) & 0x01; // C为最高位
}
= led_index & 0x01;
这个操作是取led_index的最低位(也就是二进制数的最右边一位)。
0x01是一个十六进制数,表示二进制的00000001。
& 是按位与运算符,它会将led_index的每一位与0x01的对应位进行按位比较,结果就是保留最低位的值,而其他位都会被清零。
例子:
如果led_index = 5(二进制:101),A = 5 & 0x01 结果是 1。
如果led_index = 2(二进制:010),A = 2 & 0x01 结果是 0。
B = (led_index >> 1) & 0x01;
这个操作首先将led_index右移一位,然后取该结果的最低位:
>> 1 是右移运算符,它将led_index的所有二进制位向右移动一位,相当于将数值除以2。
如果led_index = 5(二进制:101),5 >> 1 结果是 10,再与0x01按位与,B = 1。
如果led_index = 2(二进制:010),2 >> 1 结果是 1,再与0x01按位与,B = 1。
C = (led_index >> 2) & 0x01;
这个操作是将led_index右移两位,然后取该结果的最低位:
>> 2 将led_index向右移两位,相当于将数值除以4。这个操作是将led_index右移两位,然后取该结果的最低位:
>> 2 将led_index向右移两位,相当于将数值除以4。
如果led_index = 5(二进制:101),5 >> 2 结果是 1,再与0x01按位与,C = 1。
如果led_index = 2(二进制:010),2 >> 2 结果是 0,再与0x01按位与,C = 0
通过这三步操作,led_index的二进制表示的三个位(从低到高分别是A、B、C)被提取出来,分配给74HC138的地址输入A、B、C。根据这些输入,74HC138将选择一个对应的输出Y0到Y7,用来驱动相应的LED或设备。
例子:
如果led_index = 5,其二进制表示为101,则:
A = 1(最低位)
B = 0(次低位)
C = 1(最高位)
这种情况下,74HC138将激活输出Y5,从而控制第5个LED或设备。
右移运算符 >> 1 会将一个二进制数的每一位向右移动1位,最右边的位被丢弃,而最左边的位补零。右移1位相当于将数值除以2,丢掉余数并保留整数部分。例如:
5 >> 1 结果为 2
6 >> 1 结果为 3
1 >> 1 结果为 0
限會員,要發表迴響,請先登入



