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