开源中国

我们不支持 IE 10 及以下版本浏览器

It appears you’re using an unsupported browser

为了获得更好的浏览体验,我们强烈建议您使用较新版本的 Chrome、 Firefox、 Safari 等,或者升级到最新版本的IE浏览器。 如果您使用的是 IE 11 或以上版本,请关闭“兼容性视图”。
LCDSimulator首页、文档和下载 - PC 端单色显示屏模拟器 - 开源中国社区
全部项目分类
我要评价
MIT
C/C++
跨平台
Polarix
分享
收藏
6 人收藏
收录时间:2017-07-13
LCDSimulator 详细介绍

LCDSimulator 是一个使用串口的,PC端单色显示屏模拟器。

设计:

LCDSimulator使用最大115200bps的串口与单片机设备进行通讯。虽然串口的通讯速度影响了模拟器显示的实时性与速度,但因为考虑到通用性,最终还是决定使用串口,因为串口控制器是几乎所有单片机都包含的,就算没有,使用定时器模拟一个串口也并非难事。

目前使用串口刷新模拟19264整屏幕耗时约0.4S。

控制:

LCDSimulator的控制模式模仿竖置横排点阵屏的逻辑控制模式,屏幕自上而下每八像素称为一个“页”,由左至右每一像素称为一个“列”,控制逻辑与KS0108液晶显示屏控制器与SSD1306OLED显示屏控制器十分相似,如果您已经有了这两款显示屏的驱动程序,那么使用LCDSimulator将十分简单。

LCDSimulator的通讯协议也非常简洁,每一个数据包为三个字节,第一个字节为指令码,第二个字节为数据的低八位,第三个字节为数据的高八位。

[0 指令码][1 数据低八位][2 数据高八位]

截至目前,LCDSimulator共有6条指令:

1-CMD_SET_POS_COLUMN 设定当前操作列索引
2-CMD_SET_POS_PAGE 设定当前操作页索引
3-CMD_WRITE_DATA 写入数据
4-CMD_READ_DATA 读取数据
5-CMD_REFRESH 更新屏幕
6-CMD_CLEAN 清空屏幕内容

具体请参考模拟器源码中LCD_Common.h文件中的定义。

如果您想向模拟器写入一个字节,比如0x32,那么您只需要编写好串口驱动程序并确认无误,然后声明一个长度为3的字节数组:

uint8_t arrSendData[3];

然后将数据填充入数组:

arrSendData[0] = CMD_WRITE_DATA;
arrSendData[1] = 0x32;
arrSendData[2] = 0x00;

然后调用编写好的串口驱动程序,将这个数组发送出去就可以了。

使用:

LCDSimplator为了方便快速写入和读取内容,设计了内部列索引计数器,当您使用CMD_SET_POS_COLUMN命令和CMD_SET_POS_PAGE命令设定好当前要写入或读取的坐标,并写入或读取数据后,您可以直接再次发送写入或读取命令,对当前页的下一列(右侧列)进行读取或写入,当您到达屏幕边界后,索引计数器将被重置为0,您的下一次操作将从当前页的第一列开始。

另外,当您发送读取指令CMD_READ_DATA后,LCDSimulator将会读取当前控制单元内的数据(一字节,八位),并以上述的三字节格式反馈回去,如果您需要读取操作,请提前配置好串口的接收程序。

当然了,LCDSimulator作为一个合格的模拟器,除了模拟LCD显示屏,还提供了快速截屏/保存功能与通讯数据监视窗口,但是由于数据传输量大,如果使用数据监视将会使屏幕更新速率进一步降低,所以数据监视功能只建议出现问题调试时开启。

为了使视觉效果更逼真LCDSimulator还提供了直观的配色方案修改功能,修改效果所见即所得,大家可以配合屏幕取色软件和某宝上的图片,我相信我的模拟器几乎可以模拟所有的单色显示屏了。

          

          

这是模拟黄底黑字的KS0108 19264显示屏。

          

这是模拟白字和蓝字的OLED显示屏,不过某宝上好像没有19264卖,只有12864。

          

          

最后,上一张同步显示图片,照片为KS0108主控的LCD显示屏与上位机模拟器屏幕同步,当然,受限于串口通讯速度和KS0108主控的性能瓶颈,屏幕刷新速度有点儿坑。

    
和之前SimpleGUI的模拟环境不同,LCDSimulator开发的重点和难点在于可靠的串口通信,由于wxWidgets库没有针对外设与驱动设计准们的类库,所以串口需要特别实现。wxCode中有移植好的wxCtb类提供串口功能,但是最后一次更新已经是2007年,而正统的Libctb类也已于2011年停止更新。

之前有想过使用WindowsAPI单独编写串口库,但是想想,跨平台无力;于是我下载了Libctb的源码并编译成静态库使用,但是使用时发现这个库只能查找到最大编号为20的端口,而且有一个很隐晦但是很严重的BUG,所以我修改了Libctb的源码,修正了BUG并重写了ScanPorts接口,使其可以搜索到编号大于20的端口并可以获取串口的设备名。

欢迎大家使用、折腾、反馈意见和BUG!编译环境搭起来有点复杂特别是wxWidgets库编译器来费时费力,Binary文件夹下有编译好的程序可供使用,对源码没兴趣的只保留Binary文件夹即可!

LCDSimulator

选择将代码托管在码云
你还在等什么

可能是中国最大最好的代码托管平台


大家对 LCDSimulator 的评论 (全部 0 条评论)
{{repayCom.userName}}
顶部