7838|6

3836

帖子

19

TA的资源

纯净的硅(中级)

楼主
 

占用资源小的简单GUI的实现~~(转) [复制链接]

对于类似51资源有限的单片机和点陈LCD比较实用









源码: lwGUI.rar (22.95 KB, 下载次数: 215)
此帖出自单片机论坛

最新回复

看看思路   详情 回复 发表于 2021-7-21 14:45
点赞 关注(3)
 

回复
举报

3836

帖子

19

TA的资源

纯净的硅(中级)

沙发
 
移植:将GUI_hw.c 中接口函数替换即可.

功能:其它画线就不用讲了,菜单编程简单说明一下.程序亮点也在此(自认为)

  1. //----------------------------------------------------------------------------------
  2. //菜单结构
  3. typedef struct
  4. {
  5. INT8U x; //菜单框架左上角X坐标
  6. INT8U y; //菜单框架左上角Y坐标
  7. INT8U width; //菜单框架宽度
  8. INT8U height; //菜单框架高度

  9. INT8U itemTop; //显示菜单框中最上面项
  10. INT8U sItem; //当前选择项
  11. INT8U itemMax; //最大顶数

  12. const char *title; //菜单标题
  13. const BMP **pbmp; //菜单项位图列表
  14. const char ***ptext; //菜单项文本列表

  15. void(*Paint)(void); //重绘菜单
  16. void(*MegProc)(INT8U); //消息处理
  17. }MENU;

  18. 1.每个菜单项都有一个重绘菜单函数void(*Paint)(void); 通过它可画出想要的任何菜单样式。源码中画了大图标菜单和选择条菜单样式。每个菜单都有一个消息响应函数void(*MegProc)(INT8U); 传入消息如上页下页返回等操作。
  19. 2.定义菜单中的项采用分开方式编程,可读性强如:
  20. //==================================================================================
  21. //定义菜单字符串
  22. const char *sCtrl = "控制";
  23. const char *sSet = "设置";
  24. const char *sGame = "游戏";
  25. const char *sHelp = "帮助";

  26. const char *sCtrl2 = "智能插座 ";
  27. const char *sCtrl3 = "浴缸 ";
  28. const char *sCtrl4 = "脸盆 ";
  29. const char *sCtrl5 = "空调 ";
  30. //==================================================================================
  31. //定义菜单文本
  32. const char **MMenuText[] ={&sCtrl,&sSet,&sGame,&sHelp};
  33. const char **SCtrlText[] ={&sCtrl2,&sCtrl3,&sCtrl4,&sCtrl5};
  34. //==================================================================================
  35. //定义菜单位图列表
  36. const BMP *MMenuBmp[] ={&ctrl,&set,&game,&help};
  37. //==================================================================================
  38. //声明菜单消息处理事件
  39. void MMegProc(INT8U meg);
  40. void SCtrlMegProc(INT8U meg);
  41. //==================================================================================
  42. //定义菜单项
  43. MENU MMenu=
  44. {
  45. 0,
  46. 0,
  47. 128,
  48. 48,
  49. 0,
  50. 0,
  51. 4,
  52. "Main menu",
  53. MMenuBmp,
  54. MMenuText,
  55. GUI_MenuBmpPaint,
  56. MMegProc
  57. };
  58. MENU SCtrl=
  59. {
  60. 0,
  61. 0,
  62. 128,
  63. 48,
  64. 0,
  65. 0,
  66. 4,
  67. "控制",
  68. 0,
  69. SCtrlText,
  70. GUI_MenuPaint,
  71. SCtrlMegProc
  72. };
  73. //----------------------------------------------------------------------------------
  74. // 主菜单消息处理
  75. //描述: 处理主菜单消息
  76. //参数:meg :消息
  77. //返回: 无
  78. //----------------------------------------------------------------------------------
  79. void MMegProc(INT8U meg)
  80. {
  81. if(meg==KEY_UP)
  82. {
  83. if(MMenu.sItem>0)
  84. MMenu.sItem--;
  85. else
  86. MMenu.sItem = MMenu.itemMax-1;
  87. }
  88. else if(meg==KEY_DOWN)
  89. {
  90. if(MMenu.sItem<(MMenu.itemMax-1))
  91. MMenu.sItem++;

  92. else
  93. MMenu.sItem = 0;
  94. }
  95. else if(meg==KEY_EN)
  96. {
  97. if(MMenu.sItem==0)
  98. {
  99. pCMenu=&SCtrl;
  100. GUI_Clear();
  101. }
  102. if(MMenu.sItem==2)
  103. {
  104. TetrisMain();
  105. GUI_Clear();
  106. BuzzerOn;
  107. OSTimeDly(5);
  108. BuzzerOff;
  109. }
  110. }
  111. else if(meg==KEY_CLR)
  112. {
  113. GUI_Clear();
  114. pCMenu = 0;
  115. return;
  116. }
  117. pCMenu->Paint();
  118. }
  119. //----------------------------------------------------------------------------------
  120. // 控制菜单消息处理
  121. //描述: 处理控制菜单菜单消息
  122. //参数:meg :消息
  123. //返回: 无
  124. //----------------------------------------------------------------------------------
  125. void SCtrlMegProc(INT8U meg)
  126. {
  127. if(meg==KEY_UP)
  128. {
  129. if(SCtrl.sItem>0)
  130. SCtrl.sItem--;
  131. else
  132. SCtrl.sItem = SCtrl.itemMax-1;

  133. if(SCtrl.sItem
  134. SCtrl.itemTop--;
  135. if(SCtrl.sItem>SCtrl.itemTop+1)
  136. SCtrl.itemTop= SCtrl.sItem-1;
  137. pCMenu->Paint();
  138. }
  139. else if(meg==KEY_DOWN)
  140. {
  141. if(SCtrl.sItem<(SCtrl.itemMax-1))
  142. SCtrl.sItem++;

  143. else
  144. SCtrl.sItem = 0;

  145. if(SCtrl.sItem>1)
  146. SCtrl.itemTop=SCtrl.sItem-1;
  147. else
  148. SCtrl.itemTop=0;
  149. pCMenu->Paint();
  150. }
  151. else if(meg==KEY_CLR)
  152. {
  153. pCMenu=&MMenu;
  154. GUI_Clear();
  155. pCMenu->Paint();
  156. }
  157. else LCD_Refresh();
  158. }
  159. //==================================================================================
复制代码
此帖出自单片机论坛
 
 

回复

2130

帖子

0

TA的资源

五彩晶圆(中级)

板凳
 
很早就想写一个51的GUI,一直没能实施,看下你的构思。凑下热闹
此帖出自单片机论坛
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

4
 
6666,感谢
此帖出自单片机论坛
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

5
 
非常不错!!!!
此帖出自单片机论坛
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

6
 
正是急需的资料
此帖出自单片机论坛
 
 
 

回复

18

帖子

0

TA的资源

一粒金砂(中级)

7
 

看看思路

此帖出自单片机论坛
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/6 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表