OpenEdv-开源电子网

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

请教OLED的程序

[复制链接]

14

主题

38

帖子

0

精华

初级会员

Rank: 2

积分
113
金钱
113
注册时间
2015-4-28
在线时间
2 小时
发表于 2015-5-14 22:30:29 | 显示全部楼层 |阅读模式
5金钱
红色的部分不懂,为什么是 temp&0x80 ,代表啥意思啊?还有那个什么正常显示,反白显示是啥东东?什么样的是反白显示屏幕上有什么特征
void OLED_ShowChar(u8 x,u8 y,u8 chr,u8 size,u8 mode)
{          
u8 temp,t,t1;
u8 y0=y;
u8 csize=(size/8+((size%8)?1:0))*(size/2); 
chr=chr-' ';
    for(t=0;t<csize;t++)
    {   
if(size==12)temp=asc2_1206[chr][t];
else if(size==16)temp=asc2_1608[chr][t];
else if(size==24)temp=asc2_2412[chr][t];
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#楼]

取模是高位在前的形式   temp&0x80  用于判断当前temp 最高位是0还是1   是1就点亮  0就清除 正常显示   点亮OLED是蓝色点   清除是黑屏    反白显示就是反过来   点亮的部分清黑屏    不亮的部分显示蓝色
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

3

主题

2170

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
5782
金钱
5782
注册时间
2013-11-22
在线时间
1212 小时
发表于 2015-5-14 22:30:30 | 显示全部楼层
取模是高位在前的形式   temp&0x80  用于判断当前temp 最高位是0还是1   是1就点亮  0就清除
正常显示   点亮OLED是蓝色点   清除是黑屏    反白显示就是反过来   点亮的部分清黑屏    不亮的部分显示蓝色
回复

使用道具 举报

14

主题

490

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1229
金钱
1229
注册时间
2012-8-4
在线时间
248 小时
发表于 2015-5-14 22:32:58 | 显示全部楼层
这是问答会了,等坛主来吧
nrf51822蓝牙4.0手环开发板: 淘宝小店
回复

使用道具 举报

14

主题

38

帖子

0

精华

初级会员

Rank: 2

积分
113
金钱
113
注册时间
2015-4-28
在线时间
2 小时
 楼主| 发表于 2015-5-14 22:38:37 | 显示全部楼层
回复【2楼】muniao:
---------------------------------
你知道不?为什么 temp&0x80啊 这个条件
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2015-5-14 22:49:03 | 显示全部楼层
楼主自己多写写代码吧。。。
不懂我也没办法,啥都不懂我也不说啥了,多自己动动手先。
回去打好基础先。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

14

主题

38

帖子

0

精华

初级会员

Rank: 2

积分
113
金钱
113
注册时间
2015-4-28
在线时间
2 小时
 楼主| 发表于 2015-5-15 10:20:35 | 显示全部楼层
回复【4楼】正点原子:
---------------------------------
对于你的回复,我只想说鄙视,有空打那么多废话,不如写些答案,像人家四楼,
回复

使用道具 举报

17

主题

342

帖子

0

精华

高级会员

Rank: 4

积分
544
金钱
544
注册时间
2014-4-24
在线时间
20 小时
发表于 2015-5-15 15:26:14 | 显示全部楼层
回复【6楼】学之杨:
---------------------------------
坛主给些善意的建议,你不领情就算了,还出言不逊。
新手就应该把自己的姿态放低点,问问题的人是你,别这么傲慢和理所当然。
看了你发的好几个帖子,原子帮你解决了好几个问题,并且很多问题具有相似性,要学会理解和举一反三。
帮你回答问题不是别人的义务,别人帮你回答了应当感谢,没正面回答也不应埋怨。
好好学习吧~
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2015-5-15 23:11:41 | 显示全部楼层
真是世态炎凉,人心不古啊。
所谓可怜之人必有可恨之处,我也就睁一只眼闭一只眼,敬而远之。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2015-5-15 23:12:45 | 显示全部楼层
总有人拿着初学者的大棒当挡箭牌,到处挥舞,一副不可一世的样子....
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

14

主题

490

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1229
金钱
1229
注册时间
2012-8-4
在线时间
248 小时
发表于 2015-5-15 23:23:01 | 显示全部楼层
回复【9楼】正点原子:
---------------------------------
哈哈,又逮到你出来灌水了
ps:新手现象好严重了
nrf51822蓝牙4.0手环开发板: 淘宝小店
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2015-5-15 23:31:54 | 显示全部楼层
回复【10楼】muniao:
---------------------------------
是的,后续论坛会改版一下,积分制度用起来,总有那么些人觉得全世界的人都欠他一样....
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

0

主题

133

帖子

0

精华

初级会员

Rank: 2

积分
169
金钱
169
注册时间
2014-12-21
在线时间
1 小时
发表于 2015-5-16 08:41:21 | 显示全部楼层
回复【11楼】正点原子:
---------------------------------
 神兽党大部分是刚离开高中手把手教学环境的大学生,还不太适应自己找食,但偏偏又觉得衣来伸手饭来张口是理所当然。对于这样的人,真的很累啊。敲一下,懂一点,不敲就啥也不懂。
流过汗水才能代表自己真的学会了如何不流汗。
回复

使用道具 举报

17

主题

342

帖子

0

精华

高级会员

Rank: 4

积分
544
金钱
544
注册时间
2014-4-24
在线时间
20 小时
发表于 2015-5-16 12:27:34 | 显示全部楼层
回复【11楼】正点原子:
---------------------------------
回复【12楼】花戒:
---------------------------------
话只要说得稍稍重了一点,这些所谓的新手就辱骂别人。我现在对这些人已经没有回答的热情了。
问问题真的需要智慧,原子哥应该把那个“问问题的智慧”的那个帖子置顶的,这些人太狂妄了,需要治!
回复

使用道具 举报

120

主题

7878

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12012
金钱
12012
注册时间
2013-9-10
在线时间
427 小时
发表于 2015-5-16 12:34:38 | 显示全部楼层
回复【11楼】正点原子:
---------------------------------
现在的人哪有什么心思给你耐心的,都是伸手党多
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2015-5-16 21:20:33 | 显示全部楼层
回复【13楼】STM32VBT6:
---------------------------------
就怕他们不看啊。。。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

14

主题

38

帖子

0

精华

初级会员

Rank: 2

积分
113
金钱
113
注册时间
2015-4-28
在线时间
2 小时
 楼主| 发表于 2015-5-20 12:57:17 | 显示全部楼层
回复【13楼】STM32VBT6:
---------------------------------
首先我承认请教知识是应该虔诚的,那天心情不好是火气有点大是不对。  但是我想请问一下你,假如你买了原子的战舰开发板,然后买的时候,卖家说有不懂的地方都可以在论坛上帮你解决,然后你买了,在论坛上问一个问题,作为新手肯定问的都是比较简单的问题,而他们给你的答案是 “楼主自己去看C语言”,而你问的问题却不是看c语言理论基础知识能解决的,你还会不会像像现在这样站着说话不腰疼
回复

使用道具 举报

14

主题

38

帖子

0

精华

初级会员

Rank: 2

积分
113
金钱
113
注册时间
2015-4-28
在线时间
2 小时
 楼主| 发表于 2015-5-20 13:08:45 | 显示全部楼层
回复【12楼】花戒:
---------------------------------
我想问一下 花戒,你生下来就啥都懂吗? 既然是站长,那如果是免费为别人服务,你可以不回答别人提的问题,甚至挖苦几句,别人也不会说什么,只是心里骂几句,但我想 ,我买了原子的开发板,对里面不懂的东西,卖家也承诺不懂的地方可以在论坛里问。而这个站长我猜肯定也是拿着工资的,对于客户的问题回答也算是一个工作,那我问一个问题,得到的却是挖苦的回答,就算是请教你问题也不应该得到这种待遇,而如果站长是免费为别人弄得,那我可以向他道歉,他有权不回答。
回复

使用道具 举报

0

主题

133

帖子

0

精华

初级会员

Rank: 2

积分
169
金钱
169
注册时间
2014-12-21
在线时间
1 小时
发表于 2015-5-20 23:08:04 | 显示全部楼层
真不错,真不错。
流过汗水才能代表自己真的学会了如何不流汗。
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2015-5-20 23:12:10 | 显示全部楼层
回复【16楼】学之杨:
---------------------------------
该看C语言基础的时候,就要看C语言基础。
我们的答案不是乱答的。

另外,请端正态度提问,就不会有这么多问题了。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

9

主题

20

帖子

0

精华

初级会员

Rank: 2

积分
104
金钱
104
注册时间
2018-7-4
在线时间
18 小时
发表于 2020-3-13 10:42:38 | 显示全部楼层
lycreturn 发表于 2015-5-14 22:30
取模是高位在前的形式&nbsp;&nbsp;&nbsp;temp&0x80&nbsp;&nbsp;用于判断当前temp&nbsp;最高位是0还是1&nbsp ...

诚恳的给你点赞,占着位做着实质的工作,耐心,
回复

使用道具 举报

4

主题

17

帖子

0

精华

初级会员

Rank: 2

积分
127
金钱
127
注册时间
2019-8-5
在线时间
33 小时
发表于 2020-4-13 10:47:37 | 显示全部楼层
这个帖子已发表这么多年了,相信楼主早已成为大师级人物;但是在这里呢我还是想班门弄斧一下,给其他新手多点提示;解决楼主的问题还真涉及到一些基础知识,同时也有一些只看基础知识不一定就能立刻转换思维(举一反三)理解得了的问题;当然啦,一般遇到这个问题的人,多数应该是初学者还不会调试程序导致的,个人增加以下三点来帮助新手理解:
1. else return;前面三个if不执行就会从这里跳出for循环,后面那个for就不会执行,也就是说temp没取到值,后面就没按位与啥事了;这个是C语言基础;
2. temp取到值,取模是高位在前的形式(这个C语言那里我没看到说实话我的基础也一般,可能是我没细看,不过还好只要你用不同的关键词搜索帖子,各路大神多多少少都有提到,再百度一下“取模”就欧了)不是给百度做广告,但是习惯百度真的可以给你减少很多问题,建议先搜论坛,论坛里大神的解答更加到位,遇到大神的提到的不懂得词,再百度这些词;
3. temp<<=1;这句话是理解的关键,其实temp&0x80,就是从高位开始按位与,因为取模是高位在前的形式(如果取模是低位在前的形式,那就要与0x01与了,只是假设)然后temp左移一位(temp<<=1)再次按位与最高位,,按位与全1出1,全1就画点;

你肯定学过C语言,可以把这个函数拷贝到你学C语言时用的工具环境里,重新把参数定义一下,然后调试一下;

说实话我能理解楼上原子哥的心情,毕竟原子哥是技术人员,不是一般客服(或者说不是职业客服);技术人员通常只能和技术人员交流;
在技术人员眼里,明明很简单的内容,向客户说半天,客户却理解不了,你们能理解这种痛苦吗?

其他附和原子哥的朋友也要理解一下stm32初探的新手,毕竟搜索进来这个帖子的学员,基本上都是没完整理解这个函数的

反正有事说事,都不是来找茬的
回复

使用道具 举报

4

主题

17

帖子

0

精华

初级会员

Rank: 2

积分
127
金钱
127
注册时间
2019-8-5
在线时间
33 小时
发表于 2020-4-13 11:06:47 | 显示全部楼层
dierba 发表于 2020-4-13 10:47
这个帖子已发表这么多年了,相信楼主早已成为大师级人物;但是在这里呢我还是想班门弄斧一下,给其他新手多 ...

加一句:temp<<=1,从而在循环里判断每个字节里是否有需要显示的位
回复

使用道具 举报

0

主题

8

帖子

0

精华

新手上路

积分
20
金钱
20
注册时间
2021-3-24
在线时间
1 小时
发表于 2021-3-24 23:44:20 | 显示全部楼层
正点原子 发表于 2015-5-15 23:11
真是世态炎凉,人心不古啊。
所谓可怜之人必有可恨之处,我也就睁一只眼闭一只眼,敬而远之。

楼主可能懂temp&0x80本身的意思,可能不懂在整个函数中的意思。还是有点耐心做些解释,大家也都想学懂,别跟你头像似的,都不好,没那么多气。
回复

使用道具 举报

0

主题

8

帖子

0

精华

新手上路

积分
20
金钱
20
注册时间
2021-3-24
在线时间
1 小时
发表于 2021-3-25 00:03:48 | 显示全部楼层
dierba 发表于 2020-4-13 10:47
这个帖子已发表这么多年了,相信楼主早已成为大师级人物;但是在这里呢我还是想班门弄斧一下,给其他新手多 ...

这个显示字符的函数showchar和画点函数DrawPoint一起怎么理解了?void OLED_DrawPoint(u8 x,u8 y,u8 t)
{
        u8 pos,bx,temp=0;
        if(x>127||y>63)return;
        pos=7-y/8;
        bx=y%8;
        temp=1<<(7-bx);
        if(t)OLED_GRAM[x][pos]|=temp;
        else OLED_GRAM[x][pos]&=~temp;            
}
画点函数中是把8位变量temp的值逻辑与或者逻辑或之后赋给了8位数组oled_gram的。在函数OLED_Refresh_Gram中又通过函数OLED_WR_Byte输出给了OLED屏。并不是一个点一个点的再画,
if(t)OLED_GRAM[x][pos]|=temp;
else OLED_GRAM[x][pos]&=~temp;
可以保证数组oled_gram的值被完整的保留下来。
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-28 18:13

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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