打印

单片机用户交互界面

[复制链接]
3498|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
1026869700|  楼主 | 2017-3-23 18:43 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
又过去半年了,发个新帖总结一下。想了几天,不知道发什么好。想着发个uC/GUI的简易上手的帖子,把这个大的软件包的结构和层次简单化的讲解出来。用于新手的快速上手。不知道值不值得讲解。等待大家的反馈,如果有必要,就上来闲扯一下。讲解的话,顺带一些在没有图像库的时候,简易、有效开发思路。

相关帖子

沙发
mlmbcsz| | 2017-3-24 13:04 | 只看该作者
GUI图形界面 很想听听!支持!是用面对对象编程的思想吗?

使用特权

评论回复
板凳
GZZXB| | 2017-3-24 13:27 | 只看该作者
搬个凳子准备听课

使用特权

评论回复
地板
1026869700|  楼主 | 2017-3-24 20:44 | 只看该作者
mlmbcsz 发表于 2017-3-24 13:04
GUI图形界面 很想听听!支持!是用面对对象编程的思想吗?

是的,面向对象的思想。

使用特权

评论回复
5
风清扬mxz| | 2017-3-25 16:35 | 只看该作者
uc/GUI网上的资料挺多的,版主可以讲讲,我会关注的,你的头像是github的图标

使用特权

评论回复
6
1026869700|  楼主 | 2017-3-26 15:56 | 只看该作者
    今天来讲讲这个图形界面的设计,在讲之前,说一些别的话:讲的这些都是自己的一些想法和思路,也没有什么系统性,就当大家来一起讨论学习。
    话不多说了,现在就开始。
    话说我们学单片机,开始用显示屏的时候,感觉很激动;虽然用的是黑白色的低分辨率的显示屏,但是在显示出文字和图像的那一刻,整个人都非常的兴奋。从这一开始,进入了单片机图形界面的应用世界了。
    显示屏的显示原理就那样了,点构面,就跟自己画图一样。我们用着这个低分辨率的黑白屏,玩起了图形界面的设计,不亦乐乎。
    随着继续深入,我们发现,设计的界面结构越来越复杂,层次越来越深,要显示的东西也越来越多。以前所使用的点画面的方法,简直就是噩梦。一大堆庞大的结构要捋清楚。稍不留神,就找不着北了,界面的维护和修改异常的麻烦。(吃根辣条,中场休息!)
    显然,噩梦才刚刚开始,随着程序员之路继续升级,我们用到了TFT的全彩屏,高分屏,触摸屏。突然发现,我以前玩的都是什么啊。以前的那种模式大部分都不能搬过来用了。怎么办?开始发牢骚,开始想办法。。。。。
    现在,就跟处于这个阶段的、将要进入这个阶段的、以及已经进入这个阶段的同学们来来谈谈。我的这个经历是如何度过的。
    直入正题:
    TFT彩屏不比我们用的那些个LCD黑白屏,为什么呢?从原理上来讲,都是一个个像素颗粒。but,看前面讲的,是TFT全彩——LCD黑白。对于以前用的黑白屏,一点的状态,不是亮,就是灭。但是对于TFT,是全彩,一个点可以显示很多种颜色。这种问题出现在那里呢?就是当你要清除一个区域的时候,LCD黑白屏直接清除即可。TFT不行,你需要知道原位置的底色,这样才能清除,然后就有人想办法说:我回读。恩,这个方法也不错,那如果我这个区域是一个颜色展示区域呢?你回读回来的色还对吗?如果我这个区域写有数据,那么读回来的颜色是谁的颜色呢?这还没完。。。如果要设置字体颜色呢?如果要给这个区域添加别的颜色类的属性呢?这些问题只是遇到比较多的,还有别的一些特殊情况就不列举了。
    这个时候呢,就又有人想了个办法。我把这个区域的东西全部用变量记下来。嗯,也不错。一个稍微大点的图像界面系统。这里面的区域和变量那要定义多少个呢?我们是否应该想一个通用一点的方法呢。既方便管理,又方便使用和维护的方法呢?
    我之前写的一些**里面写到过,多读书总归是好的,可以拓宽我们处理问题的思路,特别是程序员。我之前呢,搞过VB、看过C++、写过C#;虽然现在荒废了。但是有些思路还是记下了。就是封装和对象的概念,还有就是控件的概念。
    借用了C#里面的一些概念,把下位机图像界面像上位机图像界面一样做。按照c#里面常用的控件分类和属性,在单片机里面封装我们自己的控件。当然C里面没有类,但是我们可以用结构体封装。如果有必要,可以在里面加入函数指针,就有点像类了。
    常用的类别有:文本框、标签、单选钮、复选框、窗体、数据表列、图像框。
    说说这个文本框,在文本框最基本的属性有:起始坐标、宽度长度、底色、编号、文本内容、文本颜色、文本字体、对齐方式。那么文本框的属性结构体里面就暂时先包涵这些东西。用文本框的这个结构体定义一个结构体变量,相当于一个对象。有几个文本框,就定义几个对象。对象定义了,但是还没有给对象分配和添加属性。这个时候,我们需要一个函数来实现。TextCreate();假设这个函数是用来注册文本框的。我们通过入口参数来设置文本框的坐标、尺寸,其余属性加载预先设置默认参数。这个时候,一个文本框就可以让它出来了。如果要给文本框写文本,此时可以再定义一个函数TextAddString(),专门用于给文本框写文本。它的入口参数包涵一个结构体变量和要写入的文本,这个时候,不论是哪个文本框,这个函数都能准确的写入到他所对应的文本框里面。
     今天就先写到这个吧。写多了担心大家看不下去了。
   
   

使用特权

评论回复
7
山东电子小菜鸟| | 2017-3-28 09:20 | 只看该作者
1026869700 发表于 2017-3-26 15:56
今天来讲讲这个图形界面的设计,在讲之前,说一些别的话:讲的这些都是自己的一些想法和思路,也没有什 ...

、我喜欢连载 一口气看完的那种 ,期望版主一口气全说了

使用特权

评论回复
8
1026869700|  楼主 | 2017-3-29 19:35 | 只看该作者
      今天来接着说吧。在上面讲的那个过程中,其实是把我们要操作的或者说我们要实现的东西抽象出来。如上面所讲的文本框,我们把它想象成一个中间件,是介于显示屏上面显示的东西和程序操作的东西的一个中间件。
      操作目的是想往显示屏上面写一行文本,那么可以抽象出这个文本显示块。我们只是操作这个块而已。对于液晶屏的读和写,其实就是那两个函数,真正不同的是写的区域和数据。那么我们可以把这个文本显示块的这些信息打包到一块。后期的操作只是同写和读函数按照这个信息包去写显示屏。
      在这种模式下,只要做是:信息包类型创建和某类信息包的操作函数。如同标签,简单的属性就是:位置、尺寸、背景色、字体、字体颜色、文本。当然讲的这两种都是相对而言是静态的;其实动态的控件可以和这个类似;就用滑动块来说。属性里面多了最大最小值、以及步进值。这个步进值有点特殊,可以为固定,也可以为设置。但是如果调解的精度无法达到步进值,那么滑动最小一个单位,得到的值是跳跃的。
      对于操作界面的控件,很多都是类似的。就如同,你在显示屏上面画一个控件,然后把画的过程分类和打包。基础分离控件就是上面这些。按照这种对象的思想,去编写用户界面,比传统的方法要方便很多,关键时候容易修改和管理。
      在uC/GUI中,除了内核层外,就是控件。真正分析控件的使用过程,其实和上面的思想是一样的。只要掌握了上面的思想,那么uC/GUI的控件这块也就很容易掌握。
      uC/GUI里面呢,集成了很多功能和显示屏。作为一个完善的发布的软件包,要考虑的东西自然有很多。而我们只要关心与我们有关的。至于uC/GUI的移植过程呢。其实也很简单。吧软件包里面除了demo文件夹里面的所有文件都添加到项目中,如果没有实时系统的话,剔除掉与系统有关的那几个文件,名字都很容易找到的。添加到项目中,在LCDConfig.h文件中,清除掉系统配置的总线接口宏定义。修改初始化宏定义函数,改成自己的LCD初始化函数。然后再LCDDummy.c函数中,替换掉三个函数名即可,这三个函数就是:LCD读一个点函数、LCD写一个点函数、LCD填充一个区域函数。在LCDConfig.h文件按照宏名称,修改宏参数。编译一下。有错误排除错误。基本接口接着三个函数。其它预先使用系统默认配置,完全一致通过之后,再根据自己的需求进行裁剪。
      由于近期事情比较多,就暂时先草草的说一下。各位有问题、可以上网搜索或者给我留言,我帮忙解答。感谢各位观看。

使用特权

评论回复
9
cuya| | 2017-4-10 11:03 | 只看该作者
控件不是什么新概念了。

要实现控件, 就得引入抽象封装, 那么最好使用 C++. 没有 virtual 很难实现通用的控件, 另一个重要的对象是 delegate,  用以实现外部事件绑定。
其实virtual, delegate 都是函数指针, 都是用于对象行为的扩展。delegate 的实现需要编译器的支持,如若不然,只能通过汇编绕过编译器。  

使用特权

评论回复
10
dsyq| | 2017-4-16 13:58 | 只看该作者
楼主继续啊!
项目里就要用到。

使用特权

评论回复
11
1026869700|  楼主 | 2017-6-29 22:10 | 只看该作者
cuya 发表于 2017-4-10 11:03
控件不是什么新概念了。

要实现控件, 就得引入抽象封装, 那么最好使用 C++. 没有 virtual 很难实现通用 ...

指针传递自然是最灵活,最方便的。还能实现更高级的数据结构。关于委托,C#中剔除掉了指针的概念,引入了一些新的概念,例如C中的函数指针就被称为委托。换汤不换药。深入理解了指针和内存的概念,很多语言都是相似的,只是换个马甲而已。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

15

主题

138

帖子

15

粉丝