OpenEdv-开源电子网

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

中景园的0.96寸OLED屏如何局部刷新?

[复制链接]

7

主题

25

帖子

0

精华

高级会员

Rank: 4

积分
597
金钱
597
注册时间
2019-8-22
在线时间
173 小时
发表于 2020-8-27 11:14:09 | 显示全部楼层 |阅读模式
10金钱
本帖最后由 CKJJJJ 于 2020-8-27 11:15 编辑

/********************************************
** breif:局部刷新OLED
** para: x 横坐标  列地址  
**       y 纵坐标  页地址
**       len     x方向长度 以像素点为单位
**       width   y方向宽度 以像素点为单位
********************************************/
void OLED_Refresh_Gram_Part(u8 x,u8 y,u8 len, u8 width)
{

   u8 i, n;                    
   for(i = (y/8); i <= ((y+width)/8); i++)  
        {  
                OLED_WR_Byte(0xb0 + i,OLED_CMD);    //设置页地址(0~7)
                OLED_WR_Byte(0x00+(0x0f&x),OLED_CMD);     //设置显示位置—列低地址
                OLED_WR_Byte(0x10+(x>>4),OLED_CMD);       //设置显示位置—列高地址   
                for(n = x; n < (x+len); n++)
                {
                        OLED_WR_Byte(OLED_GRAM[n],OLED_DATA);
                }
        }   
}
在网上找到一个关于局部刷新的例子,试着理解了下,它是将全屏刷新改了点内容,大概就是先确定占用哪些PAGE,然后再分别获取x的高低位来设置列高低位地址。但实际测试效果却没用,屏幕不能正常工作。有大佬调过么?求指导

最佳答案

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

调用这个OLED_Clear(0);是清屏 那么对应的修改i,j的范围就可以擦除一行 或者其他的,局部清除就是往你指定的区域写0,根据清屏的进行修改就行了
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

41

主题

278

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2357
金钱
2357
注册时间
2019-10-29
在线时间
380 小时
发表于 2020-8-27 11:14:10 | 显示全部楼层
  1. /*
  2. 函数功能: OLED显示屏的清屏函数
  3. */
  4. void OLED_Clear(u8 data)
  5. {
  6.         u8 i,j;
  7.         for(i=0;i<8;i++)//设置页
  8.         {
  9.                 OLED_WriteOneByte(0xB0+i,OLED_W_CMD);//设置页地址
  10.                 OLED_WriteOneByte(0x10,OLED_W_CMD);//设置上列地址(高4位)
  11.                 OLED_WriteOneByte(0x00,OLED_W_CMD); //设置下列地址(低4位)
  12.                 //循环写128列的数据
  13.                 for(j=0;j<128;j++)OLED_WriteOneByte(data,OLED_W_DAT);
  14.         }
  15. }
复制代码


调用这个OLED_Clear(0);是清屏
那么对应的修改i,j的范围就可以擦除一行 或者其他的,局部清除就是往你指定的区域写0,根据清屏的进行修改就行了
回复

使用道具 举报

2

主题

582

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2690
金钱
2690
注册时间
2014-5-23
在线时间
188 小时
发表于 2020-8-27 11:23:32 | 显示全部楼层
设置一个显存,然后改变需要改变的位置数据,最后刷屏
回复

使用道具 举报

7

主题

25

帖子

0

精华

高级会员

Rank: 4

积分
597
金钱
597
注册时间
2019-8-22
在线时间
173 小时
 楼主| 发表于 2020-8-27 11:36:08 | 显示全部楼层
本帖最后由 CKJJJJ 于 2020-8-27 11:38 编辑
awsawzj 发表于 2020-8-27 11:23
设置一个显存,然后改变需要改变的位置数据,最后刷屏

我有设置显存,关键是屏幕东西多了之后,不是所有状态都会变,所以每次都要全屏刷就很慢。因为不能过多影响主程序运行,所以基本上是要求有状态变化就刷那部分的显存,这样的效果。
回复

使用道具 举报

22

主题

2251

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4477
金钱
4477
注册时间
2013-4-22
在线时间
336 小时
发表于 2020-8-27 12:48:48 | 显示全部楼层
首先,刷新数据之前先清屏;再次,显示相应的数据。这样做的好处是每次能得到正确的显示,缺点是浪费不必要的时间。还有一种就是只更改变化的部分,这样效率高。但是一定要处理好改变部分的显示逻辑,否则容易出现不必要的显示错误。
回复

使用道具 举报

7

主题

25

帖子

0

精华

高级会员

Rank: 4

积分
597
金钱
597
注册时间
2019-8-22
在线时间
173 小时
 楼主| 发表于 2020-8-27 15:24:28 | 显示全部楼层
三叶草 发表于 2020-8-27 12:48
首先,刷新数据之前先清屏;再次,显示相应的数据。这样做的好处是每次能得到正确的显示,缺点是浪费不必要 ...

那有这个处理部分的逻辑么?
回复

使用道具 举报

22

主题

2251

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4477
金钱
4477
注册时间
2013-4-22
在线时间
336 小时
发表于 2020-8-27 16:57:21 | 显示全部楼层
CKJJJJ 发表于 2020-8-27 15:24
那有这个处理部分的逻辑么?

你找下原子的例程就有吧
回复

使用道具 举报

0

主题

2

帖子

0

精华

新手入门

积分
14
金钱
14
注册时间
2021-1-15
在线时间
3 小时
发表于 2021-1-15 17:49:08 | 显示全部楼层
您好  这是在哪找到的呀
回复

使用道具 举报

7

主题

25

帖子

0

精华

高级会员

Rank: 4

积分
597
金钱
597
注册时间
2019-8-22
在线时间
173 小时
 楼主| 发表于 2021-1-18 11:36:07 | 显示全部楼层
zrl1 发表于 2021-1-15 17:49
您好  这是在哪找到的呀

什么意思
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165508
金钱
165508
注册时间
2010-12-1
在线时间
2115 小时
发表于 2021-1-19 02:00:12 | 显示全部楼层
就没有局部刷新的指令。
再说了,那么点数据,有必要局部刷新么?
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

4

主题

43

帖子

1

精华

中级会员

Rank: 3Rank: 3

积分
392
金钱
392
注册时间
2016-9-4
在线时间
73 小时
发表于 2021-1-19 17:44:42 | 显示全部楼层
正点原子 发表于 2021-1-19 02:00
就没有局部刷新的指令。
再说了,那么点数据,有必要局部刷新么?

试了下水平方式扫描没用,总是用默认的页寻址模式。我想用dma一口气全部传完数据,不要一行一行的来。原子哥都没有用dma传输数据,求教怎么解决
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165508
金钱
165508
注册时间
2010-12-1
在线时间
2115 小时
发表于 2021-1-20 01:48:42 | 显示全部楼层
风之伤544 发表于 2021-1-19 17:44
试了下水平方式扫描没用,总是用默认的页寻址模式。我想用dma一口气全部传完数据,不要一行一行的来。原 ...

你可以自己改DMA,我认为是没必要,总共才多少数据量。。。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-5-15 17:55

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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