C51中“bit”是如何使用的?
一下程序为74HC595串行移入一个字节后输出寄存器。请问一下“bit”是如何实现从高位到低位分别移入的?“bit”怎么用?#include<regx52.h>sbits...
一下程序为74HC595串行移入一个字节后输出寄存器。请问一下“bit”是如何实现从高位到低位分别移入的?“bit”怎么用?
#include <regx52.h>
sbit sclk=P2^0;
sbit sda=P2^1;
sbit slck=P2^2;
int tab[10]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};
void delay()
{
int i,j;
for(i=0;i<255;i++)
for(j=0;j<80;j++);
}
void bit_dat(bit i)
{ sclk=0;
sda=i;
sclk=1;
}
void dat(char i)
{
slck=0;
bit_dat((bit)(tab[i]&0x80));
bit_dat((bit)(tab[i]&0x40));
bit_dat((bit)(tab[i]&0x20));
bit_dat((bit)(tab[i]&0x10));
bit_dat((bit)(tab[i]&0x08));
bit_dat((bit)(tab[i]&0x04));
bit_dat((bit)(tab[i]&0x02));
bit_dat((bit)(tab[i]&0x01));
slck=1;
}
main()
{ int i;
while(1)
{
for(i=0;i<10;i++)
{dat(i);
delay();
}
i=0;
}
} 展开
#include <regx52.h>
sbit sclk=P2^0;
sbit sda=P2^1;
sbit slck=P2^2;
int tab[10]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};
void delay()
{
int i,j;
for(i=0;i<255;i++)
for(j=0;j<80;j++);
}
void bit_dat(bit i)
{ sclk=0;
sda=i;
sclk=1;
}
void dat(char i)
{
slck=0;
bit_dat((bit)(tab[i]&0x80));
bit_dat((bit)(tab[i]&0x40));
bit_dat((bit)(tab[i]&0x20));
bit_dat((bit)(tab[i]&0x10));
bit_dat((bit)(tab[i]&0x08));
bit_dat((bit)(tab[i]&0x04));
bit_dat((bit)(tab[i]&0x02));
bit_dat((bit)(tab[i]&0x01));
slck=1;
}
main()
{ int i;
while(1)
{
for(i=0;i<10;i++)
{dat(i);
delay();
}
i=0;
}
} 展开
展开全部
比如i=0时,tab[i]的值为0x3f,那么这句bit_dat((bit)(tab[i]&0x80));的作用是:
第一步:tab[i]与0x80作位与,即0x3f与0x80作位与(与0x40相位与就是取了第6位),这样的效果是取得了0x3f的最高位(第7位),其它位全部被屏蔽为0
第二步:作int向bit强制转换,向bit转换有一个规则,只要待转换前变量是非零,转换后的bit类型变量即为1,否则为0,这里,0x3f&0x80的结果为0,也就是((bit)(tab[i]&0x80))的结果为0
第三步:调用bit_dat函数,向外设写入这一位。
后面的(bit_dat((bit)(tab[i]&0x40))句子就是取次高位,后面的依此类推,就可以从高位取到低位了。
第一步:tab[i]与0x80作位与,即0x3f与0x80作位与(与0x40相位与就是取了第6位),这样的效果是取得了0x3f的最高位(第7位),其它位全部被屏蔽为0
第二步:作int向bit强制转换,向bit转换有一个规则,只要待转换前变量是非零,转换后的bit类型变量即为1,否则为0,这里,0x3f&0x80的结果为0,也就是((bit)(tab[i]&0x80))的结果为0
第三步:调用bit_dat函数,向外设写入这一位。
后面的(bit_dat((bit)(tab[i]&0x40))句子就是取次高位,后面的依此类推,就可以从高位取到低位了。
参考资料: 无
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询