OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 13126|回复: 10

OLED if(temp&0x80)OLED_DrawPoint(x,y,mode);

[复制链接]

41

主题

103

帖子

0

精华

初级会员

Rank: 2

积分
144
金钱
144
注册时间
2018-1-18
在线时间
23 小时
发表于 2018-9-6 00:52:53 | 显示全部楼层 |阅读模式
3金钱
  请问这个语句的功能是什么?0x80是什么意思?
if(temp&0x80)OLED_DrawPoint(x,y,mode);



void OLED_ShowChar(u8 x,u8 y,u8 chr,u8 size,u8 mode)

{ //当显示第一个字符A时chr=65,也就是A的ASCII值,但是A
//在字符码表中的的位置确在第33行,所以65要减去32或减去' '
//(ASCII值为32),才能准确的确定A在字符码表中的位置
//所以 chr=chr-' '也就好理解了
u8 temp,t,t1;
u8 y0=y;
u8 csize=(size/8+((size%8)?1:0))*(size/2);  //得到字体一个字符对应点阵集所占的字节数
//chr=chr-32;//得到偏移后的值
  chr=chr-' ';//得到偏移后的值   
    for(t=0;t<csize;t++)
    {   
  if(size==12)temp=asc2_1206[chr][t];    //调用1206字体
  else if(size==16)temp=asc2_1608[chr][t]; //调用1608字体
  else if(size==24)temp=asc2_2412[chr][t]; //调用2412字体
  else return;        //没有的字库
        for(t1=0;t1<8;t1++)
  {
   if(temp&0x80)OLED_DrawPoint(x,y,mode);
   else OLED_DrawPoint(x,y,!mode);
   temp<<=1;
   y++;
   if((y-y0)==size)
   {
    y=y0;
    x++;
    break;
   }
  }   
    }         
}

最佳答案

查看完整内容[请看2#楼]

自己测试下就出结果了。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165352
金钱
165352
注册时间
2010-12-1
在线时间
2108 小时
发表于 2018-9-6 00:52:54 | 显示全部楼层
自己测试下就出结果了。
回复

使用道具 举报

109

主题

5562

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
10541
金钱
10541
注册时间
2017-2-18
在线时间
1908 小时
发表于 2018-9-6 12:35:49 | 显示全部楼层
回复

使用道具 举报

41

主题

103

帖子

0

精华

初级会员

Rank: 2

积分
144
金钱
144
注册时间
2018-1-18
在线时间
23 小时
 楼主| 发表于 2018-9-6 18:29:32 | 显示全部楼层
temp是ASCII字符点阵中的值,为什么取其最高位如果是1就是点亮,是0就是清除呢?
回复

使用道具 举报

41

主题

103

帖子

0

精华

初级会员

Rank: 2

积分
144
金钱
144
注册时间
2018-1-18
在线时间
23 小时
 楼主| 发表于 2018-9-6 19:31:56 | 显示全部楼层
我看懂了,谢谢你!
回复

使用道具 举报

41

主题

103

帖子

0

精华

初级会员

Rank: 2

积分
144
金钱
144
注册时间
2018-1-18
在线时间
23 小时
 楼主| 发表于 2018-9-6 19:32:29 | 显示全部楼层
正点原子 发表于 2018-9-6 00:52
自己测试下就出结果了。

我看懂了,谢谢你
回复

使用道具 举报

41

主题

103

帖子

0

精华

初级会员

Rank: 2

积分
144
金钱
144
注册时间
2018-1-18
在线时间
23 小时
 楼主| 发表于 2018-9-6 19:32:52 | 显示全部楼层
peng1554 发表于 2018-9-6 12:35
http://www.openedv.com/posts/list/52221.htm

我看懂了,谢谢你!
回复

使用道具 举报

0

主题

8

帖子

0

精华

新手上路

积分
20
金钱
20
注册时间
2021-3-24
在线时间
1 小时
发表于 2021-3-25 00:07:04 | 显示全部楼层
zhangzhiheng 发表于 2018-9-6 18:29
temp是ASCII字符点阵中的值,为什么取其最高位如果是1就是点亮,是0就是清除呢?

oled是按8位数据传输,不是按一位。
回复

使用道具 举报

0

主题

8

帖子

0

精华

新手上路

积分
20
金钱
20
注册时间
2021-3-24
在线时间
1 小时
发表于 2021-3-25 00:13:33 | 显示全部楼层
zhangzhiheng 发表于 2018-9-6 19:32
我看懂了,谢谢你!

你懂什么了?
回复

使用道具 举报

0

主题

4

帖子

0

精华

新手上路

积分
42
金钱
42
注册时间
2021-6-9
在线时间
13 小时
发表于 2021-11-4 15:04:34 | 显示全部楼层
0X80是十六进制表示方法,转换成二进制是(1000 0000), temp中有一个8位的元素如(0111  0101)用十六进制表示就是0X75,这个8位元素从最高位0开始和0X80(1000 0000)做与运算,如果运算为1(也就是真)则执行画点函数OLED_DrawPoint(x,y,mode);让这个位的LED点亮
回复

使用道具 举报

0

主题

1

帖子

0

精华

新手上路

积分
20
金钱
20
注册时间
2020-6-9
在线时间
5 小时
发表于 2022-12-3 11:45:40 | 显示全部楼层
愤怒的电容 发表于 2021-11-4 15:04
0X80是十六进制表示方法,转换成二进制是(1000 0000), temp中有一个8位的元素如(0111  0101)用十六进 ...

最高位后面为什么是temp<<1是左移1位而不是右移1呢
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-24 20:34

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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