LCDSimulator PC 端单色显示屏模拟器开源项目

我要开发同款
匿名用户2017年07月13日
35阅读
开发技术C/C++
所属分类开发工具
授权协议MIT

作品详情

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还提供了直观的配色方案修改功能,修改效果所见即所得,大家可以配合屏幕取色软件和某宝上的图片,我相信我的模拟器几乎可以模拟所有的单色显示屏了。

        

        

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

        

这是模拟白字和蓝字的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文件夹即可!

查看全文
声明:本文仅代表作者观点,不代表本站立场。如果侵犯到您的合法权益,请联系我们删除侵权资源!如果遇到资源链接失效,请您通过评论或工单的方式通知管理员。未经允许,不得转载,本站所有资源文章禁止商业使用运营!
下载安装【程序员客栈】APP
实时对接需求、及时收发消息、丰富的开放项目需求、随时随地查看项目状态

评论