首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > 单片机 >

51单片机怎么读取二进制中的每一位

2012-03-30 
51单片机如何读取二进制中的每一位?char achar sz[8]a0x61for(i0i8i++){sz[i]???}如何才能取出 a

51单片机如何读取二进制中的每一位?
char a;
char sz[8];
a=0x61;



for(i=0;i<8;i++)
{
  sz[i]=???
}


如何才能取出 a (十六进制的0x61,二进制的01100001)  
这个二进制中的每一位并放到sz(数组)中
我要得到的数组结果为
sz[0]=0
sz[1]=1
sz[2]=1
sz[3]=0
sz[4]=0
sz[5]=0
sz[6]=0
sz[7]=1






同样的我如何再返回去


通过一个表示二进制的数组 变成 一个16进制数


我的目的是用一个IO口分8次显示一个16进制数
例如上面的a
就依次显示
灭亮亮灭灭灭灭亮
每次显示一秒钟分8秒钟显示完成




小弟刚试玩单片机没有什么概念,望高手指点一二

[解决办法]
unsigned char A = 0x61;
unsigned char cont = 0x01;//索引
for(i = 0; i < 8; i++, cont <<= 1)
{
if (cont & A)
sz[i] = 1;
else
sz[i] = 0;
}

大概这个样子,反回去那就自己想想看怎么弄
[解决办法]
unsigned char A = 0x61;
unsigned char cont = 0x80;
for(i = 0; i < 8; i++)
{
if (cont & A)
sz[i] = 1;
else
sz[i] = 0;

A <<= 1;
}

unsigned char temp=0;
for(i=0;i<8;i++)
{
temp >>= 1;
if(sz[i])
{
temp |= 0x80;
}
}
return temp;
[解决办法]

探讨
unsigned char A = 0x61;
unsigned char cont = 0x01;//索引
for(i = 0; i < 8; i++, cont <<= 1)
{
if (cont &amp; A)
sz[i] = 1;
else
sz[i] = 0;
}

大概这个样子,反回去那就自己想想看怎么弄

[解决办法]
探讨

unsigned char A = 0x61;
unsigned char cont = 0x01;//索引
for(i = 0; i < 8; i++, cont <<= 1)
{
if (cont &amp; A)
sz[i] = 1;
else
sz[i] = 0;
}

基本上没什么难度

大概这个样子,反回去那就自己想想看怎么弄

[解决办法]
unsigned char a;
unsigned char sz[8];
unsigned char a=0x61;
for(i=0;i<8;i++)
{
a<<1;
if(cy)
{
sz[i]=1;
}
else
{
sz[i]=0;
}
}



[解决办法]
一个很简单的方法就是位屏蔽
你可以将你要的为保留下来不要的和0与不就行了这样的话你就按顺序屏蔽每一位就好了
比如说你的数是a=0x56二进制是01010110,
for(int i=0;i<8;i++)
{
P1=a&(0x01<<i)
delay();
}
我感觉这样最省不用另开空间而且也不用赋值,直接给P1口就好了
按位与知道吧,不知道百度去
呵呵

热点排行