找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2580|回复: 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呢?
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
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);
        }
回复

使用道具 举报

5#
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;        }     
回复

使用道具 举报

6#
ID:958776 发表于 2022-9-12 15:19 | 只看该作者
I=0   Command&0x80  ,I=1 0x80右移1位变0100 0000,再与Command做比较,以此类推i=2.3.4.5
回复

使用道具 举报

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

使用道具 举报

8#
ID:879809 发表于 2022-9-12 16:23 | 只看该作者
0x80>i永远成立,你的代码抄错了,贴正确的出来。
回复

使用道具 举报

9#
ID:151348 发表于 2022-9-12 18:36 | 只看该作者
感觉不行,这样吧
for(i=0;i<8;i++)
{
if(Command&(0x80>i));
dat|=1;
}
回复

使用道具 举报

10#
ID:60656 发表于 2022-9-12 18:40 | 只看该作者
dat=(Command<<1)&0x80;
回复

使用道具 举报

11#
ID:1042116 发表于 2022-9-12 18:54 | 只看该作者
第一次循环,先把command的高八位取出来,第二次循环,0x80右移一位变成01000000,这样就可以取出第七位了.就这样直到第一位
回复

使用道具 举报

12#
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 单片机教程网

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