OpenEdv-开源电子网

 找回密码
 立即注册

扫一扫,访问微社区

正点原子全套STM32开发资料,上千讲STM32视频教程,RT1052教程免费下载啦...
查看: 2029|回复: 32

新作分享 邪路再临:PC端串口单色屏模拟器

[复制链接]

  离线 

20

主题

119

帖子

2

精华

高级会员

Rank: 4

积分
814
金钱
815
注册时间
2015-12-24
在线时间
178 小时
发表于 2017-7-12 21:30:35 | 显示全部楼层 |阅读模式
本帖最后由 玉麒麟 于 2017-7-14 08:27 编辑

    之前有看过我帖子的朋友可能还记得我的开源GUI作品SimpleGUI,发布在这里:
    http://www.openedv.com/forum.php?mod=viewthread&tid=96247&extra=
    在SimpleGUI发布时候,我就说过有开发这样一款GUI模拟器的想法,今天,我把第一阶段成果带给大家共享!
    此模拟器依然使用CodeBlocks+Mingw4.9.2+wxWidgets开发,全平台免费开源。
    工程发布于码云GitHub共享:
    https://git.oschina.net/Polarix/lcdsimulator
    模拟器软件取名LCDSimulator,简单粗暴好理解!
    接下来,吹牛B开始………………

    设计:
    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;
    然后调用编写好的串口驱动程序,将这个数组发送出去就可以了。    另外需要注意的是,写入的数据不会立即显示在屏幕上,如果想要使显示生效,需要发送CMD_REFRESH指令更新屏幕。如此设计,是为了避免在块写入是因为频繁对画面进行绘制与重绘导致画面闪烁或绘图效率低下。

    使用:
    LCDSimplator为了方便快速写入和读取内容,设计了内部列索引计数器,当您使用CMD_SET_POS_COLUMN命令和CMD_SET_POS_PAGE命令设定好当前要写入或读取的坐标,并写入或读取数据后,您可以直接再次发送写入或读取命令,对当前页的下一列(右侧列)进行读取或写入,当您到达屏幕边界后,索引计数器将被重置为0,您的下一次操作将从当前页的第一列开始。
另外,当您发送读取指令CMD_READ_DATA后,LCDSimulator将会读取当前控制单元内的数据(一字节,八位),并以上述的三字节格式反馈回去,如果您需要读取操作,请提前配置好串口的接收程序。
    当然了,LCDSimulator作为一个合格的模拟器,除了模拟LCD显示屏,还提供了快速截屏/保存功能与通讯数据监视窗口,但是由于数据传输量大,如果使用数据监视将会使屏幕更新速率进一步降低,所以数据监视功能只建议出现问题调试时开启。
        为了使视觉效果更逼真LCDSimulator还提供了直观的配色方案修改功能,修改效果所见即所得,大家可以配合屏幕取色软件和某宝上的图片,我相信我的模拟器几乎可以模拟所有的单色显示屏了。
         LCDSimulator-setting1.jpg
         LCDSimulator-setting2.jpg
        这是模拟黄底黑字的KS0108 19264显示屏。
        

KS0108

KS0108

        这是模拟白字和蓝字的OLED显示屏,不过某宝上好像没有19264卖,只有12864。
         LCD_20170612_2119-1.jpg
         LCD_20170612_2120-1.jpg
        
    最后,上一张同步显示图片,照片为KS0108主控的LCD显示屏与上位机模拟器屏幕同步,当然,受限于串口通讯速度和KS0108主控的性能瓶颈,屏幕刷新速度有点儿坑。
         LCDSimulator.jpg
        写在最后:
        和之前SimpleGUI的模拟环境不同,LCDSimulator开发的重点和难点在于可靠的串口通信,由于wxWidgets库没有针对外设与驱动设计准们的类库,所以串口需要特别实现。wxCode中有移植好的wxCtb类提供串口功能,但是最后一次更新已经是2007年,而正统的Libctb类也已于2011年停止更新。
        之前有想过使用WindowsAPI单独编写串口库,但是想想,跨平台无力……于是我下载了Libctb的源码并编译成静态库使用,但是使用时发现这个库只能查找到最大编号为20的端口,而且有一个很隐晦但是很严重的BUG,所以我修改了Libctb的源码,修正了BUG并重写了ScanPorts接口,使其可以搜索到编号大于20的端口并可以获取串口的设备名。
        坎坷之后,突然想起MFC的好来……唉……不过现在VS的体积膨胀的实在不像话,我装的VS2015一下就吃掉了我40个G,我的SSD一共才256G啊亲!!!
                LCDSimulator目前只是初版成型,今后还可能有改进,比如支持使用HIDUSB以实现更高速度的通信等……
        也欢迎大家使用、折腾、反馈意见和BUG!
        感谢大家的支持,希望拙作能给您带来方便。喜欢的朋友可以直接去上面的码云链接即可下载,编译环境搭起来有点复杂,但是Binary文件夹下有编译好的程序可供使用,对源码没兴趣的只保留Binary文件夹即可!

更新:
    2017年7月13日更新,修正窗口图标显示不正常的BUG,新增了可修改和定制OEM信息的“关于”对话框。
    用户可通过OEM文件夹下的Introduction.txt文件和Developers.txt文件修改“关于”对话框中的介绍与开发者信息,或者通过修改和替换Image.png来显示标题图片。当然,这三个内容都有默认设定的,如果任意一个找不到,就会载入默认内容。
    例如,如果没有OEM文件夹下的Image.png文件,关于对话框是这样的:
    OEM1.png
    现在找一张别的图片,重命名为Image.png,放在OEM文件夹下,就拿论坛的Logo吧!
    再点击“关于”按钮,就变成了这样:
    OEM2.png
    同理,Introduction.txt文件中的文本将显示在“关于LCDSimulator”页中,Developers.txt文件中的文本将显示在“开发人员”页中。
    帖子现在还能编辑,吼吼吼!




回复

使用道具 举报

  离线 

11

主题

272

帖子

3

精华

金牌会员

Rank: 6Rank: 6

积分
1409
金钱
1409
注册时间
2016-7-21
在线时间
365 小时
发表于 2018-1-13 13:39:42 | 显示全部楼层
大佬,牛的一p
回复 支持 1 反对 0

使用道具 举报

  离线 

2

主题

45

帖子

0

精华

高级会员

Rank: 4

积分
775
金钱
775
注册时间
2013-9-2
在线时间
340 小时
发表于 2017-7-12 22:04:27 | 显示全部楼层
这个厉害
回复 支持 反对

使用道具 举报

  离线 

20

主题

119

帖子

2

精华

高级会员

Rank: 4

积分
814
金钱
815
注册时间
2015-12-24
在线时间
178 小时
 楼主| 发表于 2017-7-13 21:26:52 | 显示全部楼层
新作发布,好像没什么人看,稀里糊涂的就沉到第四页了……
回复 支持 反对

使用道具 举报

  离线 

4

主题

299

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1923
金钱
1923
注册时间
2015-10-17
在线时间
211 小时
发表于 2017-7-14 08:15:15 | 显示全部楼层
牛B
回复 支持 反对

使用道具 举报

  离线 

3

主题

43

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
421
金钱
421
注册时间
2016-10-20
在线时间
146 小时
发表于 2017-7-14 09:10:05 | 显示全部楼层
膜拜大佬,大佬厉害
we can't stop
回复 支持 反对

使用道具 举报

  离线 

2

主题

25

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
299
金钱
299
注册时间
2014-8-11
在线时间
80 小时
发表于 2017-7-14 09:50:08 | 显示全部楼层
楼主厉害啊
回复 支持 反对

使用道具 举报

  离线 

4

主题

25

帖子

0

精华

初级会员

Rank: 2

积分
102
金钱
102
注册时间
2015-7-23
在线时间
31 小时
发表于 2017-7-14 10:05:20 | 显示全部楼层
大佬很强
回复 支持 反对

使用道具 举报

  离线 

18

主题

543

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1226
金钱
1226
注册时间
2016-4-29
在线时间
190 小时
发表于 2017-7-14 12:27:36 | 显示全部楼层
强强强强强强强强……。看过楼主之前的贴子,顶楼主
回复 支持 反对

使用道具 举报

  离线 

20

主题

119

帖子

2

精华

高级会员

Rank: 4

积分
814
金钱
815
注册时间
2015-12-24
在线时间
178 小时
 楼主| 发表于 2017-7-14 20:28:02 来自手机 | 显示全部楼层
很高兴看到大家的回复和反馈,原子哥,这个可以申精吗?!
回复 支持 反对

使用道具 举报

  离线 

5

主题

50

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
418
金钱
418
注册时间
2015-12-11
在线时间
136 小时
发表于 2017-7-15 08:56:09 | 显示全部楼层
看了好久,不明白大佬在做什么事
回复 支持 反对

使用道具 举报

  离线 

5

主题

50

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
418
金钱
418
注册时间
2015-12-11
在线时间
136 小时
发表于 2017-7-15 08:57:09 | 显示全部楼层
最近在学EMWIN,把大佬的SIMPLEgui也搞一下
回复 支持 反对

使用道具 举报

  离线 

20

主题

119

帖子

2

精华

高级会员

Rank: 4

积分
814
金钱
815
注册时间
2015-12-24
在线时间
178 小时
 楼主| 发表于 2017-7-15 10:47:08 | 显示全部楼层
小黄蜂 发表于 2017-7-15 08:56
看了好久,不明白大佬在做什么事

做的就是做了一个叫SimpleGUI的图形库,开发了一套模拟环境,然后发现模拟环境有变成LCD模拟器的潜质,于是又有了LCDSimulator,大概就是这么个关系。
回复 支持 反对

使用道具 举报

  离线 

20

主题

119

帖子

2

精华

高级会员

Rank: 4

积分
814
金钱
815
注册时间
2015-12-24
在线时间
178 小时
 楼主| 发表于 2017-7-15 11:00:07 | 显示全部楼层
小黄蜂 发表于 2017-7-15 08:57
最近在学EMWIN,把大佬的SIMPLEgui也搞一下

我这小打小闹肯定比不上emWin这样的大工程,我的目的就是用最简单的方式在指定类型的平台上最快最方便的做成一样东西。
回复 支持 反对

使用道具 举报

  离线 

16

主题

345

帖子

0

精华

高级会员

Rank: 4

积分
750
金钱
750
注册时间
2017-5-21
在线时间
331 小时
发表于 2017-7-16 14:59:27 来自手机 | 显示全部楼层
厉害了!!
回复 支持 反对

使用道具 举报

  离线 

5

主题

50

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
418
金钱
418
注册时间
2015-12-11
在线时间
136 小时
发表于 2017-7-16 19:46:34 | 显示全部楼层
玉麒麟 发表于 2017-7-15 10:47
做的就是做了一个叫SimpleGUI的图形库,开发了一套模拟环境,然后发现模拟环境有变成LCD模拟器的潜质,于 ...

把大佬的软件打开好像明白了些,用电脑界面模拟单片机的屏幕,使用串口通信。学识太浅不明白这个东东在哪方面可以用的到
回复 支持 反对

使用道具 举报

  离线 

20

主题

119

帖子

2

精华

高级会员

Rank: 4

积分
814
金钱
815
注册时间
2015-12-24
在线时间
178 小时
 楼主| 发表于 2017-7-16 19:52:59 | 显示全部楼层
小黄蜂 发表于 2017-7-16 19:46
把大佬的软件打开好像明白了些,用电脑界面模拟单片机的屏幕,使用串口通信。学识太浅不明白这个东 ...

这个纯粹就是开发SimpleGUI时候一个突然打开的脑洞,然后就收不住了。
要是非得说用途,以后开发产品的话,写说明书的时候不用抱着相机照相了,而且很多时候还照不好,特别是手机,因为光圈变化,镜头在屏幕上对焦时候画面会突然暗下来甚至变黑。另外,如果给客户演示的时候也不需要举着机器和摄像头了,开个远程桌面就好了。再就是学校,老师讲课时候,LCD屏幕的显示内容也可以直接投在桌面显示在投影仪上。
回复 支持 反对

使用道具 举报

  离线 

1

主题

32

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
288
金钱
288
注册时间
2016-10-17
在线时间
90 小时
发表于 2017-7-17 09:04:41 | 显示全部楼层
厉害,已收藏
回复 支持 反对

使用道具 举报

  离线 

16

主题

345

帖子

0

精华

高级会员

Rank: 4

积分
750
金钱
750
注册时间
2017-5-21
在线时间
331 小时
发表于 2017-7-17 16:20:45 来自手机 | 显示全部楼层
玉麒麟 发表于 2017-7-16 19:52
这个纯粹就是开发SimpleGUI时候一个突然打开的脑洞,然后就收不住了。
要是非得说用途,以后开发产品的 ...

做设备调试的时候方便记录和保存了
回复 支持 反对

使用道具 举报

  离线 

4

主题

35

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
318
金钱
318
注册时间
2016-6-15
在线时间
165 小时
发表于 2017-7-24 16:04:42 | 显示全部楼层
大佬很强
回复 支持 反对

使用道具 举报

  离线 

0

主题

13

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
324
金钱
324
注册时间
2012-2-24
在线时间
111 小时
发表于 2017-7-25 07:53:41 来自手机 | 显示全部楼层
谢谢楼主。下来学习。
回复 支持 反对

使用道具 举报

  离线 

19

主题

248

帖子

2

精华

高级会员

Rank: 4

积分
811
金钱
811
注册时间
2012-2-8
在线时间
17 小时
发表于 2017-8-22 10:41:27 | 显示全部楼层
论坛果然藏龙卧虎啊
回复 支持 反对

使用道具 举报

  离线 

11

主题

90

帖子

0

精华

初级会员

Rank: 2

积分
112
金钱
112
注册时间
2016-3-27
在线时间
78 小时
发表于 2017-8-23 10:27:53 | 显示全部楼层
厉害啊 顶
回复 支持 反对

使用道具 举报

  离线 

0

主题

3

帖子

0

精华

新手入门

积分
13
金钱
13
注册时间
2017-8-23
在线时间
2 小时
发表于 2017-8-23 22:49:40 | 显示全部楼层
我也做个了 只不过没你功能全 qt做的 69.gif
回复 支持 反对

使用道具 举报

  离线 

4

主题

210

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2406
金钱
2406
注册时间
2016-7-6
在线时间
519 小时
发表于 2017-8-23 23:13:19 | 显示全部楼层
这个更厉害了呢。
回复 支持 反对

使用道具 举报

  在线 

512

主题

9万

帖子

31

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
133817
金钱
133817
注册时间
2010-12-1
在线时间
1286 小时
发表于 2017-8-24 00:15:22 | 显示全部楼层
Bluebuger 发表于 2017-8-23 22:49
我也做个了 只不过没你功能全 qt做的

牛逼,开源不?
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

  离线 

20

主题

119

帖子

2

精华

高级会员

Rank: 4

积分
814
金钱
815
注册时间
2015-12-24
在线时间
178 小时
 楼主| 发表于 2017-8-24 11:36:41 | 显示全部楼层
Bluebuger 发表于 2017-8-23 22:49
我也做个了 只不过没你功能全 qt做的

弹球游戏?!厉害!
你这个也是虚拟屏幕同步么?
我也在学QT,最近被编译器弄得焦头烂额,GNU组件的版本限制真心蛋碎……
回复 支持 反对

使用道具 举报

  离线 

0

主题

125

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
221
金钱
221
注册时间
2017-5-26
在线时间
76 小时
发表于 2017-8-24 11:40:00 来自手机 | 显示全部楼层
厉害,厉害!!
来自: 微社区
回复 支持 反对

使用道具 举报

  离线 

0

主题

3

帖子

0

精华

新手入门

积分
13
金钱
13
注册时间
2017-8-23
在线时间
2 小时
发表于 2017-8-24 23:53:54 | 显示全部楼层

见笑了   现在很乱 不过还是可以上传到论坛上 大家玩玩
回复 支持 反对

使用道具 举报

  离线 

0

主题

3

帖子

0

精华

新手入门

积分
13
金钱
13
注册时间
2017-8-23
在线时间
2 小时
发表于 2017-8-24 23:55:52 | 显示全部楼层
玉麒麟 发表于 2017-8-24 11:36
弹球游戏?!厉害!
你这个也是虚拟屏幕同步么?
我也在学QT,最近被编译器弄得焦头烂额,GNU组件的版 ...

不 没有做同步的 只是单纯的 模拟了液晶。 qt其实很简单,用起来比wxWidget方便。
回复 支持 反对

使用道具 举报

  离线 

5

主题

66

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
392
金钱
392
注册时间
2017-3-1
在线时间
63 小时
发表于 2018-1-13 17:38:23 | 显示全部楼层
我还在STM入门上奔波,顶楼主!
回复 支持 反对

使用道具 举报

  离线 

11

主题

69

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
401
金钱
401
注册时间
2013-8-4
在线时间
61 小时
发表于 2018-1-14 08:25:59 | 显示全部楼层
很强大👍
回复 支持 反对

使用道具 举报

  离线 

105

主题

518

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1287
金钱
1287
注册时间
2012-10-23
在线时间
77 小时
发表于 2018-4-12 17:53:46 | 显示全部楼层
厉害,学习了。。。
回复 支持 反对

使用道具 举报

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

本版积分规则




关闭

报名原子哥新品发布会&粉丝见面会上一条 /1 下一条

正点原子公众号

QQ|联系我们|手机版|官方淘宝店|微信公众平台|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2018-10-22 21:58

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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