找回密码
 立即注册
查看: 89|回复: 1

关于ISP里的USB串口虚拟OLED的问题

[复制链接]
  • 打卡等级:以坛为家III
  • 打卡总天数:815
  • 最近打卡:2026-07-05 00:08:16

43

主题

524

回帖

4844

积分

荣誉版主

积分
4844
发表于 2026-6-25 13:37:50 | 显示全部楼层 |阅读模式
最近有网友问ISP里的虚拟OLED的问题,由于之前没怎么玩过,于是打算正好也学习一下。
截图202606251248431133.jpg


通过查看《通讯接口说明》(以下简称《说明》)里关于OLED的功能介绍,了解了16种功能的用法
但是在功能函数的说明上,遇到了一些问题:

一、函数引用问题

由于usb.h文件里,只提供了OLED12864的显示图片函数,所以在使用OLED128*64屏幕的时候,还比较顺利。
但是按照《说明》添加其它尺寸的屏幕的函数,比如显示图片的函数,说明里关于库函数的声明和调用部分,写的也都是 “OLEDxxxxxx_ShowPicture()”,
按照说明把声明添加进程序里
void OLED640480_ShowPicture( BYTE x, BYTE y, BYTE cx, BYTE cy, BYTE *dat );
编译的时候就会出现错误提示,找不到这个函数的实现代码。

截图202606251251094857.jpg
是不是USB库里没有包含12864之外的函数


================================================


二、功能15描述问题


问题出在“显示图片”功能(功能15)的环节。
既然没有函数可以用,那么就决定按照《说明》,给VOLED320240、VOLED480320、VOLED640480写一下显示图片的函数。结果都不能成功显示。

功能15的说明是:“在OLEDxxxxxx屏幕上显示图片

由于OLED12864时,函数可以直接调用,所以误以为功能15的指令 C8H 就是《说明》里提到的显示图片的指令。
并且一度产生了另一个疑问:功能16(CFH)是把数据写进缓冲区,功能3(C1H)是把显存内容显示到屏幕上,那么不就跟功能15(C8H)重复了吗?

通过跟AI助手对每个功能进行分析,结果发现C8H指令并不是显示图片,而是写进显存里的指定区域(并不进行显示)

ShowPicture函数的实现过程是:把数据写进缓冲区(指令CFH) → 把缓冲区的数据写进显存里设置的区域(指令C8H) → 把显存里的内容显示到屏幕(指令C1H)
按照这个顺序,最后终于写出了可以在另外三个屏幕上显示图片的函数。

所以这个描述非常误导对《说明》的理解,希望修正一下。

================================================

三、功能15坐标值溢出问题

同样还是功能15的问题。虽然图片显示函数成功运行了,但是又发现了一个十分重要的BUG。

截图202606251329032787.jpg

《说明》里关于功能15的介绍里,显示图片的X坐标图片的宽度 这两项,都是一个字节,这就导致了数值超出255之后就会溢出

比如320*240的屏幕,x=255的时候可以正确显示,但是x=256的时候就会回到屏幕最左侧。
此处是为了查看方便,两张图片的坐标用的是(255, 9)和(256, 16),并不是功能上的“换行”。

截图202606251326503636.jpg
对于480*320和640*480的说明里也是同样的问题,都会用到超过255的坐标值和尺寸
只有128*64的屏幕不会存在这个问题。

由于功能4点亮全屏)在四个屏幕上都可以实现全屏点亮,功能10~功能12(滚屏指令)也都可以按整个屏幕宽度进行滚动,

所以这个问题应该只是功能15的BUG。


希望能够修正,否则对三个尺寸的VOLED来说就太可惜了。



加油.gif




能体会到发现一个不理解的现象然后找原因然后要么解决掉问题要么被问题解决掉的那种快乐是我的幸运
回复

使用道具 举报 送花

  • 打卡等级:以坛为家III
  • 打卡总天数:815
  • 最近打卡:2026-07-05 00:08:16

43

主题

524

回帖

4844

积分

荣誉版主

积分
4844
发表于 2026-6-26 18:12:36 | 显示全部楼层
想了个偏门的方法,由于X坐标不能超过255,于是创建了一个宽度65像素的图片,然后在 x=255的位置显示,刚好可以显示在设置不到x坐标的256~319的区域 把图片当成缓存数组,就可以操作摸不到的区域了

截图202606261806401172.jpg

或者平均分成两个160×240像素的大小,宽度高度都不超过255,用两个数组操作整个屏幕
截图202606261928553559.jpg 截图202607010819107825.jpg


VOLED480*320 的区域宽度 CX = 480-255=225 <255,但是高度320就超出了,除非拆成四块。。。
截图202606261929112701.jpg 截图202607010815248460.jpg


但是640*480的就不那么好用了 =。=;;; 因为X、CX都受限了。。。
截图202606261929263490.jpg
只能用到511×480像素的区域
能体会到发现一个不理解的现象然后找原因然后要么解决掉问题要么被问题解决掉的那种快乐是我的幸运
回复

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2026-7-5 07:47 , Processed in 0.068945 second(s), 49 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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