找回密码
 立即注册
楼主: 浦江一水

32G12K128驱动OLED12864,用普通IO模拟SPI或硬件SPI接口方式+双页显示

[复制链接]
  • 打卡等级:以坛为家II
  • 打卡总天数:536
  • 最近打卡:2025-06-16 08:31:26

31

主题

351

回帖

3789

积分

荣誉版主

积分
3789
发表于 2024-5-31 13:47:52 | 显示全部楼层
ryj870925 发表于 2024-5-31 10:23
是这一句吗?
#define OLED_CMD  0


不是这句.  这是宏定义, 原文是这样的吧?

#define OLED_CMD   0                                                //写命令
#define OLED_DATA 1                                                //写数据

宏定义的作用是用比较好理解和记忆的用词来代替一些(不太好记忆的、枯燥的、意义不明确的)变量或数值.
比如有了上述定义后,
凡是用"OLED_CMD"的地方,  就代表是用数值0;
凡是用"OLED_DATA"的地方,就代表是用数值1;

关于写字节数的函数OLED_WR_Byte(); 是 oled.c文件中的那个语句..
原文是这样的:  (网上流传的)
//========================================================================
// 函数名称: OLED_WR_Byte
// 函数功能: OLED地址/数据写入函数
// 入口参数: @dat:数据    @cmd:命令
// 函数返回: 无
// 当前版本: VER1.0
// 修改日期: 2023 - 6 - 7
// 当前作者: ZCF
// 其他备注:
//========================================================================
void OLED_WR_Byte(u8 dat,u8 cmd)
{
    u8 udat[1] ;
    udat[0] = dat;
    if( cmd==1 )
        IIC_Write_NByte(0X78,0x40,udat,1);
    else
        IIC_Write_NByte(0X78,0x00,udat,1);
}

你看它的位置就是写在延时函数之后, 其它函数之前的, 这样其它函数就可直接调用... 而不一定必须要在头文件中申明的.

这函数的第一个参数dat就是表示所要写入的字节数字,
第二个参数cmd就是表示所写的是命令呢还是一个数值,是一个标识字。
当写作"OLED_CMD"时,   其实就是0, 代表第一参数写的是"命令",

当写作"OLED_DATA"时, 其实就是1, 代表第一参数写的是"数值",


有的地方写 "OLED_CMD"    就是告诉OLED显示屏, 第一参数dat这是指令, 要执行某个动作了...   

有的地方写 "OLED_DATA", 就是告诉OLED显示屏, 第一参数dat这是数据, 要写入是数据了...
比如后边OLED_BuffShow()函数, 就用到了"OLED_DATA"。




// 入口参数: @dat:数据    @cmd:命令

这样的写法,可能会使初学者不太好理解.....

回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:536
  • 最近打卡:2025-06-16 08:31:26

31

主题

351

回帖

3789

积分

荣誉版主

积分
3789
发表于 2024-5-31 14:02:18 | 显示全部楼层
科学*** 发表于 2024-5-31 09:20
基于屠龙刀板子
屏是1.8  128*160  RGB-TFT         ic:ST77358,
目前,常见的一种显示屏,网络上有很多stc ...

明白了。 这屏现在是比较常用,我的《新手学用....》第22楼的实验内容,也是7735驱动的,基本是可以参考使用的。


只要对照屠龙刀电路板的显示屏端口,改一下端口定义就可以了,原文就是这里几句:

//================================================================
// 接口定义: 利用LCD1602接口(反相排序)  (根据实际电路板情况定义)
// 1602:  K- A+  D7  D6  D5  D4  D3  D2 D1 D0 E WR RS Vo VCC GND
// OLED: GND VCC SCL SDA RES DC  CS  BL      
//================================================================
sbit SCL = P0^7;  //时钟端
sbit SDA = P0^6;  //数据端
sbit RES = P0^5;  //复位端 0:复位
sbit  DC  = P0^4;  //0:指令/1:数据
sbit  CS  = P0^3;  //片选 0:选中
sbit  BL  = P0^2;  //背光 0:灭 1:亮
//========================================================


先试试看。。。


回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:460
  • 最近打卡:2025-06-16 07:32:07

4

主题

511

回帖

2177

积分

金牌会员

积分
2177
发表于 2024-5-31 19:29:33 | 显示全部楼层
浦江*** 发表于 2024-5-31 14:02
明白了。 这屏现在是比较常用,我的《新手学用....》第22楼的实验内容,也是7735驱动的,基本是可以参考 ...

了解,先学习改改,坐等一水楼主新作更新的到来。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:536
  • 最近打卡:2025-06-16 08:31:26

31

主题

351

回帖

3789

积分

荣誉版主

积分
3789
发表于 2024-6-1 19:53:34 | 显示全部楼层
科学*** 发表于 2024-5-31 19:29
了解,先学习改改,坐等一水楼主新作更新的到来。

“基于屠龙刀板子 + 屏是1.8  128*160  RGB-TFT  ic:ST7735”

手头正好也有这样的硬件配置。就匆匆编写了一段实验程序,供参考。

工程文件包以及简单说明,上传发布在【LCD12864】版块,有空下载试试看。若有问题,留言即可。

注意,这块彩色显示屏是8针引脚的,屠龙刀三板子的显示屏接口是7针的,
彩屏的第8脚是BL背光控制,只要用杜邦线将它连接到Vcc即可。其它针脚全部对上的。


回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:460
  • 最近打卡:2025-06-16 07:32:07

4

主题

511

回帖

2177

积分

金牌会员

积分
2177
发表于 2024-6-1 20:26:12 | 显示全部楼层
浦江*** 发表于 2024-6-1 19:53
“基于屠龙刀板子 + 屏是1.8  128*160  RGB-TFT  ic:ST7735”

手头正好也有这样的硬件配置。就匆匆编写 ...

谢谢先行者,对咱们爱好者的支持
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:358
  • 最近打卡:2025-06-15 18:40:05
已绑定手机

21

主题

488

回帖

855

积分

高级会员

积分
855
发表于 2024-6-15 12:24:11 | 显示全部楼层
点赞学习中
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:4
  • 最近打卡:2024-06-26 10:01:21

1

主题

6

回帖

51

积分

注册会员

积分
51
发表于 2024-6-15 18:37:45 | 显示全部楼层
学习了
回复

使用道具 举报 送花

  • 打卡等级:常住居民I
  • 打卡总天数:61
  • 最近打卡:2025-02-18 18:39:08

13

主题

91

回帖

279

积分

中级会员

积分
279
发表于 2024-6-16 12:00:43 | 显示全部楼层
下次搞个玩玩
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:58
  • 最近打卡:2025-05-31 11:37:09

12

主题

28

回帖

255

积分

中级会员

积分
255
发表于 2024-6-18 15:02:23 来自手机 | 显示全部楼层
打开了新思路,学习了
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:536
  • 最近打卡:2025-06-16 08:31:26

31

主题

351

回帖

3789

积分

荣誉版主

积分
3789
发表于 2024-6-23 21:35:53 | 显示全部楼层
wnag*** 发表于 2024-6-23 16:13
内存缓存方式,一页就是128X64=8192/8=1024
即1K,那么使用双页缓存,就是2K

是的,是这么个理。只要RAM充裕,再多分几个页也可以。
当切换刷新显示某页时,实际上就是将某个页缓存数据写到屏里去。
单色屏,像素少,缓存小,容易实现和出效果。
回复 支持 反对

使用道具 举报 送花

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

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-6-16 18:31 , Processed in 0.144149 second(s), 115 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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