打印

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

[复制链接]
6690|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是否为高呀……

使用特权

评论回复
5
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 很给力!
6
yaoyao1314|  楼主 | 2013-3-10 13:31 | 只看该作者
明白啦谢谢两位的耐心指导!

使用特权

评论回复
7
ddb_21ic| | 2013-3-11 09:46 | 只看该作者
这样写不知道编译器会不会进行优化,位与之后,再与0x80进行比较。
如果写成if ( ( temp & 0x80) !=0 ),可以位与之后利用状态寄存器跳转,无需进行比较运算。

使用特权

评论回复
8
星火燎原| | 2013-3-11 11:14 | 只看该作者
直接这样
if(temp&0x80)
{

}
esle
{

}

使用特权

评论回复
9
yaoyao1314|  楼主 | 2013-3-16 12:29 | 只看该作者
我的神 怎么结贴啊!

使用特权

评论回复
10
refee| | 2013-3-16 15:27 | 只看该作者
yaoyao1314 发表于 2013-3-16 12:29
我的神 怎么结贴啊!

https://bbs.21ic.com/icview-442857-1-1.html

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

13

主题

52

帖子

0

粉丝