标题: C语言与0x80的问题 从高位到低位读数据 [打印本页]

作者: 风之痕于梦想    时间: 2022-9-12 12:56
标题: C语言与0x80的问题 从高位到低位读数据
代码
unsigned int XPT2046_ReadAD(unsigned char Command)
{
        unsigned char i;
        unsigned int Data=0;
        XPY2046_DCLK=0;
        XPY2046_CS=0;
        for(i=0;i<8;i++)
        {
                XPY2046_DIN=Command&(0x80>>i);
                XPY2046_DCLK=1;
                XPY2046_DCLK=0;
        }
}


请问下for(i=0;i<8;i++)
{
  dat=Command&(0x80>>i);

}
是怎么样把Command从高位到低位读出来的,
假设Command是1010 1000
             &0x80   1000 0000
                      =   1000 0000
最终读出来的结果好像是0x80不是1,但是XPY2046_DIN只是一个位,怎么保证读的是1而不是0x80呢?

作者: yzwzfyz    时间: 2022-9-12 14:08
只说取一位的方法,其余7位自己想:
A=INT((dat * 2)/256)
此题用汇编做最方便。
作者: 188610329    时间: 2022-9-12 14:13
这代码有何玄机?  0x80 一定大于i,肯定为真,而你又没if,也没while,这个条件也没利用上啊。
作者: wulin    时间: 2022-9-12 14:56
楼主抄错了,应该是:
        for(i=0;i<8;i++)
        {
                dat |= Command & (0x80>>i);
        }
作者: XCYYLX    时间: 2022-9-12 15:06
运用位运算与逻辑运算读取数据的高位值:  for(i=0;i<8;i++)     {                       OLED_SCLK_Clr();         if(dat&0x80)            OLED_SDIN_Set();         else             OLED_SDIN_Clr();         OLED_SCLK_Set();         dat<<=1;        }     
作者: 逍遥111111    时间: 2022-9-12 15:19
I=0   Command&0x80  ,I=1 0x80右移1位变0100 0000,再与Command做比较,以此类推i=2.3.4.5
作者: hongsehuasheng    时间: 2022-9-12 15:34
0x80第一次确实只读出了首位,但后面还有7次,每次右移一位,不就把剩下7位都读出来了吗?
作者: rundstedt    时间: 2022-9-12 16:23
0x80>i永远成立,你的代码抄错了,贴正确的出来。
作者: imxuheng    时间: 2022-9-12 18:36
感觉不行,这样吧
for(i=0;i<8;i++)
{
if(Command&(0x80>i));
dat|=1;
}

作者: zxq9781    时间: 2022-9-12 18:40
dat=(Command<<1)&0x80;
作者: 北道    时间: 2022-9-12 18:54
第一次循环,先把command的高八位取出来,第二次循环,0x80右移一位变成01000000,这样就可以取出第七位了.就这样直到第一位
作者: cuihaodianzi    时间: 2022-9-12 20:47
>> 这是右移,>这是大于,用右移就对了,再把 dat 也一起右移 8-i
for(i = 0; i < 8; i++)
{
  dat = Command&(0x80>>i);
  dat = dat >>(8-i);
  printf("..... %d\r\n,"dat );
}




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1