📄 menu_gui.lst
字号:
C51 COMPILER V8.16 MENU_GUI 02/18/2009 16:41:08 PAGE 1
C51 COMPILER V8.16, COMPILATION OF MODULE MENU_GUI
OBJECT MODULE PLACED IN ..\Output\Menu_GUI.obj
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE ..\MzMenu_GUI\Menu_GUI.c BROWSE INCDIR(..\LCD_Driver;..\MzMenu_GUI;..\UserC
-ode) DEBUG OBJECTEXTEND PRINT(.\Menu_GUI.lst) OBJECT(..\Output\Menu_GUI.obj)
line level source
1 //========================================================================
2 // 文件名: Menu_GUI.c
3 // 作 者: Xinqiang Zhang(email: Xinqiang@Mzdesign.com.cn)
4 // www.Mzdesign.com.cn
5 // 日 期: 2007/03/24
6 // 描 述: 菜单应用范例程序--UI显示刷新控制函数,配合MzDesign提供的通用版
7 // LCD基础驱动程序
8 // 此代码适用于无byte操作的16位MCU,如凌阳的unsp系列MCU
9 //
10 // 参 考:
11 // 版 本:
12 // 2007/03/24 First version Mz Design
13 // 2007/07/26 V1.01 Mz Design
14 // 修改Show_Item函数,使之适应不同的LCD模块的驱动
15 //
16 //========================================================================
17
18 #include "LCD_Dis.h"
19 #include "LCD_Config.h"
20 #include "Menu_GUI_config.h"
21
22 UCHAR Y_WIDTH_MENU=16;
23 UCHAR X_SPACE_FRONT=10;
24
25 UCHAR Dis_Menu_Num=0;
26
27 UCHAR Font_GB=0;
28 UCHAR Font_String=0;
29 //=====================================================================//
30 //函数:UCHAR ShowMenu_Item(UCHAR y,UINT* Menu_String,UCHAR Font_Color)
31 //描述:显示菜单项子函数
32 //参数:space_front 显示缩进值
33 // y Y轴坐标
34 // Menu_String 菜单项链表的首地址指针
35 //返回:显示溢出情况 0:溢出 1:无溢出
36 //注意:无
37 //=====================================================================//
38 UCHAR ShowMenu_Item(UCHAR y,UCHAR* Menu_String,UCHAR Font_Color)
39 {
40 1 UCHAR *uiTemp;
41 1 UCHAR uiTemp1;
42 1 UCHAR i,x,Char_Nmb;
43 1 x = X_SPACE_FRONT; //Mune show front space....
44 1 Char_Nmb = (UCHAR)Menu_String[0];
45 1 if(Char_Nmb<0xA1)
46 1 {
47 2 for(i=1;i<=Char_Nmb;i++)
48 2 {
49 3 uiTemp = (UCHAR*)(Menu_String+i);
50 3 uiTemp1 = (UCHAR)*uiTemp;
51 3 if(uiTemp1>128)
52 3 {
53 4 FontSet(Font_GB,Font_Color); //选择汉字字库
54 4 uiTemp1 = uiTemp1-128;
C51 COMPILER V8.16 MENU_GUI 02/18/2009 16:41:08 PAGE 2
55 4 }
56 3 else
57 3 {
58 4 FontSet(Font_String,Font_Color);//选择ASCII码字库
59 4 }
60 3 PutChar(x,y,uiTemp1);
61 3 x = x+X_Witch;//GetASIIX();
62 3
63 3 if(x>=Dis_X_MAX) return 0; //横坐标溢出,返回零
64 3 }
65 2 }
66 1 #ifdef Hz_Lib_II
67 1 else
68 1 {
69 2 FontSet_cn(Font_GB,Font_Color);
70 2 FontSet(Font_String,Font_Color);
71 2 PutString_cn(x,y,(char *)Menu_String);
72 2 }
73 1 #endif
74 1 return 1;
75 1 }
76 //=====================================================================//
77 //函数:void UpDate_Menu(UCHAR First_Index,UCHAR Menu_Index,UINT** Menu_List)
78 //描述:刷新整屏菜单显示函数
79 //参数:First_Index 当面显示页的第一条菜单号
80 // Menu_Index 当前处于选用的菜单项
81 // Menu_List 菜单资源链表指针
82 //返回:无
83 //注意:无
84 //=====================================================================//
85 UCHAR First_Index_old=0xff;
86 UCHAR y_Index_old = 0xff;
87 void UpDate_Menu(UCHAR First_Index,UCHAR Menu_Index,UCHAR** Menu_List)
88 {
89 1 UINT y_width,y_Index;
90 1 UCHAR List_Num,i;
91 1 List_Num = (UINT)**Menu_List;
92 1 y_width = Y_WIDTH_MENU;
93 1 y_Index = 0;
94 1 while(First_Index>List_Num) First_Index -= List_Num;
95 1 if(List_Num>Dis_Menu_Num) List_Num = Dis_Menu_Num;
96 1 // if(Menu_Index>List_Num) return;
97 1 if(First_Index_old!=First_Index)
98 1 {
99 2 SetPaintMode(1,MENU_BACK_COLOR);
100 2 ClrScreen(); //清屏
101 2 SetPaintMode(1,MENU_SELE_COLOR);
102 2 if(y_Index_old==0xff)
103 2 {
104 3 Rectangle(0,First_Index*y_width,Dis_X_MAX,First_Index*y_width+y_width-1,1);
105 3 i=First_Index+1;
106 3 ShowMenu_Item(y_Index,(UCHAR *)Menu_List[i++],MENU_SELF_COLOR);
107 3 y_Index = y_Index+Y_WIDTH_MENU;
108 3 for(;i<List_Num+1;i++)
109 3 {
110 4 ShowMenu_Item(y_Index,(UCHAR *)Menu_List[i],MENU_FONT_COLOR);
111 4 y_Index = y_Index+Y_WIDTH_MENU;
112 4 }
113 3 }
114 2 else
115 2 {
116 3 y_Index_old = Menu_Index-First_Index;
C51 COMPILER V8.16 MENU_GUI 02/18/2009 16:41:08 PAGE 3
117 3 Rectangle(0,y_Index_old*Y_WIDTH_MENU,Dis_X_MAX,y_Index_old*Y_WIDTH_MENU+Y_WIDTH_MENU-1,1);
118 3 i=First_Index+1;
119 3 while(List_Num)
120 3 {
121 4 if((i-1)==Menu_Index) ShowMenu_Item(y_Index,(UCHAR *)Menu_List[i],MENU_SELF_COLOR);
122 4 else ShowMenu_Item(y_Index,(UCHAR *)Menu_List[i],MENU_FONT_COLOR);
123 4 y_Index = y_Index+Y_WIDTH_MENU;
124 4 i++;
125 4 List_Num--;
126 4 }
127 3 }
128 2 First_Index_old = First_Index;
129 2 }
130 1 else
131 1 {
132 2 y_Index = y_Index_old-First_Index_old;
133 2 y_Index = y_Index*Y_WIDTH_MENU;
134 2 SetPaintMode(1,MENU_BACK_COLOR);
135 2 Rectangle(0,y_Index/*y_Index_old*Y_WIDTH_MENU*/,Dis_X_MAX,/*y_Index_old*Y_WIDTH_MENU*/y_Index+Y_WIDTH_ME
-NU-1,1);
136 2 ShowMenu_Item(y_Index,(UCHAR *)Menu_List[y_Index_old+1],MENU_FONT_COLOR);
137 2 y_Index = Menu_Index-First_Index;
138 2 y_Index = y_Index*Y_WIDTH_MENU;
139 2 SetPaintMode(1,MENU_SELE_COLOR);
140 2 Rectangle(0,/*Menu_Index*Y_WIDTH_MENU*/y_Index,Dis_X_MAX,/*Menu_Index*Y_WIDTH_MENU*/y_Index+Y_WIDTH_MENU
--1,1);
141 2 ShowMenu_Item(y_Index,(UCHAR *)Menu_List[Menu_Index+1],MENU_SELF_COLOR);
142 2 }
143 1 y_Index_old = Menu_Index;
144 1 }
145 //=====================================================================//
146 //函数:void Redraw_Menu(UCHAR First_Index,UCHAR Menu_Index,UINT** Menu_List)
147 //描述:刷新整屏菜单显示函数
148 //参数:First_Index 当面显示页的第一条菜单号
149 // Menu_Index 当前处于选用的菜单项
150 // Menu_List 菜单资源链表指针
151 //返回:
152 //注意:无
153 //=====================================================================//
154 void Redraw_Menu(UCHAR First_Index,UCHAR Menu_Index,UCHAR** Menu_List)
155 {
156 1 UCHAR *Menu_Config;
157 1 First_Index_old=0xff;
158 1 Menu_Config = (UCHAR *)(*Menu_List);
159 1 Font_GB = *(Menu_Config+1);
160 1 Font_String = *(Menu_Config+2);
161 1 Y_WIDTH_MENU = *(Menu_Config+3);
162 1 X_SPACE_FRONT = *(Menu_Config+4);
163 1 Dis_Menu_Num = (Dis_Y_MAX+1)/Y_WIDTH_MENU;
164 1 UpDate_Menu(First_Index,Menu_Index,Menu_List);
165 1 }
166 //=====================================================================//
167 //函数:void Initial_Menu(UINT** Menu_List)
168 //描述:刷新整屏菜单显示函数
169 //参数:Menu_List 菜单资源链表指针
170 //返回:
171 //注意:无
172 //=====================================================================//
173 void Initial_Menu(UCHAR** Menu_List)
174 {
175 1 UCHAR *Menu_Config;
176 1 First_Index_old=0xff;
C51 COMPILER V8.16 MENU_GUI 02/18/2009 16:41:08 PAGE 4
177 1 y_Index_old = 0xff;
178 1 Menu_Config = (UCHAR *)(*Menu_List);
179 1 Font_GB = *(Menu_Config+1);
180 1 Font_String = *(Menu_Config+2);
181 1 Y_WIDTH_MENU = *(Menu_Config+3);
182 1 X_SPACE_FRONT = *(Menu_Config+4);
183 1 Dis_Menu_Num = (Dis_Y_MAX+1)/Y_WIDTH_MENU;
184 1 UpDate_Menu(0,0,Menu_List);
185 1 }
186 //=====================================================================//
187 //函数:unsigned int GetMLNum(unsigned int* Menu_List)
188 //描述:获取菜单资源的菜单项个数函数
189 //参数: Menu_List 菜单资源链表指针
190 //返回:菜单项个数
191 //注意:无
192 //=====================================================================//
193 UCHAR GetMLNum(UCHAR **Menu_List)
194 {
195 1 UCHAR uiTemp;
196 1 // UCHAR code*Menu_Config;
197 1 uiTemp/*Menu_Config*/ = (unsigned char)**Menu_List;
198 1 // uiTemp = (UCHAR)*Menu_Config;
199 1 return uiTemp-1;
200 1 }
201 //=====================================================================//
202 //函数:unsigned int GetMLiNum_Page(unsigned int* Menu_List)
203 //描述:获取菜单资源在一屏可以显示的菜单项个数函数
204 //参数: Menu_List 菜单资源链表指针
205 //返回:菜单项个数
206 //注意:无
207 //=====================================================================//
208 UCHAR GetMLiNum_Page(UCHAR** Menu_List)
209 {
210 1 UCHAR uiTemp;
211 1 UCHAR *Menu_Config;
212 1 Menu_Config = (UCHAR *)(Menu_List[0]);
213 1 uiTemp = *(Menu_Config+3);
214 1 uiTemp = (Dis_Y_MAX+1)/uiTemp; //
215 1 return uiTemp;
216 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 785 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 7 26
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -