欢迎来到Doc100.Net免费学习资源知识分享平台!
您的位置:首页 > 程序异常 >

2kb内存储器单片机上实现彩屏gui控件库

更新时间: 2014-01-05 03:15:01 责任编辑: Author_N1

 

2KB内存单片机上实现彩屏GUI控件库

一. 综述

嵌入式系统发展日新月异,安卓和ios已然战胜了当年雄霸天下的塞班,界面是我们特别看重的因素之一。不过你考虑过自己做一套系统,写一个界面库么?在单片机上自制系统,可以很好的锻炼编程能力和架构设计能力。

这些界面库都是在底层画点画线的驱动程序上实现的,基于我的XMOVE动作感应系统。基本具有硬件无关性。支持彩屏320*240的分辨率,由于考虑不同分辨率的开发过分复杂(想想看你需要计算每个点布局在哪个位置,这对安卓等系统都是大问题),因此我并没有太过完善的考虑过其他分辨率。

我已经写过一篇关于菜单切换和任务实现的文章,本文将介绍我在低内存嵌入式系统上实现的界面GUI库。当年开发这套界面花费了大量的时间,不过搭载这些界面库和系统的硬件数量不超过3台,真是应了那句话:封闭的道路是难以求得长远的发展的。不过,嵌入式的环境下,定制化和特别化也非常正常。玩么,有什么不可以?!

虽然功能依旧有限,不能像目前主流嵌入式系统的"美观":如渐变等,但这是2KB,8MHz的单片机!根本不能实现快速移动,否则会很卡很卡....各种图片和特效都是我在大四寒假里花了大量时间反复优化的,现在看看,当年的很多工作,如果不拿出来,真的要彻底走入历史的垃圾筐了。小伤感。

它有如下特点:

  • 丰富的控件元素,应对绝大多数场景

  • 伪多线程显示(单片机是没有多线程一说的,因此在视觉上同时更新不同控件是需要一定底层支持的)

  • 动态界面(简单滑动和渐隐效果)

  • 对黑白和彩屏系统都可提供支持

如果是开发嵌入式界面的同仁,我相信我的文章会给您以一定的启发。

下面的视频演示了动态的效果:

XMOVE手持终端演示视频

二. 基本结构

可以用如下的结构图表示整个控件库:

通过控件组合,可以实现相当复杂的界面显示,如下图所示:

三. 基本函数实现

考虑到底层驱动并不具有普遍性,我没有给出底层驱动的接口实现。

下面的函数给出了一部分GUI基本功能库的功能函数。

  1. /* 
  2. 函数:BoxGUI(unsigned char *title)  
  3. 功能:在LCD上产生覆盖屏幕的桌面 
  4. 参数:无 
  5. */ 
  6. void BoxGUI(unsigned char *title)    //图形化界面窗口函数 
  7.  
  8.  
  9. /* 
  10. 函数:TaskBoxGUI_P(u16 x1,u16 y1,u16 x2,u16 y2,u8 *title) 
  11. 功能:在LCD上产生可变大小的任务底框 
  12. 参数:(x1,y1)左上角坐标,(X2,Y2)右下角坐标,title为窗口标题 
  13. */ 
  14. void TaskBoxGUI_P(u16 x1,u16 y1,u16 x2,u16 y2,u8 *title,u8 MoveEN)    //图形化界面窗口函数 
  15.  
  16.  
  17. /* 
  18. 函数:ShowMountGUI(u16 x,u16 y,float Mount,u8 Range,u16 Color,u8 Font) 
  19. 功能:在LCD上显示可变位置的浮点值 
  20. 参数:(x,y)数字左上角坐标值,mount要显示的浮点数,range对该数显示的长度,从左开始 
  21. Color显示颜色,Font字体类型,参见LCD使用说明 
  22. */ 
  23.  
  24. void ShowMountGUI(u16 x,u16 y,float Mount,u8 Range,u16 Color,u8 Font) 
  25.  
  26. /* 
  27. 函数:void TaskBoxGUI(unsigned char *title)   
  28. 功能:在LCD上显示固定大小和位置的任务底框 
  29. 参数:tilte:显示的标题 
  30. 返回值:无 
  31. */ 
  32. void TaskBoxGUI(unsigned char *title)   
  33.  
  34. /* 
  35. 函数:unsigned char myListGUI(u8 x,u8 y,u8 ** list, u8 mount) 
  36. 功能:在LCD上显示固定大小,可变位置的列表型菜单界面 
  37. 参数:(x,y)要显示坐标,**list存储列表的指针数组,mount,要显示的列表数量, 
  38. 注意不能超过数组大小 
  39. 返回值:0:表示用户强行退出,1-mount:返回当前用户的选择项(注意:从1开始) 
  40. */ 
  41. unsigned char myListGUI(u8 x,u8 y,u8 ** list,u8 *title, u8 MaxMount,u8 LRMaxMount,u8 UDMaxMount,u8 OneLRLength,u8 OneUDLength) 

三. 实际效果展示

1. 对话框功能:

 和以下菜单样式:

其他控件由于已经在其他相关文章中出现,因此省略.

四.总结

本文展示的界面控件仅仅是其中很小的一部分.其他还包括了密码输入控件,中文输入法控件等,限于空间所限没有一一显示.这是当年热火加蛋疼的大四,在没有代码提示和简陋IDE下一行一行的写出来的代码库.这套界面库的代码量约为3000行.

1楼wuxianglonghaohao昨天 11:08
请问博主,这套GUI是完全自己书写的,还是有所参考
上一篇:上一篇
下一篇:下一篇

 

随机推荐程序问答结果

 

 

如对文章有任何疑问请提交到问题反馈,或者您对内容不满意,请您反馈给我们DOC100.NET论坛发贴求解。
DOC100.NET资源网,机器学习分类整理更新日期::2014-01-05 03:15:01
如需转载,请注明文章出处和来源网址:http://www.doc100.net/bugs/t/20102/
本文WWW.DOC100.NET DOC100.NET版权所有。