找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3123|回复: 11
收起左侧

C语言与0x80的问题 从高位到低位读数据

  [复制链接]
ID:893997 发表于 2022-9-12 12:56 | 显示全部楼层 |阅读模式
代码
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呢?
回复

使用道具 举报

ID:123289 发表于 2022-9-12 14:08 | 显示全部楼层
只说取一位的方法,其余7位自己想:
A=INT((dat * 2)/256)
此题用汇编做最方便。
回复

使用道具 举报

ID:624769 发表于 2022-9-12 14:13 来自触屏版 | 显示全部楼层
这代码有何玄机?  0x80 一定大于i,肯定为真,而你又没if,也没while,这个条件也没利用上啊。
回复

使用道具 举报

ID:213173 发表于 2022-9-12 14:56 | 显示全部楼层
楼主抄错了,应该是:
        for(i=0;i<8;i++)
        {
                dat |= Command & (0x80>>i);
        }
回复

使用道具 举报

ID:999824 发表于 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;        }     
回复

使用道具 举报

ID:958776 发表于 2022-9-12 15:19 | 显示全部楼层
I=0   Command&0x80  ,I=1 0x80右移1位变0100 0000,再与Command做比较,以此类推i=2.3.4.5
回复

使用道具 举报

ID:1041200 发表于 2022-9-12 15:34 | 显示全部楼层
0x80第一次确实只读出了首位,但后面还有7次,每次右移一位,不就把剩下7位都读出来了吗?
回复

使用道具 举报

ID:879809 发表于 2022-9-12 16:23 | 显示全部楼层
0x80>i永远成立,你的代码抄错了,贴正确的出来。
回复

使用道具 举报

ID:151348 发表于 2022-9-12 18:36 | 显示全部楼层
感觉不行,这样吧
for(i=0;i<8;i++)
{
if(Command&(0x80>i));
dat|=1;
}
回复

使用道具 举报

ID:60656 发表于 2022-9-12 18:40 | 显示全部楼层
dat=(Command<<1)&0x80;
回复

使用道具 举报

ID:1042116 发表于 2022-9-12 18:54 | 显示全部楼层
第一次循环,先把command的高八位取出来,第二次循环,0x80右移一位变成01000000,这样就可以取出第七位了.就这样直到第一位
回复

使用道具 举报

ID:149144 发表于 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 );
}
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表