找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2536|回复: 7
收起左侧

新人学51单片机C语言求解释tmp = *src >> 4 if (tmp <= 9)

[复制链接]
ID:594148 发表于 2019-8-2 15:05 | 显示全部楼层 |阅读模式
为什么tmp = *src >> 4 if (tmp <= 9) 能取高四位,取出来tmp的值是什么


void MemToStr(unsigned char *str, unsigned char *src, unsigned char len)
{
unsigned char tmp;
while (len--)
{
tmp = *src >> 4; //先取高 4 位
if (tmp <= 9) //转换为 0-9 或 A-F
*str++ = tmp + '0';
else
*str++ = tmp - 10 + 'A';
tmp = *src & 0x0F; //再取低 4 位
if (tmp <= 9) //转换为 0-9 或 A-F
*str++ = tmp + '0';
else
*str++ = tmp - 10 + 'A';
*str++ = ' '; //转换完一个字节添加一个空格
src++;
}
*str = '\0'; //添加字符串结束符
}


回复

使用道具 举报

ID:235200 发表于 2019-8-2 19:09 | 显示全部楼层
右移4位就是把高4位移到了低4位,如11110000右移后的结果是00001111,所取出来的码称为压缩BCD码,即高4位和低4位的值分别单独看待,一般均在0000观察家1001之间,对应十进制数0到9,后面加上‘0‘就是转换成对应的ASCII码用于显示
回复

使用道具 举报

ID:505677 发表于 2019-8-2 19:10 | 显示全部楼层
右移四位  举个例子 1101 0010 右移四位不就是 0000 1101 高位不就到低位来了  (我也是新人 哈    还是多百度一下就好了)
回复

使用道具 举报

ID:554258 发表于 2019-8-2 19:20 | 显示全部楼层
一个字节有8位二进制数组成,*src >> 4是左移动4位,剩下的高4位到了低4位的位置,所以能取高4位
举个例子  *src= 0x3f;  *src >> 4是左移动4位后 ,*src= 0x3,后面的f在左移过程中消失.所以temp=3
后面的 tmp + '0'; 是将数字变成字符因为字符’0‘的 ASCII是0x30 数字0的ASCII=0
明白了吗
回复

使用道具 举报

ID:351097 发表于 2019-8-2 21:43 | 显示全部楼层
它这个函数主要是把输入的数据转化为0-f字符,假设输入的数据*SCR=0XBC,
回复

使用道具 举报

ID:351097 发表于 2019-8-2 21:50 | 显示全部楼层
它这个函数主要功能是将数据转换为0-f的字符。假设*scr=0x3c,那temp=*scr>>4,那么tmp=0x03,加上‘0’,则为字符‘3’;tmp=*scr&0x0f,那么tmp=0x0c,加上‘a’,则为字符‘c’。就把0x3f转化为‘3’和‘f’2个字。转化为字符后,方便传到LCD驱动的函数显示出来
回复

使用道具 举报

ID:594148 发表于 2019-8-3 16:22 | 显示全部楼层
zlzfc 发表于 2019-8-2 19:20
一个字节有8位二进制数组成,*src >> 4是左移动4位,剩下的高4位到了低4位的位置,所以能取高4位
举个例子  ...

明白了谢谢
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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