求指导 if((temp&0x80)==0x80)
本帖最后由 yaoyao1314 于 2013-3-10 10:56 编辑void WR_SO12864(unsigned char dat_comm,unsigned char content)
{
unsigned char i,j,temp;
temp=content;
if(dat_comm==0)
SO12864_A0_OUT =0;
else
SO12864_A0_OUT =1;
SO12864_SCL_OUT=0;
for(i=0;i<8;i++)
{
if((temp&0x80)==0x80) ///这里为什么要加一个按位与的运算呢?这是做液晶显示的一段代码
{
SO12864_SI_OUT=1;
}
else
{
SO12864_SI_OUT=0;
}
for(j=0;j<10;j++);
SO12864_SCL_OUT=1;
for(j=0;j<10;j++);
SO12864_SCL_OUT=0;
for(j=0;j<10;j++);
temp<<=1;
}
} 从最高位开始发送数据 如果Bit7为高 则Data置高 否则置低 然后将数据右移一位 Bit6变成Bit7 如此循环以完成一个字节的发送 整个函数是完成这样的功能,但是这个判断 if((temp&0x80)==0x80) ///这里为什么要加一个按位与的运算呢?这是做液晶显示的一段代码
我不明白为什么要加上这个 判断Bit7是否为高呀…… yaoyao1314 发表于 2013-3-10 12:08 static/image/common/back.gif
整个函数是完成这样的功能,但是这个判断 if((temp&0x80)==0x80) ///这里为什么要加一个按位与的运算呢?这 ...
if((temp&0x80)==0x80)这句其实就是判断temp最高位是零还是一 啊 当==0x80的话 说明temp的最高位是1否则是0 啊 明白啦谢谢两位的耐心指导! 这样写不知道编译器会不会进行优化,位与之后,再与0x80进行比较。
如果写成if ( ( temp & 0x80) !=0 ),可以位与之后利用状态寄存器跳转,无需进行比较运算。 直接这样
if(temp&0x80)
{
}
esle
{
} 我的神 怎么结贴啊! yaoyao1314 发表于 2013-3-16 12:29 static/image/common/back.gif
我的神 怎么结贴啊!
https://bbs.21ic.com/icview-442857-1-1.html
页:
[1]