标题:
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