求指导 if((temp&0x80)==0x80)

[复制链接]
7316|9
 楼主| yaoyao1314 发表于 2013-3-10 10:55 | 显示全部楼层 |阅读模式
本帖最后由 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;
  }
}
refee 发表于 2013-3-10 11:23 | 显示全部楼层
从最高位开始发送数据 如果Bit7为高 则Data置高 否则置低 然后将数据右移一位 Bit6变成Bit7 如此循环以完成一个字节的发送

评分

参与人数 1威望 +1 收起 理由
yaoyao1314 + 1 很给力!

查看全部评分

 楼主| yaoyao1314 发表于 2013-3-10 12:08 | 显示全部楼层
整个函数是完成这样的功能,但是这个判断 if((temp&0x80)==0x80) ///这里为什么要加一个按位与的运算呢?这是做液晶显示的一段代码
我不明白为什么要加上这个
refee 发表于 2013-3-10 12:53 | 显示全部楼层
判断Bit7是否为高呀……
zhangmangui 发表于 2013-3-10 12:55 | 显示全部楼层
yaoyao1314 发表于 2013-3-10 12:08
整个函数是完成这样的功能,但是这个判断 if((temp&0x80)==0x80) ///这里为什么要加一个按位与的运算呢?这 ...

if((temp&0x80)==0x80)这句其实就是判断temp最高位是零还是一 啊    当==0x80的话 说明temp的最高位是1  否则是0 啊

评分

参与人数 1威望 +1 收起 理由
yaoyao1314 + 1 很给力!

查看全部评分

 楼主| yaoyao1314 发表于 2013-3-10 13:31 | 显示全部楼层
明白啦谢谢两位的耐心指导!
ddb_21ic 发表于 2013-3-11 09:46 | 显示全部楼层
这样写不知道编译器会不会进行优化,位与之后,再与0x80进行比较。
如果写成if ( ( temp & 0x80) !=0 ),可以位与之后利用状态寄存器跳转,无需进行比较运算。
星火燎原 发表于 2013-3-11 11:14 | 显示全部楼层
直接这样
if(temp&0x80)
{

}
esle
{

}
 楼主| yaoyao1314 发表于 2013-3-16 12:29 | 显示全部楼层
我的神 怎么结贴啊!
refee 发表于 2013-3-16 15:27 | 显示全部楼层
yaoyao1314 发表于 2013-3-16 12:29
我的神 怎么结贴啊!

https://bbs.21ic.com/icview-442857-1-1.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则

13

主题

52

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部